3.3 特征准备
在前面几节,我们选择了模型并且准备了监督学习所需的因变量。本节,我们需要准备自变量,他们是影响因变量因素(销售团队的成功)的所有特征。对于这项重要的工作,我们需要将400多个特征约减为合理的一组特征,以适应最终的建模需要。为此,我们使用PCA方法,利用专业知识,然后执行特征选择任务。
3.3.1 PCA
PCA是非常成熟且经常使用的特征约减方法,经常用来寻找一个小的变量集合以表示最显著的变化。严格地讲,PCA的目标是寻找一个低维度子空间来尽可能获取数据集的变化情况。
如果你使用MLlib,以下网址有几个示例代码,用户可以在Spark上使用、修改后运行PCA:http://spark.apache.org/docs/latest/mllib-dimensionality-reduction.html#principal-component-analysis-pca。更多关于MLlib的信息,请访问:https://spark.apache.org/docs/1.2.1/mllib-dimensionality-reduction.html。
考虑到R语言丰富的PCA算法,在本例中我们使用R语言。在R语言中,至少有5个PCA计算的函数,具体如下:
R语言Stats包中的prcomp 和princomp方法最常使用,并且具有较好的结果总结和绘制的函数。因此,我们将使用这两个方法。
3.3.2 使用专业知识进行分类分组
事情总是这样,如果可以使用一些专业知识,可以大幅提高特征筛选结果。
对于我们这个例子,数据分类是一个良好的开始,数据分类如下:
市场营销
培训
促销
团队管理
员工
产品
因此,我们针对每个数据分类执行一个PCA算法,共执行6次PCA算法。例如,对于团队分类,我们需要在73个特征或变量上执行PCA算法,以识别出能够全面表示我们所了解的团队信息的因素或维度。在这个练习中,我们找到2个维度来表示团队分类的73个特征。
对于员工分类,我们在103个特征或变量上执行PCA算法,以识别出能够全面表示我们所了解的员工信息的因素或维度。在这个练习中,我们找到2个维度来表示员工分类的103个特征。特征选择情况如下表所示:
分 类 因素的数量 因素的名称
团队 2 T1,T2
市场营销 3 M1,M2,M3
培训 3 Tr1,Tr2,Tr3
员工 2 S1,S2
产品 4 P1,P2,P3,P4
促销 3 Pr1,Pr2,Pr3
合计 17
PCA执行之后,我们在每个类型得到了2到4个特征,汇总情况如上表所示。
3.3.3 特征选择
特征选择主要用于消除特征冗余或不相关特征,但是由于以下原因一般在最后使用:
使模型易于理解
减少过拟合的机会
节约模型估计的时间和空间
在MLlib中,我们可以使用ChiSqSelector算法,具体如下所示:
在R语言中,我们可以使用R语言包来简化计算。在可选的R语言包中,CARET是经常使用的R语言包之一。
首先,作为练习,我们在所有400个特征上执行特征选择。
然后,我们从PCA结果中选择的所有特征开始,我们也执行特征选择,因此可以全部保留它们。
因此,最后我们有17个特征供使用,具体如下所示:
特 征
团队特征T1, T2
市场营销特征M1, M2, M3
培训特征Tr1, Tr2, Tr3
员工特征S1, S2
产品特征P1, P2, P3, P4
促销特征Pr1, Pr2, Pr3
更多关于Spark上特征选择的信息,请访问:http://spark.apache.org/docs/latest/mllib-feature-extraction.html。