1

Weka を使用して調査している大規模なデータセットがあります。次のようになります。今日は、できる限り多くのデータを分析し、トレーニング済みの分類器を作成します。このモデルをファイルとして保存します。それから明日、私はデータの新しいバッチを取得し、保存されたモデルを使用して新しいデータのクラスを予測したいと考えています。これが毎日繰り返されます。最終的には保存したモデルを更新しますが、今のところ静的であると仮定します。

このタスクのサイズと頻度のため、これを自動的に実行したいと考えています。つまり、コマンド ラインなどを使用します。ただし、エクスプローラーにも問題があります。

私の質問は、私のデータセットが大きくなるにつれて、属性の可能なラベルのリストも大きくなるという事実に関係しています。Weka は、そのような属性リストは変更できない、またはトレーニング セットとテスト セットは互換性がないと言われています (参照: http://weka.wikispaces.com/Why+do+I+get+the+error+message+%27training+and +test+set+are+not+compatible%27%3F )。しかし、私の世界では、来週出くわすすべての属性ラベルを今日知っている可能性はありません。

状況を修正するために、バッチ フィルタリングを実行することをお勧めします ( http://weka.wikispaces.com/How+do+I+generate+compatible+train+and+test+sets+that+get+processed+with+ a+filter%3F )。これは、毎日、再フィルター処理されたトレーニング データを使用してモデルを再構築する必要があることを意味しているようです。

この時点で、すべてが非常に難しいように思われるので、私は恐ろしい単純な初心者の間違いを犯しているのではないかと心配しているので、助けを求めます.

詳細:

モデルはによって作成されました

java -Xmx1280M weka.classifiers.meta.FilteredClassifier ^
    -t .\training.arff -d .\my.model -c 15 ^
    -F "weka.filters.supervised.attribute.Discretize -R first-last" ^
    -W weka.classifiers.trees.J48 -- -C 0.25 -M 2 

素朴に、私が試みるだろうと予測するために:

java -Xmx1280M weka.core.converters.DatabaseLoader ^
    -url jdbc:odbc:(database) ^
    -user (user) ^
    -password (password) ^
    -Q "exec (my_stored_procedure) '1/1/2012', '1/2/2012' " ^
    \> .\NextDay.arff 

その後:

java -Xmx1280M weka.classifiers.trees.J48 ^
    -T .\NextDay.arff ^ 
    -l .\my.model ^ 
    -c 15 ^
    -p 0 ^ 
    \> .\MyPredictions.txt

これにより、次の結果が得られます。

java.lang.Exception: training and test set are not compatible
at weka.classifiers.Evaluation.evaluateModel(Evaluation.java:1035)
at weka.classifiers.Classifier.runClassifier(Classifier.java:312)
at weka.classifiers.trees.J48.main(J48.java:948)

関連する質問は、kdkeys.net/training-and-test-set-are-not-compatible-weka/ で尋ねられます。

関連する問題は、コマンドライン バージョンのデータベース抽出では一時 .arff ファイルの生成が必要であり、JDBC で生成された arff ファイルが「日付」データを正しく処理していないように見えることです。私のデータベースは ISO-8601 フォーマット "yyyy-MM-dd'T'HH:mm:ss" の日付を生成しますが、エクスプローラーと JDBC データから生成された .arff ファイルの両方がこれらをタイプ NOMINAL として表します。そのため、ヘッダーの日付属性のラベルのリストは非常に長く、データセットごとに同じになることはありません。

私は Java や Python のプログラマーではありませんが、それが必要なら、本を買いに行きます! 前もって感謝します。

4

3 に答える 3

1

増分分類子を使用できると思います。ただし、このオプションをサポートできる分類子はごくわずかです。SMO と同様に、J48 分類子はこれをサポートしません。したがって、他の分類器を使用して分類します。

詳細については、こちらをご覧ください

http://weka.wikispaces.com/Classifying+large+datasets

http://wiki.pentaho.com/display/DATAMINING/Handling+Large+Data+Sets+with+Weka

于 2012-08-30T09:23:31.833 に答える
1

あなたの計画にももっと大きな問題があるようです。1 日目のデータがあり、それを使用してモデルを構築する場合、それを n 日目のデータで使用すると、新しいクラス ラベルがあり、これまでにないクラス ラベルが表示されます。トレーニング データがないため、新しいラベルを予測することは不可能です。彼らのために。同様に、新しい属性がある場合、それらをクラス ラベルに関連付けるトレーニング データがないため、それらを分類に使用することはできません。

したがって、新しいデータの属性/クラスのサブセットのみを持つデータでトレーニングされたモデルを使用する場合は、新しいデータをフィルタリングして新しいクラス/属性を削除することもできます。 2 つの異なるデータセットでエラーなしで weka を実行できました。

トレーニング セットにない場合は、テスト セットから除外します。その後、すべてが機能するはずです。それをテスト/予測できるようにする必要がある場合は、新しいクラス/属性の例を持つ新しいモデルを再トレーニングする必要があります。

お使いの環境でこれを行うには、データベースから arff ファイルにデータを手動でクエリして、トレーニング セットにあった属性/クラスのみをクエリする必要がある場合があります。大騒ぎせずにこれを行うには、SQL と主要なスクリプト言語 (perl、python など) を調べてください。

于 2012-08-31T00:00:23.993 に答える
0

Weka を維持している大学は、MOA (Massive Online Analysis) を作成して、あなたの種類の問題を分析および解決しました。それらの分類子はすべて更新可能であり、データ フローに対する時間の経過に伴う分類子のパフォーマンスを比較できます。また、モデルの変更 (概念のドリフト/シフト) を検出し、時間の経過とともにデータ ウィンドウを最適化 (つまり、制限) することもできます (古いデータ メカニズムは忘れてください...)。

MOA でのテストとチューニングが完了したら、Weka の MOA 分類子 (それを有効にする拡張機能があります) を使用して、すべてのプロセスをバッチ処理できます。

于 2014-01-24T11:26:37.480 に答える