2016-08-22 21 views
1

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

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

谢谢,任何线索赞赏!

+0

你可以开发一个特征选择基于信息增益,即在一个特征向量和标签向量之间的信息增益。我们的目标是选择一些功能的子集,以最大化它们和标签之间的信息增益,并最大限度地减少功能本身的信息增益。 GitHub上有几个示例代码。 –

+0

@ Umberto你能指点我一些这些例子吗?非常感谢! – void

回答

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 })) }