Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala ChiSqSelector-真实功能-Spark_Scala_Apache Spark_Apache Spark Mllib - Fatal编程技术网

Scala ChiSqSelector-真实功能-Spark

Scala ChiSqSelector-真实功能-Spark,scala,apache-spark,apache-spark-mllib,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"

我正在使用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]]
结构-目标:双,特征:向量,选择特征:向量 从上面来看,让我们以第一行为例

[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,[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

谢谢你的回复。我知道我可以获得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]]selectedFeatures0=0.0 selectedFeatures1=5.0 selectedFeatures2=7.0在数据中我们有两个0.0,我们怎么能说selectedFeatures0是前0.0而不是后0.0呢?谢谢“selectedFeatures”返回带有索引的数组[Int],因此,在您的情况下,这应该返回2、3、4,这意味着所选功能是第3、第4和第5列。感谢您的回复**不幸的是,当我执行以下scala>chiresult.selectedFeatures.show+-----------++-----------+[2.0,1.0,7.0]|[0.0,1.0,7.0]|[0.0,1.0,7.0]|[0.0,1.0,7.0]|时,我似乎得到的是值而不是数组[Int]**不要选择列,这是模型中的一个方法,使用model.selectedFeatures,完全按照我的回答中的方式使用。不客气。如果有效,请选择它作为答案:-