spark ml:如何找到特征重要性

时间:2016-08-22 10:18:09

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

我是ML的新手,我正在使用Spark ml构建预测系统。我读到特征工程的一个主要部分是找到每个特征在进行所需预测时的重要性。在我的问题中,我有三个分类功能和两个字符串功能。我使用OneHotEncoding技术来转换分类特征和简单的HashingTF机制来转换字符串特征。然后,这些输入作为管道的各个阶段,包括ml NaiveBayesVectorAssembler(将所有要素组合成单个列),分别使用训练和测试数据集进行拟合和转换。

一切都很好,除了,我如何决定每个功能的重要性?我知道我现在只有一些功能,但我很快就会添加更多功能。我遇到的最接近的事情是使用spark ml模块的ChiSqSelector,但它似乎只适用于分类功能。

谢谢,任何潜在客户都赞赏!

3 个答案:

答案 0 :(得分:4)

您可以看到以下示例:

答案 1 :(得分:2)

使用ChiSqSelector是可以的,您可以简单地对连续功能(HashingTF值)进行离散化。在http://spark.apache.org/docs/latest/mllib-feature-extraction.html中提供了一个示例,我在此处复制了感兴趣的部分:

// Discretize data in 16 equal bins since ChiSqSelector requires categorical features 
// Even though features are doubles, the ChiSqSelector treats each unique value as a category 
 val discretizedData = data.map { lp => 
   LabeledPoint(lp.label, Vectors.dense(lp.features.toArray.map { x => (x / 16).floor })) }

答案 2 :(得分:1)

L1监管也是一种选择。

您可以使用L1从系数中获取特征重要性,并相应地决定用于贝叶斯训练的特征。

Example of getting coefficients

更新: Some conditions under which coefficients not work very well