【机器学习】特征工程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhuanzhe117/article/details/80313099

     “数据和特征工程决定了模型的上限,改进算法只不过是逼近这个上限而已。”

       可见,数据是本质,而特征工程具有洪荒之力,它的目的就是竭尽所能地从数据中提取特征,在配合算法的情况下获得最好的模型,所以,说白了,特征工程就是处理样本数据,样本数据有的也就是那些样本的特征了,所以无论是横向还是纵向,单个还是多个,增加还是减少,多维度、多方法地使得数据更好地为我们所用。

       特征工程中最主要的工作是特征处理,包括:预处理、特征构建、特征提取、特征选择等,这里总结一下工程中以及《机器学习实战》中涉及到的方方面面。
 

一、预处理

缺失值处理:

       最初学算法的时候,为了更方便更直接,为了能把重点放在算法本身上,《实战》给出的数据都是处理以后的,到了后面做工程的时候,面对的都是收集来的原始数据,各种问题接踵而来,处理数据变成了十分重要的一环,如何对待数据中的缺失值,是个棘手的问题。对于缺失值我们一般有如下处理办法:
1.使用可用特征的均值填补缺失值(均值,众数都可以,没什么特别的可以用均值);
2.使用特殊值填补缺失值,如-1(数值型用0或者离散型用None都是可以的);
3.忽略有缺失值的样本(如果数据多,无所谓,drop掉就可以了);
4.使用相似样本的均值填补缺失值(先分组,取同组的其它数据的均值或众数);
5.使用另外的机器学习算法预测缺失值(如随机森林预测年龄等)。

标准化:

归一化:

常用的方法有两种:

(1)线性函数归一化,Min-Max Scaling。在“使用k-近邻算法改进约会网站的配对效果”代码实例中用到了归一化对数值进行处理,在计算欧氏距离时,飞行常客里程数对于计算结果的影响远远大于玩视频游戏和每周消费冰淇淋公升数,原因是飞行常客里程数远大于其他特征值,但三个特征是等权重,不应该有这样的效果,所以要将数值归一化,也就是将取值范围处理为0到1或者-1到1之间,可以用下面的公式 x=(x-min)/(max-min),其中min和max分别是数据集中的最小特征值和最大特征值。这种做法和很多人提到的区间缩放法一样。

(2)零均值归一化,Z-Score Normalization。可以用下面的公式 x=(x一μ)/σ,也就是计算样本值与均值的差值有几个标准差。需要注意的是,数据归一化处理可以加快算法收敛速度(梯度下降的例子),优化算法训练的效率,但无法提升算法准确率。


类别型特征(离散特征)处理:

Categorical特征的数据类型通常是object类型,往往需要将其转换成Numeric特征。而Categorical特征又有两类,需要根据具体含义进行对应的转换。

(1)Ordinal 类型:这种类型的数据存在着自然的顺序结构,如果对Ordinal 类型数据进行排序的话,可以是升序或降序,比如在学习成绩这个特征中具体的值可能有:A、B、C、D四个等级,根据成绩的优异进行排序的话有A>B>C>D。这种情况下使用abelEncoder进行编码处理(也叫序号编码),成绩的A、B、C、D四个等级进行LabelEncoder处理后会映射成1、2、3、4,这样数据间的自然大小关系也会保留下来。
(2)Nominal类型:这种类型的数据不存在顺序,不能对数据排序。比如血型特征可能的值有:A、B、O、AB,但你不能得出A>B>O>AB的结论。这种情况下使用OneHotEncoder进行编码处理(也叫哑变量),代码中使用pandas的get_dummies() ,血型经过编码处理后的结果是新增四个特征:特征分别为Blood_A,Blood_B,Blood_O,Blood_AB,对应的特征值A(1000),B(0100),O(0010),AB(0001)。drop掉原特征即可。

自然数编码,平均数编码:

数据变换:

数据是否符合正态分布,通过对数处理,使其符合正态分布。

二、特征构建

三、特征提取

降维-PCA:

四、特征选择

猜你喜欢

转载自blog.csdn.net/zhuanzhe117/article/details/80313099