「机器学习」特征工程
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
那么我们需要怎么来抬高这一上限呢,特征工程的流程还是比较常规的,这里讲一下主要的思路,只要思路理清了,具体的实现调调包一般就OK啦。(sklearn统统搞定~)
当你拿到一堆数据时,你的第一反应想干嘛?
肯定想画几个特征看看它们长什么样吧,那如果不同特征之间规格都不一样,假设你把它们画在同一坐标轴也观察比较不了,而且也会影响后续的训练效率,所以很自然的想法就是先把数据的规格统一一下,那就是所谓的无量纲化;
那你在无量纲化难免遇到缺失数据,这时候当然是要补全数据啦,最直接的做法就是拿平均值来替代一下;
还有可能需要做的就是针对不同的算法进行特征的转化,算法中有的需要定性特征有的需要定量特征,转化的思想有点“分类”的思想,比如根据阈值将定量特征“分类”为0或1(大于某个阈值为1否则为0),再比如根据定性数据的值“分类”,有几个值就分几类,相当于拓展几个特征,只有对应特征的值为1,其他特征的值为0,这也叫做哑编码(比如一个特征的值有1、2、3三种可能情况;那就可以拓展为3个特征,原特征值为1时,对应新特征”1“的位置为1,其他位置为0)。
以及还有按照一定规则进行特征转化的,比如多项式、或者自定义规则。以上这些过程呢也称为数据预处理。
当你把手头上的数据处理一波后,起码这些数据能够拿来进行训练了,但是还是要进一步提高所谓的上限呀,你拿到的数据可能特征非常多,含有很多无用特征,自然的想法就是把那些无用的特征剔除掉,选择有用的特征来训练,这就是特征选择的过程,那什么样的数据称为”有用“呢,一般来说两个基本原则吧:发散就是说方差要大,如果一个特征没什么变化,那肯定反应不出目标的变化;相关就很直白了,和目标关系越大的特征当然越有用了。
当你把有用的特征选择出来后,结果还是发现特征维度还是太高了,这会影响你的训练效率,维度高的解决办法很自然就是降低维度啊,那就轮到降维算法出场了,主要有PCA和LDA,降维的目标相当于用较低维度的数据来表征原始数据的特征,也就是特征提取啦。
OK了,经过数据预处理、特征选择、特征提取,现在你手上有的就是较低维度的有用数据了吧,快拿去train一发试试!