一、数据预处理概念
1、数据属性类别:标称属性、二元属性、序数属性、数值属性
2、机器学习属性分类:离散属性、连续属性
3、数据汇总统计:中心趋势度量、度量数据散步
中心趋势度量:均值、加权算数均值、截尾均值、中位数、众数、中列数、正倾斜、负倾斜
度量数据散步:极差、分位数、四分位数、百分位数、四分位数极差、方差、标准差
4、数据预处理:数据清洗和特征预处理
数据清洗:缺失值处理(去除、填补)、异常值处理、不均衡数据处理(超过4:1)
特征预处理:特征缩放、连续型特征离散化、离散型特征编码、数据变换
(1)特征缩放:目的:不同规格数据转换到同一规格。列处理:无量纲化(标准化,归一化:均值归一、最大最小归一,缩放成单位向量),行处理:正则化(前提特征服从正态分布 );
(2)连续型特征离散化:目的:模型稳定、降低模型过拟合风险;定量数据(二值化操作,分箱:有监督分箱(卡方分箱)、无监督分箱(等距分箱、等频分箱));定性数据。
(3)离散型特征编码:目的:非定量特征无法训练模型,需要编码转为定量;One-Hot编码(独热编码)、LabelEncoder(标签编码)、哑编码。
(4)数据变换:目的:线性回归和一般回归无法拟合目标函数,变换后尝试拟合;基于多项式变换、基于对数函数变换。
二、数据预处理常用方法
1、数据清洗-缺失值处理:
数据缺失原因:客观因素(人为疏忽、机器故障)、人为隐瞒、数据本身缺失、系统实时性要求高、历史局限性导致数据收集不完整
数据缺失类型:完全随机缺失(MCAR)、随机缺失(MAR)、非随机缺失(MNAR)
缺失值处理方式:删除、填充、不处理
(1)删除:适用于数据量大,缺失值少的情况,8-%法则属性删除;优点简单;缺点:破坏数据历史完整性、可能改变数据分布、降低模型准确性;实现:pandas的dropna函数
(2)填充:Mean/Mode/Median估计、KNN、回归、变量映射
Mean/Mode/Median估计:定类众数填充(Mode)、定量均值中位数填充(Mean、Median);优点简单;缺点:可能改变数据分布、可能会引入噪音节点、降低模型准确性;实现:Mean函数和Median函数填充缺失值。
KNN:计算欧式 距离;优点:不需要为含有缺失值的每个属性都建立预测模型、一个属性有多个缺失值也可以很容易解决、把数据结构直接的相关性考虑在内;缺点、大数据集时间开销大、K值选择为关键,选择过大过小都会影响结果;实现:KNN算法。
回归:建立回归模型预测缺失值填充;只适用于缺失值为连续的情况、若缺失值与其他变量无相关性,预测出的值无统计学意义。
变量映射:将变量映射到高位空间;优点:保留原始数据完整性、无需考虑缺失值;缺点:计算开销大大提升、可能会出现稀疏矩阵降低模型质量。
(3)不处理:数据填充缺点:不一定符合客观事实、一定程度改变数据分布、可能加入噪音节点;有一些模型可以容忍一定数据缺失,可不处理,如Xgboost模型。
2、数据清洗-离群点处理:
离群点原因:数据输入错误、数据测量、实验误差、数据处理错误、抽样错误、自然离群点。
离群点监测方法:散点图、3σ原则、箱型图分析、基于分类模型的异常检测(贝叶斯模型、神经网络、SVM,建模对新数据判断是否偏离,偏离则为离群点)。
离群点处理方法:删除(适用于离群点较少情况)、将其视为缺失值进行处理、估算离群点(Mean/Mode/Median估计填充)
3、数据清洗-遗漏值处理:
遗漏值处理方法:手工填补、缺省值填补、均值填补、同类别均值填补、可能值填补(用回归、贝叶斯、决策树推断出可能值)
4、数据转换
数据转换内容:清洗+转换,清洗掉重复的、不完整的、错误的数据;根据具体业务规则,对数据转换,实现数据转换目的;
数据转换操作:基本操作(Cleaning空值变为0或者NULL、Deduplication删除重复数据、Transpose行列转置);高级操作(Filtering:选取确定的数据加载、Joining多个数据源数据结合、Splitting一列分为多列、Integration多列整合为一列);
偏度与峰度:偏度衡量数据分布不对称性、反映数据集中情况、均值、中位数以及众数间的大小关系;
偏态数据处理方案:
(1)平方根法,平方根sqrt(x)是一种对分布形状有适度影响的变换。用于数据中等偏斜的情况,减少右偏的数据,可用于0值,常用于计数数据。
(2)对数转换,是一种强烈的变化,对分布形状有重大影响。适用于减少右偏度,不能应用于0或负值。
(3)Box-Cox转换,将非正态数据转换为正态的技术。用于转换偏斜数据,比平方根和对数变换的纠偏效果更好。
5、数据描述:
数据可视化作用:数据阅读便捷更加客观更具说服力、帮助分析海量数据中存在的价值和规律、清晰理解数据调整分析方法。
数据可视化使用场景:金融股票、财务、医学、统计分析、自然科学
可视化工具:matplotlib、seaborn、pyecharts、Echarts
三、特征工程常用方法
1、特征选择概念:
特征选择目的:关键信息只聚集在部分或者少数特征上,需要减少位数灾难、降低学习任务难度;
特征选择原则:特征是否发散、特征之间的相关性、特征与目标的相关性
常见特征选择方法:
特征减少:单变量特征选择(Filter)、基于模型的特征选择方法(Wrapper、Embedded、其他方法:如交叉验证配合Embeded方法)
特征扩增:在原有基础上构造新的特征
2、Filter:过滤法
(1)方差选择法:适用于连续变量,方差越大影响越大越有用,实现:sklearn中的VarianceThreshold类;
(2)相关系数法:Pearson相关系数,缺陷:只对线性关系敏感,实现:Scipy的pearsonr方法能够同时计算相关系数r值和p-value(P值),p值越小,相关系数越显著。
(3)卡方检验:检验某个特征分布与输出值分布直接的相关性,描述自变量与因变量相关程度,𝜒2值越大,相关程度也越大。实现:在sklearn中,可以使用chi2这个类来做卡方检验得到所有特征的 𝜒2 值与显著性水平P的临界值,给定𝜒2值阈值,选择𝜒2值较大的部分特征。
(4)互信息法:表示两个变量是否有关系以及关系的强弱。从信息熵的角度分析特征与输出值之间的关系评分,互信息值越大,相关性越大,越需要保留。缺陷:不属于度量无法归一化,在不同数据集上的结果无法比较,对连续变量通常需要先离散化,互信息的结果对离散化的方式敏感。实现:sklearn使用mutual_info_classif(分类)和mutual_info_regression(回归)来计算各个输入特征和输出值之间的互信息。
(5)小结:适合单变量特征选择,缺点:不能发现冗余,若特征之间具有强关联且非线性,不能避免选择的最优特征组合冗余。
按照不同的特征属性类型,划分如下:
评价自变量的新西兰或者离散情况:方差选择法;评价自变量与自变量(或因变量)的相关性:相关系数法、卡方检验、互信息法;
实现:Python库中的sklearn中的feature_selection子模块来进行调用。
3、Wrapper:包装法
递归特征消除法(RFE):使用一个基模型来进行多轮训练,每轮训练后,移除若干权值系数的特征,再基于新的特征集进行下一轮训练。
指定一个有n个特征的数据集。
选择一个算法模型来做RFE的基模型。
指定保留的特征数量k(k<n)。
第一轮对所有特征进行训练,算法会根据基模型的目标函数给出每个特征的“得分”或排名,将最小“得分”或排名的特征剔除,这时候特征减少为n-1,对其进行第二轮训练,持续迭代,直到特征保留为k个,这k个特征就是选择的特征。
4、Embedded:嵌入法
每次迭代使用特征全集,特征选择过程与学习器训练过程融为一体,实现:在sklearn中,使用SelectFormModel函数来选择特征。
(1)基于线性回归模型方法
(2)基于L1的正则化方法
在简单线性回归模型基础上加入一个L1范数座位惩罚约束,用RSS表示LASSO回归的损失函数,L1正则化的任务就是在L1正则化项的约束下球RSS最小值;可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择也可以防止过拟合。
实现:使用feature_selection库的SelectFromModel类结合带L1正则化的特征选择方法。
优缺点:降低过拟合风险、降低学习任务难度、计算和存储开销小
(3)基于随机森林的嵌入方法
平均不纯度减少
平均精度下降
实现:使用sklearn.tree模块,随机爱森林模型使用sklearn.ensemble模块。
5、特征选择与降维区别
相同:解决过拟合问题、使数据维度降小
不同:降维本质上是从一个维度空间映射到另一个维度空间,特征选择是但从的从提取到的所有特征中选择部分特征座位训练集特征。
一般先进行特征选择再进行降维。