笔记整理时间:2017年1月11日
笔记整理者:王小草
今日记事:
发现自己普通话越来越不标准了。喜马拉雅频道放的音频有人给我留言说发音不准。难道真的写程序会退化语言功能吗。而且有的时候就是不想说话,不是性格内向而是舌头不想动了。快救我。。。咳咳咳
关于特征的选择,基于SPARK 2.1.0官方提供了3类方法:VectorSlicer,RFormula,ChiSqSelector。
我感觉Spark这样去归类文档有一点问题,有点混淆了“特征的选择”的两个概念。
1.VectorSlicer,RFormula这两个方法讲的是在你知道了要选择什么特征之后,它提供了简易的方法让你很方便地把你想要用的特征个取出来,并形成新的一组特征。注意,使用这个方法的前提是你已经知道要选择哪些特征。
2.ChiSqSelector是一种选择特征的统计学上的方法。也就是说在众多特征中,我还不知道哪些特征有用,所以可以通过卡方检验来计算每个特征对目标变量的预测能力的强度,从而根据卡方检验计算后的指标去选出最优的特征。SparkML提供的ChiSqSelector接口可以帮助我们去计算卡方检验,并且选择最优的特征。
也就是说前者提供的是一个选择特征的动作;后者提供的是选择特征的方法+动作,与模型的优化有关。
本文先介绍下VectorSlicer的用法。因为只是一个选择的动作,所以也没有什么理论可以解释,下面直接介绍如何使用这个方法和接口。
1. 特征向量的切分
VectorSlicer其实是一个转换器,输入一组特征,可以输出原特征数组的子集。
如果我们发现数据集中的特征并不是都具备预测模型的价值,或是由于一些原因(比如过多缺失值)不得不舍弃一些特征,此时我们可以直接调用这个方法选出那些我们需要的特征形成一组新的备用特征。
那么如何选择呢?每个特征都需要带有一个索引,进来一组原始的特征,根据索引选择需要的特征,然后生成新的特征集即可。索引有两类:
1.整型索引,代表特征的索引,可以通过setIndices()设置
2.字符串索引,代表特征的名称,可以用过setNames()设置。
使用时有以下注意点:
可以同时使用整型索引与字符串索引。
至少需要选择一个特征。
不能出现重复的特征。
输出的新的特征数组将会自动根据给定的索引顺序排