机器学习实战----特征工程
一 什么是特征工程
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限。其本质是一项工程活动,目的是最大限度的从原始数据中提取特征以供算法和模型使用。什么是“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限”?就像我们学习一本书,书中的数据和从书中能够获得的所有知识是这本书的知识上限,而我们通过各种学习方法获得的知识是接近这个上限。数据和特征就像一本书中的知识的上限,而模型和算法就是逼近这个上限。
二 为什么进行特征工程
当你想要你的预测模型性能达到最佳时,你要做的不仅是要选取最好的算法,还要尽可能的从原始数据中获取更多的信息。
三 特征工程的过程
特征工程其实就是获取特征的一系列活动,当我们获取了原始数据,首先对原始数据进行了预处理之后,再进行提取特征,然后进行特征选择和特征降维,最后使用特征建立模型。如下图所示:
1 预处理
现实世界数据是“肮脏”的,好的数据能够带来好的结果,获得较好模型,进行较好的预测。对原始数据的清洗、过滤、缺失值处理、标准化、归一化等,使其更方便做后期的特征处理和机器学习。
常用预处理方法:
去重:去掉重复的数据;
过滤:把反常值(极高/极低)用平滑值代替;
标准化:把数据放缩到同样的范围。变换后各维特征有0均值,单位方差。也叫z-score规范化(零均值规范化)。计算方式是将特征值减去均值,除以标准差。
归一化:是将不同变化范围的值映射到相同的固定范围,常见的是[0,1]。Normalize 有L1和L2两个标准。
缺失值处理:用已有的数据补全丢掉的数据(如用均值补齐)
离散化:把数据按不同区间划分。特征二值化(Binarization)
特征二值化:阈值的过程即将数值型数据转化为布尔型的二值数据,可以设置一个阈值(threshold)。即给定阈值,将特征转换为0/1。
总体来说预处理是对初始数据的初步处理。
2 特征提取
特征提取:将原始特征转换为一组具有明显物理意义(Gabor、几何特征[角点、不变量]、纹理[LBP HOG])或者统计意义或核的特征。
提取方法:
1.分类变量特征提取:分类数据的独热编码方法。
2.机器学习问题中常见的文档特征向量:
(1)词库模型将文档转换成词块的频率构成的特征向量,用CountVectorizer类计算基本单词频次的二进制特征向量。(2)通过停用词过滤(stop_word),词根还原,词形还原(wordNetLemmatizer)进一步优化特征向量,
(3)加入TF-IDF(TfidfVectorizer)权重调整文集常见词,消除文档长度对特征向量的影响。
3.图像特征提取的方法(skimage)
介绍了一个关于的手写数字识别的OCR问题,通过图像的像素矩阵扁平化来学习手写数字特征。这种方法非常耗费资源,于是引入兴趣点提取方法,通过SIFT和SURF进行优化。3 特征选择
从特征集合中挑选一组最具统计意义的特征。
选择方法:
过滤法:(1)方差选择法:计算各个特征方差,选择方差大于阈值的特征(2)相关系数法:计算各个特征的pearson相关系数(3)互信息法:计算各个特征的信息增益。
封装法:递归消除法:使用基模型在训练中进行迭代,选择不同特征。
嵌入法:使用带惩罚项的基模型进行特征选择;树模型的特征选择(随机森林、决策树)
4 特征降维
线性降维:(1)主成分分析(PCA):选择方差最大的k个特征;(2)线性判别分析(LDA):选择分类型能最好的特征
非线性降维:(1)核主成分分析:带核函数的PCA; (2)局部线性嵌入(LLE):利用流行结构进行降维 (3)拉普拉斯图 (4)MDS
迁移成分分析:不同领域之间迁移学习降维
四 工具:
1 python中的Scikit-learn,可以特征选择、降维。
2 Maltab下的各种降维函数的使用
五 总结
特征工程是构建任何智能系统的必要部分。特征工程是一门艺术也是一门科学,这就是为什么数据科学家在建模前通常花 70% 的时间用于准备数据。
引用文档:https://blog.****.net/Savinger/article/details/52876605
https://www.leiphone.com/news/201801/T9JlyTOAMxFZvWly.html