web-dev-qa-db-ja.com

一般に、どの機械学習分類器を選択しますか?

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

どの分類器を使用すべきかをどのように知ることができますか

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

これらのいずれかが「自然な」最初の選択であり、その選択の原則は何ですか?

私が探している答えのタイプの例(Manning et al。の Introduction to Information Retrieval bookから) :

a。 データがラベル付けされているが、量が限られている場合は、偏りの大きい分類器を使用する必要があります(たとえば、Naive Bayes)

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

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

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

  2. また、標準的なベイジアン分類器に加えて、少し別の質問に対して、コメントスパム検出(電子メールスパムとは対照的)の「標準的な」最先端の方法はありますか?

193
LM.

enter image description here

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

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/

85

モデル選択 使用 クロス検証 が必要な場合があります。

相互検証

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

パラメータkの選択方法は、時間によって異なります。 kの通常の値は3、5、10、またはNです。Nはデータのサイズです(leave-one-out cross validationと同じです)。私は5または10を好む。

モデル選択

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

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

ネストされた相互検証

ネストされた相互検証では、モデル選択アルゴリズムで相互検証を実行します。

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

もちろん、これらの方法や私が言及しなかった他のことには多くのバリエーションがあります。これらの詳細については、これらのトピックに関する出版物をご覧ください。

57
George

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

要するに:

  • ブースティング-多くの場合有効大量のトレーニングデータが利用可能な場合.

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

  • K最近傍-最も簡単なできること、多くの場合効果的しかし遅いが必要で、ロットメモリの

  • ニューラルネットワーク-トレーニングが遅いしかし非常に実行が速い文字認識の最適なパフォーマンス。

  • SVM-最高の範囲内 with 制限されたデータ、しかしブースティングに負けまたはランダムツリーは、ラージデータセットが使用可能な場合のみです。

41
John Robertson

使用するアルゴリズムを選択する際に考慮すべき事項には、次のものがあります。

  1. インクリメンタルにトレーニング(バッチではなく)する必要がありますか?

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

  2. データはcategoricalのみ、またはnumericのみ、またはbothで構成されていますか?

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

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

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

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

    SVMは、データが「ライン」のどちら側にあるかを判断するだけでよいため、分類に関しては高速です。決定木は、特に複雑な場合(例:多くのブランチ)に時間がかかることがあります。

  5. 複雑さ

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

36
RPVC

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

分類の場合、Naive Bayesは、優れたパフォーマンスを持ち、拡張性が高く、ほとんどすべての種類の分類タスクに適応できるため、優れたスターターです。また、1NN(K-Nearest Neighbors with only neighbour)は、面倒な最適なアルゴリズムです(データがモデルであり、したがって、決定境界の次元適合性を気にする必要はありません)、唯一の問題は計算コストです(距離行列を計算する必要があるので、高次元データには適合しない可能性があるため、2次)。

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

また、アルゴリズムを実際に試す前に、データで何が最適に機能するかを実際に知ることはできないことを覚えておいてください。

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

28
gaborous

Sam Roweis 以前は言いました 素朴なベイズ、ロジスティック回帰、k最近傍、フィッシャーの線形判別式を他の何よりも先に試してみるべきです。

9
bayer

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

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

もう1つのリソースは、一連のビデオの講義ビデオの1つです Stanford Machine Learning 。ビデオ4または5では、講師は、分類子、利点/トレードオフなどをトレーニングする際に一般的に受け入れられているいくつかの規則について説明しています。

6
aduric

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

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

4

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

0

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

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

Here you can validate your scenario with a simple cheat sheet

0