一般に、どの機械学習分類器を選択しますか?[閉まっている]


207

分類の問題に取り組んでいるとしましょう。(不正検出とコメントスパムは、私が現在取り組んでいる2つの問題ですが、分類タスク全般に興味があります。)

使用する分類子をどのようにして知ることができますか?

  1. 決定木
  2. SVM
  3. ベイジアン
  4. ニューラルネットワーク
  5. K最近傍
  6. Qラーニング
  7. 遺伝的アルゴリズム
  8. マルコフ決定プロセス
  9. 畳み込みニューラルネットワーク
  10. 線形回帰またはロジスティック回帰
  11. ブースティング、バギング、エンサンブル
  12. ランダムな山登りまたはシミュレーテッドアニーリング
  13. ...

これらの1つが「自然な」最初の選択であるケースはどれですか。その1つを選択するための原則は何ですか。

私が探している回答のタイプの例(Manningらの「Introduction to Information Retrieval」の本から):

a。データにラベルが付けられているが量が限られている場合は、バイアスの高い分類器(たとえば、単純ベイズ)を使用する必要があります

これは、バイアスが高い分類子の分散が小さいためであると推測しています。データ量が少ないため、これは良いことです。

b。大量のデータがある場合、分類子はそれほど重要ではないので、おそらくスケーラビリティが優れている分類子を選択する必要があります。

  1. 他のガイドラインは何ですか?「モデルを上級管理職に説明する必要がある場合は、決定ルールがかなり透過的であるため、決定ツリーを使用する必要があるかもしれません」などの答えも適切です。ただし、実装やライブラリの問題はあまり気にしません。

  2. また、標準のベイジアン分類子以外に、やや別の質問については、コメントスパムの検出に(電子メールスパムではなく)「最先端の」標準的な方法がありますか?


7
「この質問をするのに最適な場所」への回答として、stats.stackexchange.com
jxramos

回答:


94

ここに画像の説明を入力してください

まず、問題を特定する必要があります。それはあなたがどのような種類のデータを持っているか、そしてあなたが望むタスクは何であるかによります。

あなたはPredicting Category

  • あなたが持っている Labeled Data
    • あなたはClassification Approachそのアルゴリズムに従う必要があります
  • あなたは持っていません Labeled Data
    • あなたは行く必要があります Clustering Approach

あなたはPredicting Quantity

  • あなたは行く必要があります Regression Approach

さもないと

  • あなたは行くことができます Dimensionality Reduction Approach

上記の各アプローチには、さまざまなアルゴリズムがあります。特定のアルゴリズムの選択は、データセットのサイズによって異なります。

出典:http : //scikit-learn.org/stable/tutorial/machine_learning_map/


60

交差検定を使用したモデルの選択が必要な場合があります。

相互検証

データセットをk個の重複しないサブセット(分割)に分割し、k-1分割を使用してモデルをトレーニングし、省略した分割を使用してそのパフォーマンスを予測するだけです。これは、可能なフォールドの組み合わせごとに行います(最初に1つ目のフォールドを残し、次に2つ目、...、次にkth、残りのフォールドでトレーニングします)。終了したら、すべてのフォールドの平均パフォーマンスを推定します(パフォーマンスの分散/標準偏差も)。

パラメータkの選択方法は、時間に依存します。kの通常の値は3、5、10、またはNです。ここで、Nはデータのサイズです(これは、one-one-out相互検証と同じです)。私は5か10を好みます。

モデルの選択

5つのメソッド(ANN、SVM、KNNなど)と、メソッドごとに(メソッドに応じて)10のパラメーターの組み合わせがあるとします。各メソッドとパラメーターの組み合わせ(5 * 10 = 50)に対して相互検証を実行し、最適なモデル、メソッド、パラメーターを選択するだけです。次に、すべてのデータに対して最適な方法とパラメーターを使用して再トレーニングを行い、最終的なモデルを取得します。

