数据预处理的方法主要包括去除唯一属性、处理缺失值、属性编码、数据标准化正则化、特征选择、主成分分析等。
一、去除唯一属性
可以理解为数据的ID,每个样本都取值不一样且唯一,这对模型是没有意义的,所以可以直接删除,不作为特征输入。
二、处理缺失值
简单理解就是这一维特征值没有,不知道应该咋算。这里又分完全随机缺失、随机缺失和不完全随机缺失。
完全随机缺失,缺失的特征值和目标以及其他特征变量是不相关的。
随机缺失,和目标无关,但是和其他变量相关。
不完全随机缺失,丢失的数据和其他数据存在相关性。
说实际,其实不太明白缺失值的分类。
比如身高和年龄,男性用户的这两个特征容易获得,但是女性用户可能因为比较敏感而获取不到这两个特征。
网上有很多缺失值的补充方法,但是限制也都很多。在深度学习中,其实并不需要补充缺失值,因为一般输入都是原始的,最多就是NLP任务中的未登陆词。否则绝大部分特征都是可以全量计算和补充的,实际上深度学习很多时候不要你提供太多特征工程的东西,这一点和机器学习是不一样的。而在机器学习中,大部分情况下把缺失值统一填充为平均值或者某个极值,也能让模型学习到缺失值的重要性。
三、离散点处理
发现样本中的极值样本,挖掘方法完全是统计特征,比如和均值的最大误差,百分比,聚类,密度等等方法。
四、特征编码-特征向量化
1)分箱,即把特征归为0或者1,也可以看做是离散化
2)one-hot编码-会导致大量稀疏特征,比如分类特征,离散化之后可能是一个成百上千维的向量。
五、数据标准化
标准化是将样本的某个特征缩放到某个区间,因为不同的特征如果使用不同的单位或者量级,会导致无法横向比较或者度量,因此某些算法要求数据特征标准化为相同的度量区间。这样训练过程更容易收敛。
标准化的方法:
1)归一化:最大值为1,最小值为0或者-1,其他值用归一化公式计算为-1到1区间的值。
2)规范化(z-score标准化):把均值规范化为0,方差规范化为1,其他值用z-score公式计算,适用于最大值和最小值未知的场景。
3)正则化:不太懂。。。
六、特征选择-降维
从给定的特征集合中选出相关特征子集的过程称为特征选择,说白了就是特征太多了,想过滤掉没啥用的特征,留下更有用的特征,这样可以减少特征维度,更快的达到收敛。
进行特征选择必须确保不丢失重要特征。
衡量一个特征是否可选的两个指标:
1)发散性,即特征的取值是否有区分度,如果都是一个取值,那这个特征是没有区分度的,模型也学不到任何信息。比如都是0或者都是1.
2)和目标的相关性,即特征和最终要预测的目标的相关性来进行特征选择,这是一个非常复杂的过程,甚至需要引入其他模型来进行相关性计算。
七、预处理之sklearn
preproccessing
sklearn提供了强大的机器学习工具,preproccessing就包含了各种特征变形算法、缺失值处理方法和标准化方法。feature_selection提供了各种特征选择方法。
1)方差选择法
#方差选择法,返回值为特征选择后的数据
#参数threshold为方差的阈值
VarianceThreshold(threshold=3).fit_transform(iris.data)
2)相关系数法
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
#选择K个最好的特征,返回选择特征后的数据
#第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量,输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值。在此定义为计算相关系数
#参数k为选择的特征个数
SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
3)卡方检验
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
#选择K个最好的特征,返回选择特征后的数据 SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)
4)递归消除特征法
相当于训练多次,每次把上一词训练后权重最低的几个特征去掉,重新训练下一轮。
5)embedding
embedding既是特征选择,也是特征降维,可以去掉相关性相同的特征。embedding的方法又分为带惩罚的L1正则法以及树模型的方法。树形模型选择特征,其实是用树形分类器来做特征选择,因为训练比较快,而且知道容易知道特征权重。
6)特征降维
当特征选择完成后,可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法除了以上提到的基于L1惩罚项的模型以外,另外还有主成分分析法(PCA)和线性判别分析(LDA),线性判别分析本身也是一个分类模型。PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。