ChiSqSelector - 真实特征 - Spark

时间:2016-09-21 02:19:08

标签: scala apache-spark apache-spark-mllib

我正在使用Spark 1.6构建一个NB模型,并使用ChiSqSelector来识别顶级功能。我总共有7个功能并且正在寻找前3个。虽然流程运行良好,但我如何识别被评为最佳功能的实际功能。由于数据已分类,我无法将输出映射到实际输入列。

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]]

如何识别selectedFeatures中引用的0.0,同样在第5行中也是如此。

请帮助..

由于

巴拉

1 个答案:

答案 0 :(得分:3)

在你的例子中:

[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