異なる分類子の長所と短所の比較を含む優れたリソースとは何ですか?


15

すぐに使える最高の2クラス分類器とは何ですか?はい、私はそれが百万ドルの質問だと思います、そして、はい、私は知っています無料の昼食定理ないいます、そして私は前の質問も読んでいます:

それでも、私はこの主題についてもっと読むことに興味があります。

さまざまな分類器の特性、利点、機能の一般的な比較を含む、良い情報源は何ですか?


+私は英語を母国語としないことをご容赦ください:)
Dov

回答:


9

ESLとしてすでにピーターFlomで言及したが、(私のリンクは本が無料でPDFファイルとして入手することができ作者のホームページにあることに注意してください)優れた提案です。本で探すために、より具体的なものをいくつか追加しましょう。

  • 表10.1(351ページ)は、著者がニューラルネットワーク、SVM、ツリー、MARS、およびk-NNカーネルの特定の特性の評価を示しています。棚」メソッド。
  • 第10章では、OPが引用した世論調査の方法のリストに欠けていることがわかったブースティングを扱います。勾配ブースティングは、多くの例で優れたパフォーマンスの方法の1つであるようです。
  • 第9章では、一般化加法モデル(GAM)を扱います。これにより、ロジスティック回帰モデル(世論調査で上位)に、予測変数の非線形加法効果の柔軟性が追加されます。Gパッケージは、Rパッケージmgcvのような優れた実装ではない場合、選択する必要があるすべての平滑化パラメーターを使用したロジスティック回帰ほど簡単には使用できません。

Rの機械学習タスクビューを本に追加してください。実際の比較はありませんが、多くの機械学習パッケージで実際に何ができるかについての印象を与えます。Pythonユーザーにとっては、scikit.learn見やすい場所だと思います。メソッドがどれだけ「そのまま」または「既製」であるかは、詳細なチューニングをユーザーに任せるのではなく、実装がデータ状況への自動適応をどれだけうまく処理するかによって決まります。私の考えでは、Rのmgcvは、合理的に優れた一般化された加法モデルのフィッティングを非常に簡単にし、基本的にユーザーが何かを「手動で調整」する必要がない良い例です。


8

他の人によってリストされたリソースはすべて確かに有用ですが、私はチャイムを追加して以下を追加します。さまざまなバイナリ分類子を評価するための最近の試みで、ブースト回帰ツリーは、アクセスした他の方法よりも一貫して優れていることがわかりました。私にとって重要なことは、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の設計とドキュメント化などへのアプローチ。




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.