有什么好资源可以比较不同分类器的优缺点?


15

最好的现成2类分类器是什么?是的,我想这是一百万美元的问题,是的,我知道没有免费的午餐定理,而且我还阅读了前面的问题:

不过,我仍然有兴趣阅读有关该主题的更多信息。

什么是良好的信息来源,包括对不同分类器的特征,优势和特征的一般比较?


+请原谅我不是英语为母语的人:)
Dov

Answers:


9

彼得·弗洛姆(Peter Flom)已经提到过,ESL是一个很好的建议(请注意,我的链接是作者的主页,在该页上可以免费获取pdf文件)。让我在书中添加一些更具体的内容:

  • 表10.1(第351页)为作者评估了神经网络,SVM,树,MARS和k-NN内核的某些特征,这些特征似乎是作者希望将其包括在“非常规”列表中的方法。货架”方法。
  • 第10章对待增强,我发现在OP引用的民意测验的方法列表中没有。在许多示例中,梯度增强似乎是性能更好的方法之一。
  • 第9章讨论了广义加性模型(GAM),它为逻辑回归模型(在民意测验中排名靠前)增加了预测变量非线性加性效应的灵活性。如果不是像R包mgcv中那样好的实现,必须选择所有平滑参数,GAM不会像逻辑回归那样容易使用。

将这本书添加到R 的机器学习任务视图中,尽管没有真正的比较,但它给人的印象是许多机器学习包实际上可以做什么。对于Python用户,我认为scikit.learn是一个不错的地方。一个方法有多少“开箱即用”或“现成的”,很大程度上取决于实现对数据情况的自动适应而不是将详细的调整留给用户的实现程度。在我看来,R的mgcv是一个很好的例子,它使真正合理的通用加性模型的拟合变得非常容易,并且基本上不需要用户“手动调整”任何东西。


8

其他人列出的资源当然都是有用的,但是我会加入其中并添加以下内容:“最佳”分类器可能是特定于上下文和数据的。在最近一次评估不同的二元分类器的尝试中,我发现Boosted回归树比我可以使用的其他方法始终表现更好。对我来说,关键是学习如何使用Orange数据挖掘工具。他们有一些很好的文档得到开拓这些方法启动您的数据。例如,这是我写的一个简短的Python脚本,用于使用k倍交叉验证来评估多个准确性度量中多个分类器的质量。

import orange, orngTest, orngStat, orngTree , orngEnsemble, orngSVM, orngLR
import numpy as np

data = orange.ExampleTable("performance_orange_2.tab")
bayes = orange.BayesLearner(name="Naive Bayes")
svm = orngSVM.SVMLearner(name="SVM")
tree = orngTree.TreeLearner(mForPruning=2, name="Regression Tree")
bs = orngEnsemble.BoostedLearner(tree, name="Boosted Tree")
bg = orngEnsemble.BaggedLearner(tree, name="Bagged Tree")
forest = orngEnsemble.RandomForestLearner(trees=100, name="Random Forest")
learners = [bayes, svm, tree, bs, bg, forest]
results = orngTest.crossValidation(learners, data, folds=10)
cm = orngStat.computeConfusionMatrices(results,
                             classIndex=data.domain.classVar.values.index('1'))

stat = (('ClsAcc', 'CA(results)'),
        ('Sens', 'sens(cm)'),
        ('Spec', 'spec(cm)'),
        ('AUC', 'AUC(results)'),
        ('Info', 'IS(results)'),
        ('Brier', 'BrierScore(results)'))
scores = [eval("orngStat." + s[1]) for s in stat]
print "Learner        " + "".join(["%-9s" % s[0] for s in stat])
print "-----------------------------------------------------------------"
for (i, L) in enumerate(learners):
    print "%-15s " % L.name + "".join(["%5.3f   " % s[i] for s in scores])

print "\n\n"
measure = orngEnsemble.MeasureAttribute_randomForests(trees=100)
print "Random Forest Variable Importance"
print "---------------------------------"
imps = measure.importances(data)
for i,imp in enumerate(imps):
    print "%-20s %6.2f" % (data.domain.attributes[i].name, imp)

print '\n\n'
print 'Predictions on new data...'
bs_classifier = bs(data)
new_data = orange.ExampleTable('performance_orange_new.tab')
for obs in new_data:
    print bs_classifier(obs, orange.GetBoth)

当我对数据运行此代码时,我得到如下输出

In [1]: %run binary_predict.py
Learner        ClsAcc   Sens     Spec     AUC      Info     Brier
-----------------------------------------------------------------
Naive Bayes     0.556   0.444   0.643   0.756   0.516   0.613
SVM             0.611   0.667   0.714   0.851   0.264   0.582
Regression Tree 0.736   0.778   0.786   0.836   0.945   0.527
Boosted Tree    0.778   0.778   0.857   0.911   1.074   0.444
Bagged Tree     0.653   0.667   0.786   0.816   0.564   0.547
Random Forest   0.736   0.667   0.929   0.940   0.455   0.512


Random Forest Variable Importance
---------------------------------
Mileage            2.34
Trade_Area_QI      2.82
Site_Score         8.76

您可以使用Orange对象做更多事情来反思性能并进行比较。我发现此程序包在编写少量代码以使用一致的API和问题抽象将方法实际应用到我的数据时非常有帮助(即,我不需要使用来自六个不同作者的六个不同程序包,每个程序包都有自己的API设计和文档编制方法等)。




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.