Как выбрать между алгоритмами обучения


21

Мне нужно реализовать программу, которая будет классифицировать записи на 2 категории (истина / ложь) на основе некоторых обучающих данных, и мне было интересно, какой алгоритм / методология мне следует рассмотреть. Кажется, из них есть из чего выбирать - искусственная нейронная сеть, генетический алгоритм, машинное обучение, байесовская оптимизация и т. Д. И т. Д., И я не был уверен, с чего начать. Итак, мои вопросы: как выбрать алгоритм обучения, который я должен использовать для своей задачи?

Если это поможет, вот проблема, которую мне нужно решить.


Данные обучения. Данные
обучения состоят из множества строк, таких как:

Precursor1, Precursor2, Boolean (true/false)

За прогон
мне дадут кучу прекурсоров.
Потом,

  1. Я выбираю алгоритм A из разных алгоритмов (или динамически генерирую алгоритм) и применяю его к каждой возможной комбинации этих предшественников и собираю «записи», которые испускаются. «Запись» состоит из нескольких пар ключ-значение *.
  2. Я применяю какой-то потрясающий алгоритм и классифицирую эти записи по двум категориям (true / false).

  3. Я сгенерирую таблицу того же формата, что и данные поезда:
    Precursor1, Precursor2, Boolean

И вся программа оценивается исходя из того, сколько правдивых / ложных я получил.

*: «Записи» будут выглядеть так (надеюсь, это имеет смысл)

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

Есть только конечное количество возможных ключей. Записи содержат различное подмножество этих ключей (некоторые записи имеют ключ1, ключ2, ключ3 ... другие записи имеют ключ3, ключ4 ... и т. Д.).

Мне на самом деле нужно 2 обучения. Один для шага 1. Мне нужен модуль, который просматривает пары прекурсоров и т. Д. И решает, какой алгоритм применить, чтобы создать запись для сравнения. Другой для шага 2. Мне нужен модуль, который анализирует коллекцию записей и классифицирует их на 2 категории (true / false).

Заранее спасибо!

Ответы:


16

Существует пакет для « R », который называется « карета », что означает «классификация и регрессионное тестирование». Я думаю, что это было бы хорошим началом для вас, так как это позволит вам легко применить дюжину или около того различных алгоритмов обучения к вашим данным, а затем перекрестно проверить их, чтобы оценить, насколько точны они все.

Вот пример, который вы можете изменить своими собственными данными / другими методами:

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

Другая идея состоит в том, чтобы разбить ваши данные на обучающий набор и тестовый набор, а затем сравнить, как каждая модель работает в тестовом наборе. Если хотите, я могу показать вам, как это сделать.


8

TXYI

Y

P(Y|T,X,I)

Теперь мы можем использовать любое из правил теории вероятностей, чтобы превратить это в вещи, которые мы умеем вычислять. Таким образом, используя теорему Байеса, вы получите:

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)является задним распределением для параметров в модели - это та часть, которую будут определять данные обучения. И это, вероятно, где большая часть работы будет идти.

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

(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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.