私はScalaを使用しており、StringIndexerを使用してトレーニングセットの各カテゴリにインデックスを割り当てています。各カテゴリの頻度に基づいてインデックスを割り当てます。Spark ML StringIndexer異なるラベルトレーニング/テスト
私のテストデータでは、カテゴリの頻度が異なるため、StringIndexerによってカテゴリに異なるインデックスが割り当てられているため、モデル(Random Forest)が正しく評価されません。
トレーニング/テストデータをまったく同じ方法で処理しており、モデルを保存しません。
私は私がStringIndexerを使用しなければならないようですので、どのように私は私が使用している将来のデータセットを確保します(カテゴリのインデックスを取得することにより)、手動でラベルを作成しようとしたが、
java.lang.IllegalArgumentException: RandomForestClassifier was given input with invalid label column label, without the number of classes specified. See StringIndexer.
このエラーを取得していますトレーニングセットと同じ方法でカテゴリをテストするためにテストしますか?私試みた回避策のコードを追加
EDITは
これは、データフレームは、MYDATAが
+--------+-----+---------+---------+
|category|label| x| y|
+--------+-----+---------+---------+
| a| 0.0| -0.166992|-0.256348|
| b| 1.0| -0.179199| -0.22998|
| c| 2.0| -0.172119|-0.105713|
| d| 3.0| -0.064209| 0.050293|
は私が
val assembler = new VectorAssembler().setInputCols(Array("x, y")).setOutputCol("features")
変換機能を準備するために、ベクトルアセンブラを使用し、それを呼び出す、次のようになります上記のアセンブラを使用したmydata、features列は
val predValues = assembler.transform(mydata)
したがって、モデルには2つの列、機能、ラベルが必要です。だから私は自分のラベルをこれに使用したい。 私はpredvalues
val features = sqlContext.sql("SELECT features from predValues")
から機能を選択して、私のDFから
val labelDF = sqlContext.sql("SELECT label FROM filterFeaturesOnly")
をラベルを選択して、私は
val featuresAndLabels = features.join(labelDF)
をモデルに渡す機能やラベルを持っていますので、2つに参加
これは私がモデルに渡しているもので、上記のエラーが発生します。
val label = predValues.join(labelDF)
あなたのコードで質問を更新できますか? – Vishnu667
@ Vishnu667質問を更新しました。 – other15