我正在研究Scala。我有一个很大的问题,ChiSqSelector似乎成功地减少了维度,但我无法确定哪些功能减少了剩余的内容。我如何知道减少了哪些功能?
[WrappedArray(a, b, c),(5,[1,2,3],[1,1,1]),(2,[0],[1])]
[WrappedArray(b, d, e),(5,[0,2,4],[1,1,2]),(2,[1],[2])]
[WrappedArray(a, c, d),(5,[0,1,3],[1,1,1]),(2,[0],[1])]
PS:当我想让测试数据与特征选择的列车数据相同时,我发现我不知道如何在scala中这样做。
答案 0 :(得分:2)
如果您使用ChiSqSelector
的{strong> MLlib 版本,则可selectedFeatures
:
mllibModel: org.apache.spark.mllib.feature.ChiSqSelectorModel = ???
val features: Array[Int] = mllib.selectedFeatures
然而,当您使用测试数据时,最好使用在训练数据集上训练的选择器,而不必担心手动选择。
val testData: RDD[org.apache.spark.mllib.linalg.Vector] = ???
mllibModel.transform(testData)
同样的规则适用于 ML 版本。您可以使用selectedFeatures
来提取索引数组:
val mlModel: org.apache.spark.ml.feature.ChiSqSelectorModel = ???
val features: Array[Int] = mlModel.selectedFeatures
但保持模型并重新使用新数据仍然更好:
val testData: RDD[org.apache.spark.sql.DataFrame] = ???
mlModel.transform(testData)
如果您想要一个人类可读的功能列表,您可以在转换后分析列元数据,如Tagging columns as Categorical in Spark
所示