Bagaimana memilih antara algoritma pembelajaran

21

Saya perlu mengimplementasikan program yang akan mengklasifikasikan catatan ke dalam 2 kategori (benar / salah) berdasarkan beberapa data pelatihan, dan saya bertanya-tanya di algoritma / metodologi mana yang harus saya perhatikan. Tampaknya ada banyak dari mereka untuk dipilih - Jaringan Syaraf Tiruan, Algoritma Genetika, Pembelajaran Mesin, Optimasi Bayesian dll. Dll., Dan saya tidak yakin harus mulai dari mana. Jadi, pertanyaan saya adalah: Bagaimana saya harus memilih algoritma pembelajaran yang harus saya gunakan untuk masalah saya?

Jika ini membantu, inilah masalah yang harus saya pecahkan.


Data pelatihan: Data
pelatihan terdiri dari banyak baris seperti ini:

Precursor1, Precursor2, Boolean (true/false)

Lari
saya akan diberi banyak prekursor.
Kemudian,

  1. Saya memilih algoritma A dari berbagai algoritma (atau menghasilkan algoritma secara dinamis), dan menerapkannya pada setiap kemungkinan kombinasi prekursor ini dan mengumpulkan "catatan" yang dipancarkan. "Catatan" terdiri dari beberapa pasangan nilai kunci *.
  2. Saya menerapkan beberapa algoritma yang luar biasa dan mengklasifikasikan catatan ini ke dalam 2 kategori (benar / salah).

  3. Saya akan menghasilkan tabel yang memiliki format yang sama dengan data kereta:
    Precursor1, Precursor2, Boolean

Dan seluruh program dinilai berdasarkan berapa banyak benar / salah saya benar.

*: "Rekam" akan terlihat seperti ini (harap ini masuk akal)

Record         [1...*] Score
-Precursor1             -Key
-Precursor2             -Value

Hanya ada sejumlah Kunci yang mungkin. Catatan berisi subset berbeda dari kunci-kunci ini (beberapa catatan memiliki key1, key2, key3 ... catatan lain memiliki key3, key4 ... dll).

Saya sebenarnya butuh 2 pembelajaran. Salah satunya adalah untuk langkah 1. Saya perlu memiliki modul yang melihat pasangan Prekursor dll dan memutuskan algoritma apa yang akan diterapkan untuk memancarkan catatan untuk perbandingan. Lain untuk langkah 2. Saya membutuhkan modul yang menganalisis koleksi catatan dan mengkategorikannya ke dalam 2 kategori (benar / salah).

Terima kasih sebelumnya!

Enno Shioji
sumber

Jawaban:

16

Ada paket untuk " R " yang disebut " caret ," yang merupakan singkatan dari "klasifikasi dan pengujian regresi." Saya pikir ini akan menjadi tempat yang baik bagi Anda untuk memulai, karena akan dengan mudah memungkinkan Anda untuk menerapkan selusin algoritma pembelajaran yang berbeda pada data Anda, dan kemudian melakukan validasi silang untuk memperkirakan seberapa akuratnya masing-masing.

Berikut adalah contoh yang dapat Anda modifikasi dengan data Anda sendiri / metode lain:

install.packages('caret',dependencies = c('Depends','Suggests'))
library(caret)

set.seed(999)
Precursor1 <- runif(25)
Precursor2 <- runif(25)
Target <- sample(c('T','F'),25,replace=TRUE)
MyData <- data.frame(Precursor1,Precursor2,Target)
str(MyData)

#Try Logistic regression
model_Logistic <- train(Target~Precursor1+Precursor2,data=MyData,method='glm')

#Try Neural Network
model_NN <- train(Target~Precursor1+Precursor2,data=MyData,method='nnet',trace=FALSE)

#Try Naive Bayes
model_NB <- train(Target~Precursor1+Precursor2,data=MyData,method='nb')

#Try Random Forest
model_RF <- train(Target~Precursor1+Precursor2,data=MyData,method='rf')

#Try Support Vector Machine
model_SVM<- train(Target~Precursor1+Precursor2,data=MyData,method='svmLinear')

