目录
在数据科学项目中,数据遵循“garbage in, garbage out”,用不好或不对的数据做分析,会产生不好或无用的结论。数据和特征决定了模型精度的上限,算法只是不断趋于这个上限。项目中70%的时间花在特征工程上。
1 特征工程定义
特征工程(Feature Engineering)是将原始数据转化成能更好表达问题本质的特征的过程,使得运用特征后的模型提升预测精度。
特征工程的目的是对原始数据进行选择、分解或聚合,发现对因变量Y有重要作用的自变量X,以更好的表达问题本质。
特征工程的重要性为:特征越好,灵活性越强,构造的模型越简单,模型精度表现越出色。好的特征使一般算法也能获得很好的精度评估,允许选择简单的模型,不需要花太多时间寻找最优参数,降低模型复杂度,并能提升模型精度评估。
2 特征工程流程步骤
数据科学项目常见流程如下:
其中蓝色框为特征工程步骤。
2.1 数据获取
确定特征使用方案:
1)基于业务理解和业务目标,尽可能找出对因变量有影响的所有自变量。
2)数据可用性评估
获取难度
覆盖率
准确率
确定特征获取方案:
1)获取途径
如何获取特征(接口调用/github下载等)
如何存储(数据库/csv/txt/dataframe等)
2.2 特征理解
获取数据后对数据特征进行分析描述、统计、理解和改进:
1)数据是结构数据还是非结构数据
2)数据字段的类型:数值型,分类型,顺序型
3)探索式数据分析
- 描述性统计: 不同值个数,空值个数,空值比例,分布形状,最大值,最小值,平均值,中值,标准差,离群值,skew,集中情况,离中情况,分类数据的类型比例等
- 数据可视化:图表(饼图,条形图,直方图,散点图等)
2.3 特征改进
数据清洗
错误值,重复值,空值,离群值的处理
1)缺失值处理:
数据量很大而缺失数据很少时,可直接删除缺失值 删除行(实例)
缺失数据占整个字段所有数据的比例过大(>50%),删除列(字段), 或将整个字段转换成指示变量(Indicator Variable)
其他情况,进行缺失值的填充: 固定值填充, 均值填充,众数填充,用模型自动计算填充(KNN, 随机森林,XGBoost),Imputer, 不填充
2)异常值处理
- 基于统计的异常值检测:Quartile, Range,Mean Deviation,Standard Deviation等,适用于单变量的数值型数据。
- 基于距离的异常值检测: 将数据集中与大多数点之间距离大于某个阈值的点视为异常点,主要使用的距离度量方法有绝对距离(曼哈顿距离)、欧氏距离和马氏距离等方法。
- 基于密度的异常值检测: 考察当前点周围密度,可发现局部异常点。
3)根据需求对重复值去重
数据编码
数据类型转换,数据标准化(Data Standardization),一般化(Data Generalization),离散化(Data discretization),归一化(Data Normalization) ,二值化(Binarization), 编码分类变量,指数变换等
标准化(Standardization): 也称为z-score standardization,将正态分布的连续变量转化为标准正态分布(均值为0,方差为单位长度),也用于非正态分布的连续变量,数据形状不会变化。
无量纲化:Max-Min, 将连续变量值压缩至 [0,1] 区间。
归一化(Normalization):将样本特征向量转化为单位向量(unit norm),norm一般为L2 norm。
一般化(Generalization): 将复杂分类/连续变量简化,如将复杂的地址简化成东南西北。
离散化(Discretization): 将连续变量离散为分类变量,有等宽装箱法(Equal-Width),等深(等频)装箱法(Equal-Size),特征值装箱法,决策树离散化。
二值化(Binarizer): 基于给定阈值,将连续变量按阈值划分为二值变量。
分类变量编码: one-hot哑变量, 顺序哑变量。
指数变换: log变换后为正态分布,指数变换后为正态分布,Box-Cox变换。
2.4 特征选择
基于统计的特征选择
1) 皮尔逊相关系数(Pearson correlation):测量列之间的线性关系。在[-1, 1 ] 变化,0代表没有线性关系,相关性接近-1或1代表线性关系很强。要求列是正态分布,数据很大时可忽略此要求。
2) 假设检验 : 将“变量之间不存在相关性”作为,可选择ANOVA或卡方检验(Chi-Square)。
基于模型的特征选择
1)决策树/随机森林: 对基尼系数或熵进行拟合以找到最优特征,适用于分类特征
2)线性模型和正则化: L1范数的正则化称为Lasso正则化,L2范数的正则化称为岭正则化(Ridge),正则化有助于解决多重共线性问题,适用于定量特征
3)SVC: 二元分类特征
2.5 特征转换
特征选择仅限于从原始列中选择特征,特征转换算法将原始列组合起来,从而构造可以更好描述数据的特征。特征转换使用原始数据集的隐藏结构构造新列,生成一个与原始数据结构不同的数据集。特征转换的原理是生成能捕获数据本质的列,只需要几个就能准确解释数据集。是一种降维手段,将高维数据映射到低维空间。两种主要的特征线性转换方法是PCA和LDA。非线性转换方法有T-SNE等。
主成分分析(PCA)
主成分分析(PCA, Principal Components Analysis )是将有多个相关特征的数据集投影到相关特征较少的坐标系上。这些新的、不相关的特征叫主成分。主成分能替代原始特征空间的坐标系,需要的特征少,捕捉的变化多。主成分会产生新特征,最大化数据的方差。这样每个特征都会解释数据的形状。主成分按可以解释的方差来排序,第一个主成分最能解释数据的方差,第二个其次。
PCA本身是无监督任务,不使用响应列进行投影/转换。
PCA利用了协方差矩阵的特征值分解。PCA也可以在相关矩阵上使用。如果特征的量纲相同,可以使用相关矩阵。量纲不同时,应使用协方差矩阵。一般在缩放数据上使用协方差矩阵。
PCA的过程为:
1)创建数据集的协方差矩阵;
2)计算协方差矩阵的特征值;
3)保留前k个特征值(按特征值降序排列),绘制碎石图确定保留的特征值个数;
4)用保留的特征向量转换为新的数据点。
PCA会消除相关特征。本质上,在特征值分解后,得到的所有主成分都互相垂直,意思是彼此线性无关。很多机器学习和预处理技术会假设特征是相互独立的,用PCA可以确保这个假设。
线性判别分析(LDA )
线性判别分析(LDA, Linear Discriminant Analysis)是特征变换算法,也是有监督分类器。和PCA一样,LDA的目标是提取新坐标系,将原始数据投影到低维空间中。但LDA不会专注于数据的方差,而是优化低维空间,此低维空间在为分类模型查找决策边界时更有用。L DA分类有助于避免过拟合,也会降低计算成本。
LDA会计算类内(within-class)和类间(between-class)散布矩阵的特征值和特征向量,选择分类性能最好的特征,最大化类间距离,最小化类内距离。LDA的步骤为:
1)计算Y变量每个分类的均值向量;
2)计算类内和类间的散布矩阵;
3)计算的特征值和特征向量;
4)降序排列特征值,保留前k个特征向量;
5)使用前几个特征向量将数据投影到新空间;
非线性变换
PCA和LDA都是线性变换(矩阵变换),不适用于非线性特征。对于非线性变换,可用Kernal PCA,Kernal LDA , t-SNE, LLE等
参考引用:
【1】https://blog.csdn.net/sunyaowu315/article/details/83782069
【2】https://scikit-learn.org/stable/modules/preprocessing.html#preprocessing
【3】Feature Engineering Made Easy -- Sinan Ozdemir, Divya Susarla
【4】Feature Engineering For Machine Learning -- Alice Zheng & Amanda Casari
【5】https://blog.csdn.net/u010865478/article/details/82716992