言いたいことがいくつかあります。たとえば、それぞれに多くのメソッドとパラメーターの組み合わせを使用する場合は、オーバーフィットする可能性が非常に高くなります。このような場合、ネストされた相互検証を使用する必要があります。

ネストされた相互検証

では、ネストされたクロスバリデーションは、モデルの選択アルゴリズムに相互検証を行います。

繰り返しますが、最初にデータをk分割に分割します。各ステップの後、トレーニングデータとしてk-1を選択し、残りの1つをテストデータとして選択します。次に、これらのk個のフォールドの可能な組み合わせごとにモデル選択(上記で説明した手順)を実行します。これを完了すると、折り目の各組み合わせに対して1つずつ、k個のモデルが作成されます。その後、残りのテストデータを使用して各モデルをテストし、最適なモデルを選択します。繰り返しますが、最後のモデルを作成した後、すべてのデータに対して同じメソッドとパラメーターを使用して新しいモデルをトレーニングします。これが最終モデルです。

もちろん、これらの方法にはさまざまなバリエーションがあり、他にも言及していません。これらの詳細情報が必要な場合は、これらのトピックに関する出版物を探してください。


5
はい、私は相互検証について知っています-特定の分類子を選択するアプリオリな理由についてもっと疑問に思っていました(それから、相互検証を使用して、いくつかのパラメーターを調整したり、いくつかのより小さい分類子セットから選択したりできます)。感謝します!
LM。

45

本「OpenCV」には、462〜463ページに2ページあります。Amazonプレビューで「差別的」という単語(おそらくGoogleブックも)を検索すると、問題のページが表示されます。この2ページは、この本で見つけた最高の逸品です。

要するに:

  • ブースティング - 大量のトレーニングデータが利用可能場合に効果的です。

  • ランダムツリー -多くの場合非常に効果的で回帰も実行できます。

  • K最近傍 - あなたができる最も簡単なこと、多くの場合効果的です遅く多くのメモリを必要とします

  • ニューラルネットワーク - トレーニングは遅いですが、実行は非常に高速ですが文字認識には最適です。

  • SVM - 最高の間制限されたデータが、後押しに対して失うか、ランダム樹木だけ大規模なデータセットが用意されています。


39

使用するアルゴリズムを選択する際に考慮すべき事項は次のとおりです。

  1. (バッチではなく)段階的トレーニングする必要がありますか?

    新しいデータで分類子を頻繁に更新する必要がある場合(または大量のデータがある場合)、おそらくベイジアンを使用することをお勧めします。ニューラルネットとSVMは、トレーニングデータを一度に処理する必要があります。

  2. データはカテゴリのみ、または数値のみ、またはその両方で構成されていますか?

    ベイジアンはカテゴリー/二項データで最もよく機能すると思います。決定木は数値を予測できません。

  3. あなたまたはあなたの聴衆は分類器がどのように機能するかを理解する必要がありますか?

    これらはほとんどの人に簡単に説明できるので、ベイジアンツリーまたは決定木を使用します。ニューラルネットワークとSVMは、データをどのように分類しているのか実際にはわからないという意味で「ブラックボックス」です。

  4. どのくらいの分類速度が必要ですか?

    SVMは、データが「ライン」のどちら側にあるかを判別するだけでよいため、分類に関しては高速です。決定木は、特にそれらが複雑な場合(たとえば、多数の分岐)は遅くなる可能性があります。

  5. 複雑さ

    ニューラルネットとSVMは、複雑な非線形分類を処理できます。


2
この本の章では、複雑さに関するより多くの情報を提供することができるnlp.stanford.edu/IR-book/html/htmledition/...
supermus

31

Andrew Ng教授がよく述べているように:常にラフでダーティーなアルゴリズムを実装することから始め、次にそれを繰り返し改良していきます

分類については、ナイーブベイズは優れたパフォーマンスを備え、拡張性が高く、ほとんどすべての種類の分類タスクに適応できるため、優れたスターターです。また、1NN(近傍が1つしかないK最近傍)は、問題のない最適なアルゴリズムです(データがモデルになるため、決定境界の次元適合について気にする必要がないため)。問題は計算コストです(距離行列を計算する必要があるため二次式なので、高次元のデータには適していません)。

