2016-09-21 7 views
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行目と同様です。

あなたの例では..

おかげ

バラ

答えて

2

を助けてください:

[1.0,[0.0,2.0,0.0,5.0,7.0,5.0,1.0],[0.0,5.0,7.0]] 

最後の列[0.0,5.0,7.0]が、この場合には2を備え、選択した機能の値を表し、 3および4(0から数えて)。将来の指標を抽出するには

val model = sel.fit(chidata) 
val importantFeatures = model.selectedFeatures 
+0

ありがとうございます。私は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 ありがとうございます –

+1

'selectedFeatures'は、値ではなくインデックスで 'Array [Int]あなたの場合、これは(2、3、4)を返す必要があります。これは、選択されたフィーチャが3列、4列、5列であることを意味します。 – bear911

+0

お返事ありがとうございます。 **残念ながら、私が次のことを行うとき scala> chiresult.select( "selectedFeatures")。表示 + ---------------- + | selectedFeatures | + ---------------- + | [2.0,1.0,7.0] | | [0.0,1.0,7.0] | | [0.0,1.0,7.0] | 私は配列ではなく値を取得するようです[Int] ** –

関連する問題