#Try Nearest Neighbors
model_KNN<- train(Target~Precursor1+Precursor2,data=MyData,method='knn')

#Compare the accuracy of each model
cat('Logistic:',max(model_Logistic$results$Accuracy))
cat('Neural:',max(model_NN$results$Accuracy))
cat('Bayes:',max(model_NB$results$Accuracy))
cat('Random Forest:',max(model_RF$results$Accuracy))
cat('Support Vector Machine:',max(model_SVM$results$Accuracy))
cat('Nearest Neighbors:',max(model_KNN$results$Accuracy))

#Look at other available methods
?train

Gagasan lain adalah memecah data Anda ke dalam set pelatihan dan set tes, dan kemudian membandingkan kinerja setiap model pada set tes. Jika Anda suka, saya bisa menunjukkan kepada Anda bagaimana melakukannya.

Zach
sumber
8

TXYsaya

Y

P(Y|T,X,saya)

Sekarang kita dapat menggunakan salah satu aturan teori probabilitas untuk memanipulasi ini menjadi hal-hal yang kita tahu bagaimana cara menghitungnya. Jadi menggunakan teorema Bayes, Anda mendapatkan:

P(Y|T,X,saya)=P(Y|T,saya)P(X|Y,T,saya)P(X|T,saya)

P(Y|T,saya)YY

P(X|Y,T,saya)P(X|T,saya)YY¯Y

HAI(Y|T,X,saya)=P(Y|T,X,saya)P(Y¯|T,X,saya)=P(Y|T,saya)P(Y¯|T,saya)P(X|Y,T,saya)P(X|Y¯,T,saya)

Y

P(X|Y,T,saya)θY

P(X|Y,T,saya)=P(X,θY|Y,T,saya)dθ=P(X|θY,Y,T,saya)P(θY|Y,T,saya)dθY

P(X|θY,Y,T,saya)=P(X|θY,Y,saya)TP(θY|Y,T,saya)adalah distribusi posterior untuk parameter dalam model - ini adalah bagian yang akan ditentukan oleh data pelatihan. Dan ini mungkin ke mana sebagian besar pekerjaan akan pergi.

θYM.sayaθY(saya)

P(X|Y,T,saya)=sayaP(M.saya|Y,T,saya)P(X|θY(saya),M.saya,Y,T,saya)P(θY(saya)|M.saya,Y,T,saya)dθY(saya)
P(M.saya|Y,T,saya)=P(M.saya|Y,saya)P(θY(saya)|M.saya,Y,saya)P(T|θY(saya),M.saya,Y,saya)dθY(saya)

M.saya

Sekarang, sampai titik ini, semua hasil tepat dan optimal (ini adalah opsi 2 - menerapkan beberapa algoritma yang luar biasa untuk data). Tapi ini tugas yang berat untuk dilakukan. Di dunia nyata, matematika yang dibutuhkan mungkin tidak layak untuk dilakukan dalam praktik - sehingga Anda harus berkompromi. Anda harus selalu "mencoba" melakukan persamaan yang tepat, karena matematika apa pun yang dapat Anda sederhanakan akan menghemat waktu Anda di PC. Namun, langkah pertama ini penting, karena ini menetapkan "target", dan memperjelas apa yang harus dilakukan. Kalau tidak, Anda akan dibiarkan (seperti yang terlihat) dengan sejumlah opsi potensial tanpa ada yang bisa dipilih.

Sekarang pada tahap ini, kita masih berada di dunia "logika simbolik", di mana tidak ada yang benar-benar masuk akal. Jadi, Anda perlu menautkan ini ke masalah spesifik Anda:

  1. P(M.saya|Y,saya)
  2. P(θY(saya)|M.saya,Y,saya)
  3. P(T|θY(saya),M.saya,Y,saya)
  4. P(θY(saya)|T,M.saya,Y,saya)
  5. P(M.saya|Y,T,saya)

Y¯

P(M.j|Y,T,saya)1

P(X|Y,T,saya)P(X|θY(j),M.j,Y,T,saya)θY(j)=θ^Y(j)

Yang merupakan pendekatan "standar" untuk masalah semacam ini.

probabilityislogic
sumber