Comment choisir entre des algorithmes d'apprentissage

21

J'ai besoin de mettre en œuvre un programme qui classera les enregistrements en 2 catégories (vrai / faux) en fonction de certaines données de formation, et je me demandais quel algorithme / méthodologie je devrais examiner. Il semble y en avoir beaucoup parmi lesquels choisir - Réseau de neurones artificiels, algorithme génétique, apprentissage automatique, optimisation bayésienne, etc., etc., et je ne savais pas par où commencer. Donc, mes questions sont les suivantes: comment choisir un algorithme d'apprentissage à utiliser pour mon problème?

Si cela aide, voici le problème que je dois résoudre.


Les données de formation:
les données de formation se composent de plusieurs lignes comme celle-ci:

Precursor1, Precursor2, Boolean (true/false)

La course,
je vais recevoir un tas de précurseurs.
Alors,

  1. Je choisis un algorithme A parmi différents algorithmes (ou je génère dynamiquement un algorithme), je l'applique sur toutes les combinaisons possibles de ces précurseurs et je collecte les "enregistrements" qui sont émis. L'enregistrement se compose de plusieurs paires clé-valeur *.
  2. J'applique un algorithme génial et classe ces enregistrements en 2 catégories (vrai / faux).

  3. Je vais générer un tableau qui a le même format que les données du train:
    Precursor1, Precursor2, Boolean

Et tout le programme est noté en fonction du nombre de vrais / faux que j'ai bien compris.

*: Les "enregistrements" ressembleront à ceci (j'espère que cela a du sens)

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

Il n'y a qu'un nombre fini de clés possibles. Les enregistrements contiennent différents sous-ensembles de ces clés (certains enregistrements ont key1, key2, key3 ... d'autres enregistrements ont key3, key4 ... etc.).

J'ai en fait besoin de 2 apprentissages. L'un est pour l'étape 1. J'ai besoin d'un module qui examine les paires de précurseurs, etc. et décide quel algorithme appliquer afin d'émettre un enregistrement pour la comparaison. Un autre est pour l'étape 2. J'ai besoin d'un module qui analyse la collection d'enregistrements et les classe dans les 2 catégories (vrai / faux).

Merci d'avance!

Enno Shioji
la source

Réponses:

16

Il existe un package pour « R » appelé « caret », qui signifie «tests de classification et de régression». Je pense que ce serait un bon endroit pour commencer, car cela vous permettra facilement d'appliquer une douzaine d'algorithmes d'apprentissage différents à vos données, puis de les valider de manière croisée pour estimer leur précision.

Voici un exemple que vous pouvez modifier avec vos propres données / autres méthodes:

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

Une autre idée serait de diviser vos données en un ensemble d'apprentissage et un ensemble de tests, puis de comparer les performances de chaque modèle sur l'ensemble de tests. Si vous le souhaitez, je peux vous montrer comment procéder.

Zach
la source
8

TXYI .

Y

P(Y|T,X,I)

Maintenant, nous pouvons utiliser n'importe laquelle des règles de la théorie des probabilités pour manipuler cela en des choses que nous savons calculer. Donc, en utilisant le théorème de Bayes, vous obtenez:

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)est la distribution postérieure des paramètres du modèle - c'est la partie que les données d'entraînement détermineraient. Et c'est probablement là que la plupart du travail ira.

θ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)
Where
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)

(NOTE: Mi is a proposition of the form "the ith model is the best in the set that is being considered". and no improper priors allowed if you are integrating over models - the infinities do not cancel out in this case, and you will be left with non-sense)

Now, up to this point, all results are exact and optimal (this is the option 2 - apply some awesome algorithm to the data). But this a daunting task to undertake. In the real world, the mathematics required may be not feasible to do in practice - so you will have to compromise. you should always "have a go" at doing the exact equations, for any maths that you can simplify will save you time at the PC. However, this first step is important, because this sets "the target", and it makes it clear what is to be done. Otherwise you are left (as you seem to be) with a whole host of potential options with nothing to choose between them.

Now at this stage, we are still in "symbolic logic" world, where nothing really makes sense. So you need to link these to your specific problem:

  1. P(Mi|Y,I) is the prior probability for the ith model - generally will be equal for all i.
  2. P(θY(i)|Mi,Y,I) is the prior for the parameters in the ith model (must be proper!)
  3. P(T|θY(i),Mi,Y,I) is the likelihood function for the training data, given the ith model
  4. P(θY(i)|T,Mi,Y,I) is the posterior for the parameters in the ith model, conditional on the training data.
  5. P(Mi|Y,T,I) is the posterior for the ith model conditional on the training data

There will be another set of equations for Y¯

Note that the equations will simplify enormously if a) one model is a clear winner, so that P(Mj|Y,T,I)1 and b) within this model, its parameters are very accurate, so the integrand resembles a delta function (and integration is very close to substitution or plug-in estimates). If both these conditions are met you have:

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

Which is the "standard" approach to this kind of problem.

probabilityislogic
la source