【问题标题】:Making the features of test data same as train data after featureselection in spark在 spark 中进行特征选择后,使测试数据的特征与训练数据的特征相同
【发布时间】:2016-03-09 21:37:16
【问题描述】:

我正在研究 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 中做到这一点。

【问题讨论】:

    标签: scala apache-spark feature-selection apache-spark-mllib apache-spark-ml


    【解决方案1】:

    如果您使用ChiSqSelectorMLlib 版本,您可以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 所示

    【讨论】:

    • 不,我的意思是如果测试数据没有标签,我可以使用 chisqModel.transform(testData) 吗?
    • 检查答案中的类型 :)
    猜你喜欢
    • 2019-03-18
    • 2023-03-14
    • 1970-01-01
    • 2020-05-10
    • 2020-06-03
    • 2018-02-26
    • 2021-03-30
    • 2020-02-22
    • 2014-12-27
    相关资源
    最近更新 更多