Penulis: Matthew Smith
Terjemahan: Zhang Ruonan
Proofreading: Wu Jindi
Artikel ini Sekitar 6700 kata , Dianjurkan untuk membaca 10 menit
Makalah ini menggunakan kumpulan data Iris untuk melatih beberapa set model pembelajaran mesin, dan menarik batasan keputusan dari setiap model dengan memprediksi sejumlah besar data yang dipasang.
Label: Pembelajaran Mesin
Kata Pengantar Penulis
Saya melatih serangkaian model pembelajaran mesin menggunakan set data Iris, mensintesis titik data baru dari nilai ekstrem dalam data, dan menguji banyak model pembelajaran mesin untuk menggambar batas keputusan, yang dapat membuat prediksi dalam ruang 2D berdasarkan batas-batas ini , Yang berguna untuk memperjelas tujuan dan memahami bagaimana model pembelajaran mesin yang berbeda membuat prediksi.
Pembelajaran mesin mutakhir
Model pembelajaran mesin dapat mengungguli model ekonometrik tradisional. Ini bukanlah hal baru, tetapi sebagai bagian dari penelitian, saya ingin menjelaskan mengapa dan bagaimana model tertentu membuat prediksi klasifikasi. Saya ingin menunjukkan batas keputusan yang menjadi dasar model klasifikasi biner saya, yaitu ruang partisi tempat data ditampilkan untuk prediksi klasifikasi. Masalah dan kode juga dapat diterapkan ke masalah multi-kategori setelah beberapa penyesuaian.
inisialisasi
Pertama muat serangkaian paket, lalu buat fungsi logistik baru untuk mengonversi log-odds ke fungsi probabilitas logistik nanti.
perpustakaan (dplyr) perpustakaan (patchwork) perpustakaan (ggplot2) perpustakaan (knitr) perpustakaan (kableExtra) perpustakaan (purrr) perpustakaan (stringr) perpustakaan (tidyr) perpustakaan (xgboost) perpustakaan (lightgbm) perpustakaan (keras) perpustakaan (tidyquant) ## ################## Tentukan sebelumnya beberapa functionslogit2prob < -fungsi (logit) {peluang < -exp (logit) prob < -odds / (1 + peluang) kembali (prob)}data
Kumpulan data iris yang saya gunakan berisi informasi tentang 3 variabel tanaman berbeda yang dikumpulkan oleh ahli statistik Inggris Ronald Fisher pada tahun 1936. Kumpulan data berisi karakteristik berbeda dari 4 spesies tumbuhan, yang dapat membedakan 33 spesies berbeda (Setosa, Virginica dan Versicolor). Namun, masalah saya membutuhkan masalah klasifikasi biner, bukan masalah klasifikasi ganda. Dalam kode di bawah ini, saya mengimpor data iris dan menghapus spesies tanaman, virginica, untuk mengubahnya dari beberapa klasifikasi menjadi masalah klasifikasi biner.
data (iris) df < -iris% > % filter (Spesies! = "virginica")% > % mutate (Species = + (Species == "versicolor")) str (df) ## 'data.frame': 100 obs. of 5 variable: ## $ Sepal.Length: num 5.14.94.74.65 5.44.65 4.44.9 ... ## $ Sepal. Lebar: num 3.53 3.23.13.63.93.43.42.93.1 ... ## $ Petal Panjang: num 1.41.41.31.51.41.71.41.51.41.5 ... ## $ Kelopak Lebar: num 0.20.20.20.20.20.40.30.20.20.1 ... ## $ Spesies: int 00 00 00 00 00 ...Saya pertama kali menggunakan ggplot untuk memplot data. Dalam objek ggplot yang disimpan di bawah ini, hanya pilihan variabel x dan y yang diubah untuk setiap grafik.
plt1 < -df% > % ggplot (aes (x = Sepal.Width, y = Sepal.Length, color = factor (Species))) + geom_point (size = 4) + theme_bw (base_size = 15) + theme (legend.position = "none") plt2 < -df% > % ggplot (aes (x = Petal.Length, y = Sepal.Length, color = factor (Species))) + geom_point (size = 4) + theme_bw (base_size = 15) + theme (legend.position = "none") plt3 < -df% > % ggplot (aes (x = Petal.Width, y = Sepal.Length, color = factor (Species))) + geom_point (size = 4) + theme_bw (base_size = 15) + theme (legend.position = "none") plt3 < -df% > % ggplot (aes (x = Sepal.Length, y = Sepal.Width, color = factor (Species))) + geom_point (size = 4) + theme_bw (base_size = 15) + theme (legend.position = "none") plt4 < -df% > % ggplot (aes (x = Petal.Length, y = Sepal.Width, color = factor (Species))) + geom_point (size = 4) + theme_bw (base_size = 15) + theme (legend.position = "none") plt5 < -df% > % ggplot (aes (x = Petal.Width, y = Sepal.Width, color = factor (Species))) + geom_point (size = 4) + theme_bw (base_size = 15) + theme (legend.position = "none") plt6 < -df% > % ggplot (aes (x = Petal.Width, y = Sepal.Length, color = factor (Species))) + geom_point (size = 4) + theme_bw (base_size = 15) + theme (legend.position = "none")Saya juga menggunakan paket patchwork baru untuk memudahkan tampilan hasil ggplot. Kode berikut menggambar grafik kami dengan sangat lugas (1 grafik teratas menempati panjang ruang grid, 2 grafik berukuran sedang, grafik tunggal lainnya dan 2 grafik lainnya di bagian bawah)
(plt1) / (plt2 + plt3)Atau, kita dapat mengatur ulang gambar tersebut dengan cara apapun yang kita inginkan, dan menggambar dengan cara berikut:
(plt1 + plt2) / (plt5 + plt6)Saya pikir ini terlihat bagus.
tujuan
Tujuan saya adalah membuat algoritme klasifikasi untuk membedakan kedua spesies tanaman ini dan kemudian menghitung batas keputusan untuk lebih memahami bagaimana model membuat prediksi tersebut. Untuk membuat peta batas keputusan untuk setiap kombinasi variabel, kita membutuhkan kombinasi variabel yang berbeda dalam data.
var_combos < -expand.grid (nama kolom (df), nama kolom (df))% > % filter (! Var1 == Var2) var_combos% > % kepala ()% > % kable (caption = "Kombinasi Variabel", escape = F ,, digit = 2)% > % kable_styling (bootstrap_options = c ("striped", "hover", "condensed", "responsive"), font_size = 9, fixed_thead = T, full_width = F)% > % scroll_box (lebar = "100%", tinggi = "200px")Selanjutnya, saya akan menggunakan kombinasi variabel yang berbeda di atas untuk membuat daftar (satu daftar untuk setiap kombinasi), dan menggunakan data sintetis (atau data dari minimum hingga maksimum setiap kombinasi variabel) untuk menetapkan nilai ke daftar. Ini akan berfungsi sebagai data uji sintetis kami untuk membuat prediksi dan menetapkan batasan keputusan.
Perlu dicatat bahwa grafik ini pada akhirnya akan menjadi dua dimensi, jadi kami hanya melatih model pembelajaran mesin pada dua variabel, tetapi untuk setiap kombinasi dari dua variabel ini, mereka akan menjadi dua yang pertama dalam bingkai data boundary_lists Variabel.
boundary_lists < -map2 (.x = var_combos $ Var1, .y = var_combos $ Var2, ~ pilih (df, .x, .y)% > % meringkas (minX = min (., na.rm = TRUE), maxX = max (., na.rm = TRUE), minY = min (., na.rm = TRUE), maxY = max (., na. rm = BENAR)))% > % peta (., ~ tibble (x = seq (.x $ minX, .x $ maxX, length.out = 200), y = seq (.x $ minY, .x $ maxY, length.out = 200), ))% > % peta (., ~ tibble (xx = rep (.x $ x, each = 200), yy = rep (.x $ y, time = 200)))% > % map2 (., asplit (var_combos, 1), ~ .x% > % set_names (.y))Kita dapat melihat bagaimana empat observasi pertama dari dua daftar pertama adalah:
boundary_lists% > % peta (., ~ head (., 4))% > % head (2) ## ## # A tibble: 4 x 2 ## Sepal.Width Sepal.Length ## < dbl > < dbl > ## 12 4.3 ## 22 4.31 ## 32 4.33 ## 42 4.34 #### ## # A tibble: 4 x 2 ## Kelopak. Panjang Sepal. Panjang ## < dbl > < dbl > ## 11 4.3 ## 21 4.31 ## 31 4.33 ## 41 4.34boundary_lists% > % peta (., ~ head (., 4))% > % tail (2) ## ## # A tibble: 4 x 2 ## Sepal.Width Petal.Width ## < dbl > < dbl > ## 12 0.1 ## 22 0.109 ## 32 0.117 ## 42 0.126 #### ## # Sebuah tibble: 4 x 2 ## Kelopak Panjang Kelopak Lebar ## < dbl > < dbl > ## 11 0.1 ## 21 0.109 ## 31 0.117 ## 41 0.126Waktu pelatihan
Sekarang kami telah menetapkan data simulasi untuk pengujian, saya ingin melatih model berdasarkan pengamatan aktual. Saya akan menggunakan setiap titik data pada gambar di atas untuk melatih model berikut:
- Model regresi logistik
- Mendukung mesin vektor + kernel linier
- Mendukung mesin vektor + kernel polinomial
- Mendukung mesin vektor + kernel radial
- Mendukung mesin vektor + inti sigmoid
- Hutan acak
- Model XGBoost dengan parameter default
- Jaringan saraf Keras satu lapisan (dengan komposisi linier)
- Jaringan neural Keras yang lebih dalam (dengan komposisi linier)
- Jaringan saraf Keras yang lebih dalam (dengan komposisi linier)
- Model LightGBM di bawah parameter default
Catatan tambahan: Saya bukan ahli dalam pembelajaran mendalam / Keras / Tensorflow, jadi saya yakin ada model yang lebih baik yang menghasilkan batasan keputusan yang lebih baik, tetapi sangat menarik untuk menggunakan purrr dan peta untuk melatih model pembelajaran mesin yang berbeda.
########################################### ########################################### ########################################### ################# params_lightGBM < -list (# objective = "binary", # metric = "auc", # min_data = 1 #) # Untuk menginstal Light GBM coba yang berikut ini di RStudio terinal # git clone --recursive https://github.com/microsoft / LightGBM # cd LightGBM # Rscript build_r.Rmodels_list < -var_combos% > % mutasi (modeln = str_c ('mod', row_number ()))% > % pmap (~ {xname = ..1 yname = ..2 modelname = ..3 df% > % pilih (Spesies, xname, yname)% > % group_by (grp = 'grp')% > % sarang ()% > % mutate (models = map (data, ~ {list (# Logistic Model Model_GLM = {glm (Species ~., data = .x, family = binomial (link = 'logit'))}, # Support Vector Machine (linear) Model_SVM_Linear = {e1071 :: svm (Spesies ~., Data = .x, type = 'C-klasifikasi', kernel = 'linear')}, # Support Vector Machine (polynomial) Model_SVM_Polynomial = {e1071 :: svm (Species ~ ., data = .x, type = 'C-klasifikasi', kernel = 'polynomial')}, # Support Vector Machine (sigmoid) Model_SVM_radial = {e1071 :: svm (Species ~., data = .x, type = ' Klasifikasi-C ', kernel =' sigmoid ')}, # Mesin Vektor Dukungan (radial) Model_SVM_radial_Sigmoid = {e1071 :: svm (Spesies ~., Data = .x, type =' C-klasifikasi ', kernel =' radial ' )}, # Random Forest Model_RF = {randomForest :: randomForest (formula = as.factor (Species) ~., Data =.)}, # Extreme Gradient Boosting Model_XGB = {xgboost (objective = 'binary: logistic', eval_metric = 'auc', data = as.matrix (.x), label = as.matrix (.x $ Species), # variabel biner nrounds = 10) }, # Jaringan Neural Kera Model_Keras = {mod < -keras_model_sequential ()% > % layer_dense (units = 2, activation = 'relu', input_shape = 2)% > % layer_dense (units = 2, activation = 'sigmoid') mod% > % kompilasi (loss = 'binary_crossentropy', optimizer_sgd (lr = 0.01, momentum = 0.9), metrics = c ('akurasi')) fit (mod, x = as.matrix (.x), y = to_categorical (.x $ Species, 2), epochs = 5, batch_size = 5, validation_split = 0) print (modelname) assign (modelname, mod)}, # Kera Neural Network Model_Keras_2 = {mod < -keras_model_sequential ()% > % layer_dense (units = 2, activation = 'relu', input_shape = 2)% > % layer_dense (units = 2, activation = 'linear', input_shape = 2)% > % layer_dense (units = 2, activation = 'sigmoid') mod% > % kompilasi (loss = 'binary_crossentropy', optimizer_sgd (lr = 0.01, momentum = 0.9), metrics = c ('akurasi')) fit (mod, x = as.matrix (.x), y = to_categorical (.x $ Species, 2), epochs = 5, batch_size = 5, validation_split = 0) print (modelname) assign (modelname, mod)}, # Kera Neural Network Model_Keras_3 = {mod < -keras_model_sequential ()% > % layer_dense (units = 2, activation = 'relu', input_shape = 2)% > % layer_dense (units = 2, activation = 'relu', input_shape = 2)% > % layer_dense (units = 2, activation = 'linear', input_shape = 2)% > % layer_dense (units = 2, activation = 'sigmoid') mod% > % kompilasi (loss = 'binary_crossentropy', optimizer_sgd (lr = 0.01, momentum = 0.9), metrics = c ('akurasi')) fit (mod, x = as.matrix (.x), y = to_categorical (.x $ Species, 2), epochs = 5, batch_size = 5, validation_split = 0) print (modelname) assign (modelname, mod)}, # LightGBM model Model_LightGBM = {lgb.train (data = lgb.Dataset (data = as.matrix) (.x), label = .x $ Spesies), objektif = 'biner', metrik = 'auc', min_data = 1 #params = params_lightGBM, #learning_rate = 0.1)})}))})% > % map (., ~ unlist (., recursive = FALSE))Data kalibrasi
Sekarang setelah kita memiliki model dan prediksi yang terlatih, kita dapat mengembalikan prediksi ini ke dalam data untuk visualisasi dengan ggplot, lalu menggunakan paket patchwork untuk penyusunan huruf.
plot_data < -map2 (.x = boundary_lists, .y = map (models_predict, ~ map (., ~ tibble (.))), ~ bind_cols (.x, .y)) names (plot_data) < -map_chr (plot_data, ~ c (tempel (nama kolom (.), "dan", nama kolom (.), sep = "_")))Sekarang kami memiliki perkiraan, kami dapat membuat ggplots.
ggplot_lists < -plot_data% > % map (., ~ select (., -contains ("Model"))% > % pivot_longer (cols = contains ("Prediction"), names_to = "Model", values_to = "Prediction"))% > % peta (.x =., ~ ggplot () + geom_point (aes (x = !! rlang :: sym (nama kolom (.x)), y = !! rlang :: sym (nama kolom (.x)), warna = faktor (!! rlang :: sym (nama kolom (.x)))), data = .x) + geom_contour (aes (x = !! rlang :: sym (nama kolom (.x)), y = !! rlang :: sym (nama kolom (.x)), z = !! rlang :: sym (nama kolom (.x))), data = .x) + geom_point (aes (x = !! rlang :: sym (nama kolom (. x)), y = !! rlang :: sym (colnames (.x)), color = factor (!! rlang :: sym (colnames (df))) # ini adalah variabel status), size = 8, data = df) + geom_point (aes (x = !! rlang :: sym (colnames (.x)), y = !! rlang :: sym (colnames (.x))), size = 8, shape = 1, data = df) + facet_wrap (~ Model) + theme_bw (base_size = 25) + tema (legend.position = "none"))Gambarkan semua kombinasi batasan keputusan yang berbeda. Catatan: Kode di atas akan berjalan lebih baik di konsol Anda. Ketika saya menggunakan kode untuk memprogram posting blog ini, gambarnya sangat kecil. Oleh karena itu, saya telah menyediakan diagram terpisah untuk contoh kombinasi model dan variabel.
Pertama-tama saya harus memilih dua kolom pertama, yang merupakan variabel target kita (Petal.Width, Petal.Length, Sepal.Width dan Sepal.Length). Kemudian, saya ingin mengambil sampel secara acak dari setiap kolom (yaitu, hasil prediksi dari model pembelajaran mesin yang berbeda).
plot_data_sampled < -plot_data% > % map (., ~ select (., -contains ("Model"))% > % pilih (., c (1: 2), sampel (nama kolom (.), 2))% > % pivot_longer (cols = contains ("Prediction"), names_to = "Model", values_to = "Prediction"))Selanjutnya, saya bisa menggambar dengan menggambar daftar secara acak.
plot_data_sampled% > % rlist :: list.sample (1)% > % peta (.x =., ~ ggplot () + geom_point (aes (x = !! rlang :: sym (nama kolom (.x)), y = !! rlang :: sym (nama kolom (.x)), warna = faktor (!! rlang :: sym (nama kolom (.x)))), data = .x) + geom_contour (aes (x = !! rlang :: sym (nama kolom (.x)), y = !! rlang :: sym (nama kolom (.x)), z = !! rlang :: sym (nama kolom (.x))), data = .x) + geom_point (aes (x = !! rlang :: sym (nama kolom (. x)), y = !! rlang :: sym (colnames (.x)), color = factor (!! rlang :: sym (colnames (df))) # ini adalah variabel status), size = 3, data = df) + geom_point (aes (x = !! rlang :: sym (colnames (.x)), y = !! rlang :: sym (colnames (.x))), size = 3, shape = 1, data = df) + facet_wrap (~ Model) + #coord_flip () + theme_tq (base_family = "serif") + tema (# aspect.ratio = 1, axis.line.y = element_blank (), axis.ticks.y = element_blank (), legend.position = "bottom", # legend.title = element_text (size = 20), # legend.text = element_text (size = 10), axis.title = element_text (size = 20), axis.text = element_text (size = "15"), strip.text.x = element_text (size = 15), plot.title = element_tex t (size = 30, hjust = 0.5), strip.background = element_rect (fill = 'darkred'), panel.background = element_blank (), panel.grid.major = element_blank (), panel.grid.minor = element_blank ( ), # axis.text.x = element_text (angle = 90), axis.text.y = element_text (angle = 90, hjust = 0,5), # axis.title.x = element_blank () legend.title = element_blank () , legend.text = element_text (size = 20))) ## $ Sepal.Width_and_Petal.Length ## Peringatan: Indeks baris harus antara 0 dan jumlah baris (0). Gunakan `NA` sebagai indeks baris untuk mendapatkan baris penuh dengan nilai `NA`. ## Peringatan ini ditampilkan sekali per sesi.Beberapa model acak lainnya:
## $ Sepal.Width_and_Sepal.Length ## $ Sepal.Width_and_Sepal.Length ## $ Petal.Length_and_Sepal.Length ## $ Petal.Width_and_Petal.Length ## $ Petal.Length_and_Petal.Width ## Peringatan di grDevices :: contourLines (x = sort (unik (data $ x)), y = ## sort (unik (data $ y)) ,: todos los valores de z son iguales ## Peringatan: Tidak mungkin membuat data konturBiasanya model linier menghasilkan batasan keputusan linier. Tampaknya model Random Forest akan overfit beberapa data, sedangkan model XGBoost dan LightGBM bisa mendapatkan batasan keputusan yang lebih baik dan lebih umum. Kinerja jaringan saraf Keras buruk karena belum dilatih dengan benar.
- glm = model regresi logistik
- svm.formula Prediksi ... 6 = mendukung mesin vektor + kernel linier
- svm.formula Prediksi ... 8 = mendukung mesin vektor + kernel polinomial
- svm.formula Prediksi ... 12 = mendukung mesin vektor + kernel radial
- svm.formula Prediksi ... 10 = mendukung mesin vektor + inti sigmoid
- randomForest.formula Prediction = Random Forest
- xgb.Booster Prediction = Model XGBoost dengan parameter default
- keras.engine.sequential.Sequential Prediction ... 18 = Jaringan neural Keras satu lapisan
- keras.engine.sequential.Sequential Prediction ... 18 = jaringan saraf Keras yang lebih dalam
- keras.engine.sequential.Sequential Prediction ... 22 = Jaringan saraf Keras yang lebih dalam
- lgb.Booster Prediction = Model LightGBM di bawah parameter default
Dalam banyak kombinasi, model jaringan saraf Keras hanya memprediksi bahwa semua pengamatan termasuk dalam kategori tertentu (sekali lagi, saya tidak membuat banyak penyesuaian pada model, dan model hanya memiliki 100 pengamatan untuk dilatih tetapi harus memprediksi 40.000 poin). Artinya, ini mewarnai seluruh warna latar belakang biru atau merah, dan melakukan banyak kesalahan klasifikasi. Dalam beberapa gambar, jaringan saraf dapat mencapai klasifikasi yang sempurna, sementara di gambar lain, membuat batas keputusan yang aneh --- jaringan saraf sangat menarik.
Dengan melakukan beberapa analisis singkat terhadap gambar-gambar tersebut, nampaknya kita telah memperoleh klasifikasi yang hampir sempurna dengan menggunakan model regresi logistik sederhana. Tetapi karena hubungan antara setiap variabel dapat dipisahkan secara linier, ini tidak mengherankan. Tetapi saya masih lebih suka model XGBoost dan LightGBM karena mereka dapat menangani hubungan non-linier dengan menambahkan regularisasi ke fungsi tujuan mereka, sehingga mendapatkan batasan keputusan yang lebih andal. Model hutan acak gagal di sini. Batas keputusan mereka tampaknya dilakukan dengan baik, tetapi sebenarnya ada beberapa bagian yang kabur dan tajam.
Namun tentunya dengan munculnya lebih banyak variabel dan dimensi yang lebih besar, batasan pengambilan keputusan ini akan menjadi lebih kompleks dan nonlinier.
untuk (i in 1: length (plot_data)) {print (ggplot_lists )}Kesimpulan
Saya menulis model ini pada instans Amazon Ubuntu EC2, tetapi ketika saya mengompilasi entri blog dengan R pada sistem Windows, saya mengalami beberapa masalah. Masalah ini terutama disebabkan oleh penginstalan paket lightgbm dan versi paket. Gunakan versi paket berikut (yaitu, gunakan versi paket terbaru), kode berjalan normal.
sessionInfo () ## R versi 3.6.1 (2019-07-05) ## Platform: x86_64-w64-mingw32 / x64 (64-bit) ## Berjalan di bawah: Windows 10 x64 (build 17763) #### Matrix produk: default #### lokal: ## LC_COLLATE = Spanish_Spain.1252 LC_CTYPE = Spanish_Spain.1252 ## LC_MONETARY = Spanish_Spain.1252 LC_NUMERIC = C ## LC_TIME = Spanish_Spain.1252 #### paket dasar terlampir: ## grafik statistik grDevices menggunakan basis metode kumpulan data #### paket terlampir lainnya: ## tidyquant_0.5.7 quantmod_0.4-15 ## TTR_0.23-6 PerformanceAnalytics_1.5.3 ## xts_0.11-2 zoo_1.8-6 ## lubridate_1.7.4 keras_2.2.5.0 ## lightgbm_2.3.2 R6_2.4.1 ## xgboost_0.90.0.1 tidyr_1.0.0 ## stringr_1.4.0 purrr_0.3.2 ## kableExtra_1.1.0.9000 knitr_1.25.4 ## ggplot2_3.2.1 patchwork_1.0.0 # # dplyr_0.8.99.9000 #### dimuat melalui namespace (dan tidak dilampirkan): ## Rcpp_1.0.3 lattice_0.20-38 class_7.3-15 ## utf8_1.1.4 menegaskanthat_0.2.1 zeallot_0.1.0 ## digest_0. 6.24 e1071_1.7-2 evalu_0.14 ## httr_1.4.1 blogdown_0.15 pilar_1.4.3.9000 ## tfruns_1.4 rlang _0.4.4 lazyeval_0.2.2 ## curl_4.0 rstudioapi_0.10 data.table_1.12.8 ## whisker_0.3-2 Matrix_1.2-17 reticulate_1.14-9001 ## rmarkdown_1.14 lobstr_1.1.1 pelabelan_0.3 ## webshot_0 .5.1 readr_1.3.1 munsell_0.5.0 ## compiler_3.6.1 xfun_0.8 pkgconfig_2.0.3 ## base64enc_0.1-3 tensorflow_2.0.0 htmltools_0.3.6 ## tidyselect_1.0.0 tibble_2.99.99.9014 bookdown_0.13 ## quadprog_1.5 -7 randomForest_4.6-14 fansi_0.4.1 ## viridisLite_0.3.0 crayon_1.3.4 withr_2.1.2 ## rappdirs_0.3.1 grid_3.6.1 Quandl_2.10.0 ## jsonlite_1.6.1 gtable_0.3.0 siklus hidup_0.1.0 ## magrittr_1.5 scale_1. 0.0 rlist_0.4.6.1 ## cli_2.0.1 stringi_1.4.3 xml2_1.2.2 ## ellipsis_0.3.0 generics_0.0.2 vctrs_0.2.99.9005 ## tools_3.6.1 glue_1.3.1 hms_0.5.1 ## yaml_2.2.0 colourspace_1.4- 1 rvest_0.3.4Judul asli:
Batasan Keputusan untuk Rangkaian Model Machine Learning
Tautan asli:
https://www.kdnuggets.com/2020/03/decision-boundary-series-machine-learning-models.html
Proofreading: Lin Yilin
Profil Penerjemah
Zhang Ruonan , Lulusan pascasarjana statistik UIUC, ilmuwan data industri media California Selatan. Saya telah magang di bank komersial domestik dan asing, Internet, industri ritel dan perusahaan makanan. Saya suka berhubungan dengan analisis data dan kasus aplikasi di berbagai bidang, dan saya memiliki antusiasme yang besar untuk pengembangan produk ilmu data.
-Selesai-
Ikuti platform publik WeChat resmi dari Institut Ilmu Data Tsinghua-Qingdao " Pai Data AI "Dan nomor saudara perempuan" Data Pie THU "Dapatkan lebih banyak manfaat kuliah dan konten berkualitas.
- Pipa pemanas tidak panas, pipa air bocor ... "tim parkour" komunitas memperbaiki lebih dari 1.000 kali dalam 60 hari
- Bagaimana Anda mengevaluasi "Properti Sains dan Inovasi" dari Dewan Inovasi Sains dan Teknologi? Panduan SFC ada di sini
- Chen Yixin: Perang pertahanan Wuhan telah memasuki tahap baru pertempuran dan kemenangan yang menentukan
- Kementerian Pertanian dan Pedesaan: Pasokan dan permintaan daging babi diharapkan secara umum stabil selama Festival Musim Semi
- Apakah bahasa latihan militer gabungan Sino-Pakistan tidak jelas? Masih menundukkan "teroris" dalam sepuluh menit