すぐに使える最高の2クラス分類器とは何ですか?はい、私はそれが百万ドルの質問だと思います、そして、はい、私は知っています無料の昼食定理ないいます、そして私は前の質問も読んでいます:
それでも、私はこの主題についてもっと読むことに興味があります。
さまざまな分類器の特性、利点、機能の一般的な比較を含む、良い情報源は何ですか?
すぐに使える最高の2クラス分類器とは何ですか?はい、私はそれが百万ドルの質問だと思います、そして、はい、私は知っています無料の昼食定理ないいます、そして私は前の質問も読んでいます:
それでも、私はこの主題についてもっと読むことに興味があります。
さまざまな分類器の特性、利点、機能の一般的な比較を含む、良い情報源は何ですか?
回答:
ESLとしてすでにピーターFlomで言及したが、(私のリンクは本が無料でPDFファイルとして入手することができ作者のホームページにあることに注意してください)優れた提案です。本で探すために、より具体的なものをいくつか追加しましょう。
Rの機械学習タスクビューを本に追加してください。実際の比較はありませんが、多くの機械学習パッケージで実際に何ができるかについての印象を与えます。Pythonユーザーにとっては、scikit.learnが見やすい場所だと思います。メソッドがどれだけ「そのまま」または「既製」であるかは、詳細なチューニングをユーザーに任せるのではなく、実装がデータ状況への自動適応をどれだけうまく処理するかによって決まります。私の考えでは、Rのmgcvは、合理的に優れた一般化された加法モデルのフィッティングを非常に簡単にし、基本的にユーザーが何かを「手動で調整」する必要がない良い例です。
他の人によってリストされたリソースはすべて確かに有用ですが、私はチャイムを追加して以下を追加します。さまざまなバイナリ分類子を評価するための最近の試みで、ブースト回帰ツリーは、アクセスした他の方法よりも一貫して優れていることがわかりました。私にとって重要なことは、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と問題の抽象化を使用してデータにメソッドを実際に適用するために少量のコードを書くのに非常に役立つことがわかりました(つまり、6人の異なる作成者からそれぞれ6人の異なるパッケージを使用する必要はありませんでした) APIの設計とドキュメント化などへのアプローチ。
これに関して私が見つけた他のリソース(無料のPDFが利用可能):
よると、この徹底的な最近の研究(121個のデータセットの179の分類器の評価)、最高の分類は、サポートベクターマシンに続くランダムな森林があります。