もう1つの優れたスターターアルゴリズムは、ランダムフォレスト(決定木で構成)です。これは、任意の数の次元に非常にスケーラブルであり、一般に非常に許容できるパフォーマンスを備えています。そして最後に、遺伝的アルゴリズムがあります。これは、データ自体の最小限の知識であらゆる次元およびあらゆるデータに見事にスケーリングし、微生物遺伝的アルゴリズム(Cコードの1行のみ! 1996)、CMA-ESとMOGA / e-MOEAが最も複雑です。

また、アルゴリズムを実際に試してみる前に、データで何が最適に機能するかを実際に理解できないことがよくあります。

補足として、理論的なフレームワークで特定の問題の仮説とアルゴリズムの理論的なパフォーマンスをテストする場合は、PAC(おそらくほぼ正しい)学習フレームワークを使用できます(注意:非常に抽象的で複雑です!)要約すると、PAC学習の要点は、データに適合することができるより複雑ではないが十分に複雑な(アルゴリズムが適合できる最大の次元である複雑さ)アルゴリズムを使用する必要があることです。つまり、Occamのかみそりを使用します。


11

Sam Roweis は、何よりもナイーブベイズ、ロジスティック回帰、k最近傍、フィッシャーの線形判別式を試す必要があると言っていました。


8

私の考えでは、常に基本的な分類子を最初に実行して、データの意味を理解します。たいていの場合(少なくとも私の経験では)、十分に優れています。

したがって、データを監視している場合は、単純ベイズ分類器をトレーニングします。教師なしデータがある場合は、k-meansクラスタリングを試すことができます。

もう1つのリソースは、しばらく前に視聴したスタンフォード機械学習の一連のビデオの講義ビデオの1つです。ビデオ4または5では、講師は、分類子、利点/トレードオフなどをトレーニングするときに一般的に受け入れられているいくつかの規則について説明します。


1
「無料ランチなし」の定理は、すべての問題に最適に機能するモデルは存在しないと述べています。ある問題に対する優れたモデルの仮定が別の問題に当てはまらない場合があるため、機械学習では複数のモデルを試し、特定の問題に最適なモデルを見つけるのが一般的です。
msarafzadeh

5

推論と予測のトレードオフを常に考慮する必要があります。

データで発生している複雑な関係を理解し​​たい場合は、豊富な推論アルゴリズム(線形回帰や投げ縄など)を使用する必要があります。一方、結果にのみ関心がある場合は、ニューラルネットワークのような高次元でより複雑な(ただし、解釈が難しい)アルゴリズムを使用できます。


3

アルゴリズムの選択は、シナリオおよびデータセットのタイプとサイズによって異なります。他の多くの要因があります。

これは、基本的な機械学習の簡単なチートシートです。

ここでは、簡単なチートシートでシナリオを検証できます


-2

まず第一に、それが分類であるか回帰であるかに関係なく、どのタイプの問題を扱っているかに依存します。次に、モデルを賢く選択します。特定のモデルに依存しているため、特定のモデルが他のモデルよりも優れています。sklearnライブラリのwine_datasetで作業していて、最初に線形でカーネルsvmを使用してデータをトレーニングしようとし、ある種の精度が得られた後、それが満足のいくものではないと思われる場合、DecisionTreeClassifier()を使用してデータをトレーニングしようとしました。そして、あなたはRandomForestClassifier()で試しました。その後、どちらの精度が良いか、またはデータに適していると言える場合は、それを結論付けることができます。テスト用にモデルを変更し続けると、構文上の小さな違いが見つかります。したがって、すべてが最善であり、問​​題をよく理解しています。


1
OP(元のポスター)質問は次のとおりです。 どの分類子を使用する必要があるかをどのようにして知ることができますか?これは、分類アルゴリズムを探していると結論付けています。回答する前に、質問をよく読んでください。
Vetrivel PS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.