Come scegliere tra algoritmi di apprendimento


21

Devo implementare un programma che classificherà i record in 2 categorie (vero / falso) sulla base di alcuni dati di addestramento e mi chiedevo quale algoritmo / metodologia dovrei guardare. Sembra che ce ne siano molti tra cui scegliere: rete neurale artificiale, algoritmo genetico, apprendimento automatico, ottimizzazione bayesiana ecc. Ecc., E non ero sicuro da dove cominciare. Quindi, le mie domande sono: come dovrei scegliere un algoritmo di apprendimento che dovrei usare per il mio problema?

Se questo aiuta, ecco il problema che devo risolvere.


I dati di allenamento:
i dati di allenamento sono composti da molte righe come questa:

Precursor1, Precursor2, Boolean (true/false)

Alla corsa
mi verrà dato un mucchio di precursori.
Poi,

  1. Scelgo un algoritmo A da diversi algoritmi (o genera dinamicamente un algoritmo) e lo applico su tutte le possibili combinazioni di questi precursori e raccolgo i "record" che vengono emessi. Il "record" è costituito da diverse coppie chiave-valore *.
  2. Applico un algoritmo fantastico e classifico questi record in 2 categorie (vero / falso).

  3. Genererò una tabella che ha lo stesso formato dei dati del treno:
    Precursor1, Precursor2, Boolean

E l'intero programma viene valutato in base a quanti vero / falso ho avuto ragione.

*: "Record" sarà simile a questo (spero che abbia senso)

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

Vi è solo un numero finito di possibili chiavi. I record contengono diversi sottogruppi di queste chiavi (alcuni record hanno key1, key2, key3 ... altri record hanno key3, key4 ... ecc.).

In realtà ho bisogno di 2 apprendimento. Uno è per il passaggio 1. Ho bisogno di un modulo che guardi le coppie Precursor ecc. E decida quale algoritmo applicare per emettere un record per il confronto. Un altro è per il passaggio 2. Ho bisogno di un modulo che analizza la raccolta di record e li classifica in 2 categorie (vero / falso).

Grazie in anticipo!

Risposte:


16

Esiste un pacchetto per " R " chiamato " caret ", che sta per "test di classificazione e regressione". Penso che sarebbe un buon punto di partenza, poiché ti consentirà facilmente di applicare una dozzina di algoritmi di apprendimento diversi ai tuoi dati, e poi di validarli in modo incrociato per stimare l'accuratezza di ciascuno di essi.

Ecco un esempio che puoi modificare con i tuoi dati / altri metodi:

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

Un'altra idea sarebbe quella di suddividere i dati in un set di allenamento e un set di test e quindi confrontare le prestazioni di ciascun modello sul set di test. Se vuoi, posso mostrarti come farlo.


8

Vorrei usare la teoria della probabilità per iniziare, e quindi scegliere quale algoritmo calcola meglio ciò che la teoria della probabilità ti dice di fare. Così avete la formazione dei dati , e alcuni nuovi precursori , e un oggetto di classificare , così come le informazioni di prima .X Y ITXYI

Così si vuole sapere su . Quindi la teoria della probabilità dice, basta calcolare la sua probabilità, in base a tutte le informazioni che hai a tua disposizione.Y

P(Y|T,X,I)

Ora possiamo usare una qualsiasi delle regole della teoria della probabilità per manipolarla in cose che sappiamo calcolare. Quindi, usando il teorema di Bayes, ottieni:

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

P(Y|T,I)YY

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

O(Y|T,X,I)=P(Y|T,X,I)P(Y¯|T,X,I)=P(Y|T,I)P(Y¯|T,I)P(X|Y,T,I)P(X|Y¯,T,I)

Y

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

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

P(X|θY,Y,T,I)=P(X|θY,Y,I)TP(θY|Y,T,I)è la distribuzione posteriore per i parametri nel modello - questa è la parte che determinerebbero i dati di allenamento. E questo è probabilmente dove andrà la maggior parte del lavoro.

θYMiθY(i)

P(X|Y,T,I)=iP(Mi|Y,T,I)P(X|θY(i),Mi,Y,T,I)P(θY(i)|Mi,Y,T,I)dθY(i)
P(Mi|Y,T,I)=P(Mi|Y,I)P(θY(i)|Mi,Y,I)P(T|θY(i),Mi,Y,I)dθY(i)

Mi

Ora, fino a questo punto, tutti i risultati sono esatti e ottimali (questa è l'opzione 2 - applica alcuni algoritmi fantastici ai dati). Ma questo è un compito scoraggiante da intraprendere. Nel mondo reale, la matematica richiesta potrebbe non essere fattibile nella pratica - quindi dovrai scendere a compromessi. dovresti sempre "provare" a fare le equazioni esatte, perché qualsiasi matematica che puoi semplificare ti farà risparmiare tempo sul PC. Tuttavia, questo primo passo è importante, perché imposta "l'obiettivo" e chiarisce cosa deve essere fatto. Altrimenti rimarrai (come sembri essere) con tutta una serie di potenziali opzioni con nulla da scegliere tra di loro.

Ora a questo punto, siamo ancora nel mondo della "logica simbolica", dove nulla ha davvero senso. Quindi è necessario collegare questi al tuo problema specifico:

  1. P(Mi|Y,I)
  2. P(θY(i)|Mi,Y,I)
  3. P(T|θY(i),Mi,Y,I)
  4. P(θY(i)|T,Mi,Y,I)
  5. P(Mi|Y,T,I)

Y¯

P(Mj|Y,T,I)1

P(X|Y,T,I)P(X|θY(j),Mj,Y,T,I)θY(j)=θ^Y(j)

Qual è l'approccio "standard" a questo tipo di problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.