0

これはおそらく、可能な分類アルゴリズムに関する初心者の質問なので、ご容赦ください。以下の例のように見える公称属性と数値属性の両方を含むデータセットがあります (実際のデータセットではありません)。クラスを述語して精度を得るには、どのようなアルゴリズムが最適でしょうか (できれば Python/Java で)。

Classes: classA, classB, classC

attribute1: Recurrence <Yes, No>
attribute2: Subject <Math, Science, Geography>
attribute3: ProbabilityA <0.0 - 1.0>
atrribute4: ProbabilityB <0.0 - 1.0>
attribute5: ProbabilityC <0.0 - 1.0>

公称データには [1,-1] の数値を含めることができます。ここで、1 は存在を表し、-1 は存在しないことを表します。または、['YES', 'NO'] または ['Type1', ['Type1', 「Type2」、「Type3」]。数値は、属性の可能性を表すために使用されます。たとえば [0-1] の場合、値が 1 に近いほど、true と評価される可能性が高くなります。

4

2 に答える 2

0

これは決して「初心者向けの質問」ではなく、実際には非常に複雑です。Inti の提案は確かに良い出発点ですが、非常に多くの要因に依存しているため、簡単な「正しい答え」はありません。

考慮すべき事項:

  • 速度と精度
  • メモリの制約
  • トレーニング セット (分類方法を「学習」するために使用できるデータ セットの大きさ)
  • テスト データ セット (アルゴリズムの品質を検証/測定するために「予備」として保持するデータ セットの量)
  • 実装: たとえば、これを「バッチ モード」で実行するか、分類したい新しい観察ごとに進行中の方法で分類を行う必要があります。

このような情報がさらに明らかになるまで、非常に正確な詳細を提供することは困難です. (一般的に、このフォーラムでは、あなたが質問に力を入れればかけるほど、他の人も回答に力を注ぎます。)

そうは言っても、可能性に頭を悩ませるために、検索を開始するためのいくつかの流行語を次に示します。

  • ランダム フォレスト / CART / 決定木 (異なるアルゴリズムですが、概念は似ています)
  • 単純ベイズ
  • SVM (お持ちの公称パラメータでは役に立たない可能性があります)
  • ニューラルネット
  • クラスタリング
  • インティが示唆するように、KNN
  • もっとたくさん...

機械学習アルゴリズムの潜在的なオプションの世界は非常に大きく、完璧に機能するものはなく、すべての状況で同じように機能するものはありません。 このwiki ページはそれほど素晴らしいものではありませんが、アルゴを見つけるための適切な出発点です。

自分のケースに適していると思われるアルゴリズムを決定したら、Python または Java でのライブラリ/実装、または what-have-you を調べます。SciPy と NumPy を使用すると、Python にはかなり大きな可能性のライブラリがあると想定できます。Java にも巨大なライブラリがあると思いますが、個人的には Python の方がはるかによく知っています。

于 2013-07-02T00:52:57.423 に答える
0

KNN (K 最近隣)。ツールWekaを見ることができます(ただし、Javaにあります)。実際、アルゴリズムは非常に単純で、結果は良好です。唯一の問題は、Knn が遅延分類器であることです。したがって、トレーニング段階は高速 (ほとんど空) で、分類段階はより低速です。これは、アルゴリズムが O(N*M) であるため、トレーニング セットが非常に大きい場合にのみ重要です。ここで、N はトレーニング インスタンスの数であり、M は属性の数です。最悪の場合、データに何らかのフィルタリングを実行できます。Wekaにはそれを行うためのいくつかの方法があります。

PS。Weka では、アルゴリズムの名前が IBK と異なります。

于 2013-06-14T10:40:06.340 に答える