1
私はSpark 1.6でNBモデルを構築し、ChiSqSelectorを使用してトップフィーチャを識別しています。私は合計7つの機能を持ち、トップ3を探しています。プロセスは正常に実行されますが、どのようにしてトップフィーチャとして評価された実際の機能を特定しますか?データは分類されているので、実際の入力列に出力をマップすることはできません。ChiSqSelector - Real Features - Spark
val chidata = cat_recs.map(r => (r.getDouble(targetInd), Vectors.dense(featuresidx.map(r.getDouble(_)).toArray))).toDF("target","features")
val sel = new ChiSqSelector().setNumTopFeatures(3).setFeaturesCol("features").setLabelCol("target").setOutputCol("selectedFeatuers")
val chiresult = sel.fit(chidata).transform(chidata)
出力
scala> chiresult.foreach(println)
[1.0,[0.0,2.0,0.0,5.0,7.0,5.0,1.0],[0.0,5.0,7.0]]
[1.0,[4.0,3.0,0.0,5.0,7.0,5.0,1.0],[0.0,5.0,7.0]]
[0.0,[3.0,2.0,0.0,5.0,7.0,5.0,3.0],[0.0,5.0,7.0]]
[1.0,[1.0,2.0,0.0,1.0,7.0,5.0,2.0],[0.0,1.0,7.0]]
[1.0,[0.0,2.0,0.0,1.0,7.0,5.0,3.0],[0.0,1.0,7.0]]
構造である - ターゲット:ダブル、機能:ベクター、selectedFeatures:上記からのベクトル は、最初の行の例を取ることができ
[1.0,[0.0,2.0,0.0,5.0,7.0,5.0,1.0],[0.0,5.0,7.0]]
どのようにして0.0を識別し、selectedFeaturesで参照していますか、5行目と同様です。
あなたの例では..
おかげ
バラ
ありがとうございます。私はselectedFeaturesを得ることができると理解していますが、私の質問は、selectedFeaturesの0.0が0番目のインデックスであり、2番目のインデックスではないことをどのように知っていますか? [1.0、[0.0,2.0,0.0,5.0,7.0,5.0,1.0]、[0.0,5.0,7.0] selectedFeatures(0)= 0.0 selectedFeatures(1)= 5.0 selectedFeatures(2)= 7.0 データには2つの0.0があります。また、selectedFeatures(0)は最初の0.0で、後続ではありません0.0 ありがとうございます –
'selectedFeatures'は、値ではなくインデックスで 'Array [Int]あなたの場合、これは(2、3、4)を返す必要があります。これは、選択されたフィーチャが3列、4列、5列であることを意味します。 – bear911
お返事ありがとうございます。 **残念ながら、私が次のことを行うとき scala> chiresult.select( "selectedFeatures")。表示 + ---------------- + | selectedFeatures | + ---------------- + | [2.0,1.0,7.0] | | [0.0,1.0,7.0] | | [0.0,1.0,7.0] | 私は配列ではなく値を取得するようです[Int] ** –