如何在学习算法之间进行选择


21

我需要实现一个程序,根据一些训练数据将记录分为两类(对/错),我想知道应该查看哪种算法/方法。似乎有很多可供选择的选择-人工神经网络,遗传算法,机器学习,贝叶斯优化等,而我不确定从哪里开始。因此,我的问题是: 我应该如何选择应该用于问题的学习算法?

如果有帮助,这是我需要解决的问题。


训练数据:
训练数据由许多行组成,如下所示:

Precursor1, Precursor2, Boolean (true/false)

运行
我会给出一堆的前体。
然后,

  1. 我从不同的算法中选择一种算法A(或动态生成一种算法),并将其应用于这些前体的每种可能组合,并收集发出的“记录”。“记录”由几个键值对*组成。
  2. 我应用了一些很棒的算法,并将这些记录分为2类(对/错)。

  3. 我将生成一个与火车数据具有相同格式的表:
    Precursor1, Precursor2, Boolean

整个程序的评分是基于我正确判断对错的几率。

*:“记录”看起来像这样(希望这样有意义)

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

只有有限数量的可能的键。记录包含这些键的不同子集(某些记录具有key1,key2,key3 ...,其他记录具有key3,key4 ...等)。

我实际上需要2学习。一个是针对第1步的。我需要一个模块来查看Precursor对等,并确定要应用哪种算法才能发出比较记录。另一个是针对步骤2的。我需要一个模块来分析记录的收集并将它们分类为2个类别(对/错)。

先感谢您!

Answers:


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

现在,如果您的模型属于“ iid”种类,则。但是,如果您具有从属模型,例如自回归模型,则可能仍然很重要。和是在模型中的参数后验分布-这是训练数据将决定部分。这可能是大部分工作要做的地方。P(X|θY,Y,T,I)=P(X|θY,Y,I)TP(θY|Y,T,I)

但是,如果无法确定该模型怎么办?嗯,就像一样,它成为集成的另一个麻烦参数。调用第ith个模型及其参数,方程式变为:θ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)

(注意:是“第i个模型是所考虑的集合中最好的一个”的形式的命题。并且,如果您要对模型进行集成,则不允许不适当的先验-在这种情况下,无限性不会抵消,您会胡说八道)Mi

现在,到此为止,所有结果都是精确且最佳的(这是选项2-对数据应用一些很棒的算法)。但这是一项艰巨的任务。在现实世界中,所需的数学在实践中可能不可行-因此您将不得不妥协。您应该始终“去尝试”精确的方程式,因为您可以简化的任何数学运算都将节省您在PC上的时间。但是,第一步很重要,因为这确定了“目标”,并明确了要做什么。否则,您(看起来似乎)将面临一整套潜在选择,而没有选择余地。

现在,在这个阶段,我们仍然处在“符号逻辑”世界中,没有什么真正有意义的。因此,您需要将这些链接到您的特定问题:

  1. P(Mi|Y,I)是第i个模型的先验概率-通常对所有i都是相等的。
  2. P(θY(i)|Mi,Y,I)是第i个模型中参数的先验(必须正确!)
  3. P(T|θY(i),Mi,Y,I)给定第i个模型,是训练数据的似然函数
  4. P(θY(i)|T,Mi,Y,I)是第i个模型中参数的后验,取决于训练数据。
  5. P(Mi|Y,T,I)是基于训练数据的第i个模型的后验

将有另一组方程Y¯

请注意,如果a)一个模型显然是赢家,那么方程将大大简化,因此该模型内的 and b),其参数非常精确,因此被整数类似于增量函数(并且积分非常接近替代或插件估计)。如果同时满足这两个条件,则您将:P(Mj|Y,T,I)1

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

这是解决此类问题的“标准”方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.