Wie man zwischen Lernalgorithmen wählt


21

Ich muss ein Programm implementieren, das Datensätze basierend auf einigen Trainingsdaten in 2 Kategorien (wahr / falsch) klassifiziert, und ich habe mich gefragt, welchen Algorithmus / welche Methodik ich betrachten soll. Es scheint eine Menge von ihnen zur Auswahl zu geben - künstliches neuronales Netzwerk, genetischer Algorithmus, maschinelles Lernen, Bayesianische Optimierung usw. usw., und ich war mir nicht sicher, wo ich anfangen sollte. Meine Fragen lauten also: Wie soll ich einen Lernalgorithmus auswählen, den ich für mein Problem verwenden soll?

Wenn dies hilft, ist hier das Problem, das ich lösen muss.


Die Trainingsdaten:
Die Trainingsdaten bestehen aus vielen Zeilen wie folgt:

Precursor1, Precursor2, Boolean (true/false)

Dem Lauf
werde ich eine Reihe von Vorläufern geben.
Dann,

  1. Ich wähle einen Algorithmus A aus verschiedenen Algorithmen aus (oder generiere dynamisch einen Algorithmus) und wende ihn auf alle möglichen Kombinationen dieser Vorläufer an und sammle die "Datensätze", die ausgegeben werden. Der "Datensatz" besteht aus mehreren Schlüssel-Wert-Paaren *.
  2. Ich wende einen großartigen Algorithmus an und klassifiziere diese Datensätze in 2 Kategorien (wahr / falsch).

  3. Ich werde eine Tabelle generieren, die dasselbe Format wie die Zugdaten hat:
    Precursor1, Precursor2, Boolean

Und das ganze Programm wird danach bewertet, wie viele Richtig / Falsch ich richtig gemacht habe.

*: "Record" s wird so aussehen (hoffe das macht Sinn)

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

Es gibt nur eine begrenzte Anzahl möglicher Schlüssel. Datensätze enthalten eine andere Teilmenge dieser Schlüssel (einige Datensätze haben Schlüssel1, Schlüssel2, Schlüssel3 ... andere Datensätze haben Schlüssel3, Schlüssel4 ... usw.).

Ich brauche eigentlich 2 Lernen. Eine ist für Schritt 1. Ich muss ein Modul haben, das die Precursor-Paare usw. betrachtet und entscheidet, welcher Algorithmus angewendet werden soll, um einen Datensatz für den Vergleich auszugeben. Eine andere ist für Schritt 2. Ich benötige ein Modul, das die Sammlung von Datensätzen analysiert und sie in die 2 Kategorien (wahr / falsch) einordnet.

Danke im Voraus!

Antworten:


16

Es gibt ein Paket für " R " mit dem Namen " Caret ", das für "Klassifizierung und Regressionstests" steht. Ich denke, es ist ein guter Ausgangspunkt für Sie, da Sie auf einfache Weise ein Dutzend verschiedener Lernalgorithmen auf Ihre Daten anwenden und diese dann einer Kreuzvalidierung unterziehen können, um ihre Genauigkeit einzuschätzen.

Hier ist ein Beispiel, das Sie mit Ihren eigenen Daten / anderen Methoden ändern können:

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

Eine andere Idee wäre, Ihre Daten in einen Trainingssatz und einen Testsatz zu unterteilen und dann zu vergleichen, wie jedes Modell mit dem Testsatz abschneidet. Wenn Sie möchten, kann ich Ihnen zeigen, wie das geht.


8

TXY.ich

Y.

P(Y.|T,X,ich)

Jetzt können wir jede der Regeln der Wahrscheinlichkeitstheorie verwenden, um diese in Dinge zu manipulieren, die wir zu berechnen wissen. Wenn Sie also den Bayes-Satz verwenden, erhalten Sie:

P(Y.|T,X,ich)=P(Y.|T,ich)P(X|Y.,T,ich)P(X|T,ich)

P(Y.|T,ich)Y.Y. war im Trainingsdatensatz wahr.

P(X|Y.,T,ich)P(X|T,ich)Y.Y.¯Y.

O(Y.|T,X,ich)=P(Y.|T,X,ich)P(Y.¯|T,X,ich)=P(Y.|T,ich)P(Y.¯|T,ich)P(X|Y.,T,ich)P(X|Y.¯,T,ich)

Y. als "wahr", andernfalls klassifizieren Sie es als "falsch". Jetzt kann Ihnen niemand wirklich dabei helfen - es ist eine Entscheidung, die von den Konsequenzen der richtigen und falschen Entscheidungen abhängt. Dies ist eine subjektive Übung, und nur der richtige Kontext kann darauf antworten. Natürlich ist die "Subjektivität" nur dann von Bedeutung, wenn es eine hohe Unsicherheit gibt (dh Sie haben ein "Mist" -Modell / Daten, die die beiden nicht sehr gut unterscheiden können).

P(X|Y.,T,ich)θY.

P(X|Y.,T,ich)=P(X,θY.|Y.,T,ich)dθ=P(X|θY.,Y.,T,ich)P(θY.|Y.,T,ich)dθY.

P(X|θY.,Y.,T,ich)=P(X|θY.,Y.,ich)TP(θY.|Y.,T,ich)ist die hintere Verteilung für die Parameter im Modell - dies ist der Teil, den die Trainingsdaten bestimmen würden. Und hier wird wahrscheinlich der größte Teil der Arbeit stattfinden.

θY.MichθY.(ich)

P(X|Y.,T,ich)=ichP(Mich|Y.,T,ich)P(X|θY.(ich),Mich,Y.,T,ich)P(θY.(ich)|Mich,Y.,T,ich)dθY.(ich)
P(Mich|Y.,T,ich)=P(Mich|Y.,ich)P(θY.(ich)|Mich,Y.,ich)P(T|θY.(ich),Mich,Y.,ich)dθY.(ich)

Mich

Bis jetzt sind alle Ergebnisse exakt und optimal (dies ist die Option 2 - wenden Sie einen fantastischen Algorithmus auf die Daten an). Aber das ist eine entmutigende Aufgabe. In der Realität ist die erforderliche Mathematik in der Praxis möglicherweise nicht realisierbar - Sie müssen also Kompromisse eingehen. Sie sollten immer die exakten Gleichungen "ausprobieren", denn jede Mathematik, die Sie vereinfachen können, spart Ihnen Zeit am PC. Dieser erste Schritt ist jedoch wichtig, da er "das Ziel" festlegt und klar macht, was zu tun ist. Ansonsten haben Sie (wie es scheint) eine ganze Reihe möglicher Optionen, zwischen denen Sie sich nicht entscheiden können.

Jetzt sind wir noch in der Welt der "symbolischen Logik", in der nichts wirklich Sinn ergibt. Sie müssen diese also mit Ihrem spezifischen Problem verknüpfen:

  1. P(Mich|Y.,ich)
  2. P(θY.(ich)|Mich,Y.,ich)
  3. P(T|θY.(ich),Mich,Y.,ich)
  4. P(θY.(ich)|T,Mich,Y.,ich)
  5. P(Mich|Y.,T,ich)

Y.¯

P(Mj|Y.,T,ich)1

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

Welches ist der "Standard" -Ansatz für diese Art von Problem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.