前一篇文章,这里,我们对于一维数组的数学统计特征做了总体的概述,应该说在不同的场景下,特征的作用是不一样的。那么面对一组数据,如何选取特征呢?
举个例子来说。有形如[100,5,300,20,80,500,80…300]这种形式的一维数据,60组,分为6类,每个类别10组数据。怎样选取特征来表示这些一维数组呢?最简单的方法就是把前一篇文章的所有特征都提取出来,作为特征作为机器学习的输入。包括期望,标准差,中程数,众数,极差,编译系数,峰度系数,偏度系数,分位数等特征。
但是这时候特征会较多,可能不利于机器学习。下面介绍几种精简特征的方法。
1,根据具体的应用场景,很容易就能够排除上述的一些特征。例如上述特征如果表示每一点页面的点击量。均值和方差可能就较为重要,而众数相对来说影响系数就较小。相反如果上述特征表示是身高,可能众数就比较重要。应用场景的不同,可以排除一些明显没有作用的特征。
2,如果无法决定一些特征是否有用的时候,这时候可以将这些特征都算出来,毕竟python都有提供对应的函数,求解还挺方便的。将上述60组一维数据的期望和标准差的等特征都求解出来之后。这个时候,每个特征都有60个数据,例如期望有60组的数据,绘制期望的散点图(或者趋势图)。纵坐标表示具体期望的值,横坐标表示第几个期望。观察特征的走势,如果特征波动非常小,非常的平稳。那么这个特征是很难用来区分各种类别的,也就是没有用的。如果特征的走势在各个类别之间差距较大,则这可能是一个很好的输入特征。
3,经过上述排除,将特征输入某种模型,例如c4.5决策树。由于决策树一般会打乱训练数据的输入顺序,同时一些初始值有也不同,计算的各个特征的权重也不一样,导致训练的模型每次对于测试集的识别结果也不相同。这时候反复的进行训练,取识别率较高的模型,可以看出各个特征的权重比值,对于决策树来说,有一个classifier.feature_importances_输出表示的是各个特征的重要性。对于权重为0的特征就是无效特征,这种特征往往是在2中所提到的那些波动较小的特征。排除重要性为0的特征,剩下的就是机器学习的输入特征。
4,当然在选取上述特征之后,有可能需要归一化。这个时候需要注意的问题就是,必须使用训练集的均值方差等对测试集数据进行归一化处理。如果使用测试集自身的均值和方差来进行归一化,会导致在相同的模型下,随着测试数据的增多,同一条数据的前后测试结果会不一样,因为整个测试集的均值和方差在发生了变化。
本文为优快云村中少年原创文章,转载记得加上小尾巴偶,博主链接这里。