本文简单的总结了一些常用的数据预处理方法,更新ing…
一、常用数据类型对应的数学模型
数据类型 | 模型 |
---|---|
点集 | 概率分布 |
时间序列 | 随机过程(如隐马尔可夫过程等) |
图像 | 随机场(如吉布斯随机场) |
网络 | 图模型、贝叶斯模型 |
二、特征编码
1 数字编码
对于等级型特征(如收入水平),按照特征值取值大小从小到大进行整数编码——可保证编码后保留原有次序关系。
2 One-Hot编码
对于类似的离散型特征(特别是名义型特征,如汽车品牌),使用One-Hot编码,将包含K个取值的离散型特征转换成K个二元特征(取0或1)。
以特征“汽车品牌”={路虎,吉利,奥迪,大众,奔驰}为例:
将其编码为5个特征 f 1 , f 2 , f 3 , f 4 , f 5 f_1,f_2,f_3,f_4,f_5 f1,f2,f3,f4,f5,当原始特征取不同值时,转换后的特征取值如下:
One-Hot编码的优点:
- 不会给名义型特征的取值人为的引入次序关系,不同的原始特征取值之间拥有相同的距离
- 在线性回归模型中,对名义型特征进行One-Hot编码的效果通常比数字编码的效果好
- One-Hot编码对包含离散型特征的分类模型的效果有很好的提升
One-Hot编码的缺点:
- 会使特征维度显著增多
- 会增加特征之间的相关性:对于表2.1,编码后的5个特征存在线性关系 f 1 + f 2 + f 3 + f 4 + f 5 = 1 f_1+f_2+f_3+f_4+f_5=1 f1+f2+f3+f4+f5=1。
哑变量编码:对于一个包含K个取值的离散型特征,将其转换为K-1个二元特征。
三、缺失值处理
1 删除法
删除带有缺失值的样本或特征,以减少数据换取信息的完整性,会丢失大量隐藏信息。
2 填补法
2.1 均值填补
计算该特征中非缺失值的平均值或众数进行替代,连续型特征通常使用平均值填补,离散型特征则使用众数。
缺点:
- 使数据过分集中在平均值或众数上,导致特征的方差被低估
- 均值填补会大大弱化特征之间的相关性
总结: 实际应用中可以根据一定的辅助特征,将数据集分组,之后分别填补。
2.2 随机填补
在均值填补的基础上增加随机项,以改善缺失值分布过于集中的缺陷。
2.2.1 贝叶斯方法
假设数据集有 n n n个样本,某特征 f f f存在 k k k个非缺失值和 ( n − k ) (n-k) (n−k)个缺失值,使用贝叶斯Bootstrap方法进行缺失值填补共有两步:
- 从均匀分布 U ( 0 , 1 ) U(0,1) U(0,1)中随机抽取 k − 1 k-1 k−1个随机数,并进行升序排序,记为 a 1 , a 2 , … , a k − 1 a_1, a_2, … , a_{k-1} a1,a2,…,ak−1;
- 对 ( n − k ) (n-k) (n−k)个缺失值,分别从非缺失值 f 1 , f 2 , . . . , f k {f_1, f_2, ... , f_k} f1,f2,...,fk中以概率{ a 1 , a 2 − a 1 , … , 1 − a k − 1 a_1, a_2-a_1,…, 1-a_{k-1} a1,a2−a1,…,1−ak−1}采样一个值进行填补。
2.2.2 近似贝叶斯方法
- 从在 k k k个非缺失值 f 1 , f 2 , . . . , f k {f_1, f_2, ... , f_k} f1,f2,...,fk中有放回地抽取 k k k个值建立一个新的大小为 k k k的集合 F F F;
- 对 ( n − k ) (n-k) (n−k)个缺失值,分别从 F F F中随机抽取一个值进行填补。
2.3 基于模型的填补
将缺失值 f f f作为预测目标,将数据集中其他特征或其子集作为输入特征,通过其非缺失值构造训练集,训练分类或回归模型,并用该模型来预测特征 f f f的缺失值。
缺点:
- 需要采用模型评估方法对其性能进行评估
- 会增大特征之间的管联系
3 其他
缺失值处理的方法有很多,除了以上介绍的方法之外,还包括哑变量方法和EM算法等。对于离散性特征,如果存在缺失值,可以将缺失值作为一个单独的取值进行处理,这种方法称为哑变量方法。例如学生信息数据集中,将“性别”特征的缺失值作为一个特殊的取值“unknown”,表示性别未知,此时认为“性别”特征包含“F”、“M”、“unknown”三个不同取值。EM算法是一种可以利用不完整的信息实现概率模型的参数化估计的算法,EM算法可以用来进行缺失值填补,此时缺失特征被当作隐含变量。
四、数据标准化
假设特征 f f f的取值集合为{ f 1 , f 2 , . . . , f n f_1, f_2, ... , f_n f1,f2,...,fn},特征值 f i f_i fi经过标准化后的取值为 f i ′ f_i^{'} fi′,不同标准化方法的计算公式如下:
1 Z-score标准化
通过对数据集中的每个样本进行处理,使得处理后的数据具有固定均值和标准差。
公式:
f
i
′
=
f
i
−
μ
σ
f_i^{'}=\frac{f_i-\mu}{\sigma}
fi′=σfi−μ;
其中
μ
=
1
n
∑
i
=
1
n
f
i
\mu=\frac{1}{n}\sum_{i=1}^{n}f_i
μ=n1∑i=1nfi为特征
f
f
f的平均值,
σ
=
1
n
∑
i
=
1
n
(
f
i
−
μ
)
2
\sigma=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(f_i-\mu)^2}
σ=n1∑i=1n(fi−μ)2为特征
f
f
f的标准差。
经过Z-score标准化后的特征能够直观反映每个取值距离平均值的标准差距离,从而理解特征的整体分布情况。
2 Min-Max标准化
令特征取值落在任意区间 [ a , b ] [a,b] [a,b]内,则:
f i ′ = b − a f m a x − f m i n ) ( f i − f m i n ) + a f_i^{'}=\frac{b-a}{f_{max}-f_{min}})(f_i-f_{min})+a fi′=fmax−fminb−a)(fi−fmin)+a
该方法的缺点在于,当数据存在离群值时,该标准化的效果较差。
3 小数定标标准化
f i ′ = f i 1 0 j f_i^{'}=\frac{f_i}{10^j} fi′=10jfi,其中 j j j是满足max{ f 1 ′ , f 2 ′ , . . . , f n ′ f_1^{'}, f_2^{'}, ... , f_n^{'} f1′,f2′,...,fn′} < 1 <1 <1的最小整数。
例如某特征的取值范围为
[
−
3075
,
2187
]
[-3075,2187]
[−3075,2187],特征取值绝对值的最大值为
3075
3075
3075,则
j
j
j取值为
4
4
4。
小数定标标准化不利于后续数据分析时的样本区分,标准化效果受离群值影响。
4 Logistic标准化
f i ′ = 1 1 + e − f i f_i^{'}=\frac{1}{1+e^{-f_i}} fi′=1+e−fi1;
如果特征取值分散且均远离0,则标准化后的特征取值会聚集在0或1附近,造成原始特征的分布及取值间关系被改变,所以应用Logistic标准化之前,需要首先分析原始特征取值的分布情况。
不同标准化方法的对比
Z-score标准化无需计算特征的最小值和最大值,需要记录特征的均值和标准差,适用于特征最大值或者最小值未知,并且样本分布比较离散的情况。
Min-Max标准化对数据做线性变换,保留了原始数据间的关系。但是当数据的最大值、最小值发生变化时,需要对每个样本重新做计算,该标准化方法适用于需要保留原始数据间的关系,并且最大值最小值固定的情形。
小数定标标准化简单实用,易于还原标准化后的数据。但是当原始数据的最大绝对值发生变化时,需要对每个样本重新做计算。该标准化方法适用于数据分布比较离散,尤其是分布在多个数量级的情形。
Logistic标准化通过单一映射函数对数据进行标准化处理。但是它对分布离散并且远离零点的数据处理效果不佳,该标准化方法适用于数据取值分布比较集中,并且均匀分布在零点两侧的情形。
【注】标准化处理会改变原始特征的取值,因此在实际操作中需要保存所使用的标准化方法的参数,以便对后续的数据进行统一的标准化处理。
五、特征离散化——将连续型特征转换为离散型特征
特征的离散化过程是将连续型特征的取值范围划分为若干个区间段(bin),然后使用区间段代替落在该区间段的特征取值。区间段之间的分割点称为切分点,由切分点分割出来的子区间段的个数,称为元数(arity)。
特征离散化方法一般分为下面四步:
- 特征排序。 对连续型特征的取值进行升序或者降序排列,这样做可以减少离散化的运算开销;
- 切分点选择。 根据给定的评价准则,合理选择切分点,常用的评价准则基于信息增益或者基于统计量;
- 区间段分割或者合并。 基于选择好的切分点,对现有的区间段进行分割或者合并,得到新的区间段。在离散化的过程中,切分点集合的大小会随之变动;
- 在生成的新区间段山重复1-3步,直到满足终止条件。
【注】可以预先设定元素 k k k,作为简单的终止判断标准,也可以设定复杂的判断函数。
离散化的本质是将连续型数据分段,可以增强模型对于数据离群值的鲁棒性;离散化后特征的取值减少,可以提升模型训练的计算效率。
1 有监督离散化
利用参考数据集中的预测特征 y y y,将连续型数据进行离散化处理。
1.1 信息熵增益离散化
采用自顶向下的分裂策略,步骤如下:
- 对连续型特征进行排序;
- 把特征的每一个取值认为是候选分裂节点(切分点),计算出对应的熵,选择熵最小的取值作为正式的切分点,将原本的区间一分为二;
- 递归处理第二步中得到的两个新区间段,直到每个区间段内特征的类别一样为止;
- 合并相邻的、类的熵值为0且特征类别相同的区间段,并重新计算新区间段类的熵值;
- 重复执行第4步,直到满足终止条件。终止条件可以是限制决策树的深度,或者叶子节点的个数等。
ID3和C4.5是最常用的给予信息增益来进行特征选择分类的算法,将这两种决策树算法应用于连续型特征离散化的核心是针对单个特征构架决策树建模,然后根据决策树模型中节点分裂的阙值对特征值进行划分。
1.2 卡方离散化——ChiMerge方法
步骤:
- 将连续型特征的每个取值看作是一个单独的区间段,并对值进行排序;
- 针对每对相邻的区间段,计算卡方统计量。卡方值最小或者低于设定阙值的相邻区间段合并在一起。
卡方统计量的计算表达式为:
χ 2 = ∑ i = 1 k ∑ j = 1 C ( A i j − E i j ) 2 E i j \chi^2=\sum_{i=1}^{k}\sum_{j=1}^{C}\frac{(A_{ij}-E_{ij})^2}{E_{ij}} χ2=∑i=1k∑j=1CEij(Aij−Eij)2
其中 A i j A_{ij} Aij为第 i i i区间段内类别为 j j j的样本个数, k k k为比较的区间个数, C C C为类别个数, E i j E_{ij} Eij为 A i j A_{ij} Aij的期望频数。
- 对于新的区间段,递归进行第1、2两步,直到满足终止条件。
ChiMerge离散化在每次迭代的过程中只能合并两个区间,如果数据集中样本量较大,算法的开销就会比较大。
1.3 CAIM离散化——类别属性相互依赖最大化
一种基于熵的特征离散化方法,自顶向下。选择切分点 p p p,把特征的取值空间划分为 f ≤ p f \le p f≤p和 f ≥ p f \ge p f≥p两个子区间段。
CAIM最终生成的离散化区间个数往往与样本的类别个数接近。
评价离散化的好坏:
C A I M = 1 N ∑ j = 1 k M j 2 n ⋅ j CAIM=\frac{1}{N}\sum_{j=1}^{k} \frac{M_{j}^{2}}{n_{·j}} CAIM=N1∑j=1kn⋅jMj2
其中 M j = M_j= Mj=max{ n 1 j , n 2 j , . . . , n C j n_{1j}, n_{2j}, ... , n_{Cj} n1j,n2j,...,nCj}. CAIM取值区间为 ( 0 , 1 ] (0,1] (0,1],值越大说明类和离散区间的相互依赖程度越大,也说明当前离散化效果较好。
步骤:
- 对进行离散化的特征进行升序排列,确定取值区间的最小值 d 0 d_0 d0和最大值 d k d_k dk,初始化划分策略 D = D= D={ [ d 0 , d k ] [d_0,d_k] [d0,dk]};
- 把区间内的每个值当作候选切分点,计算把区间二分后的CAIM值,并选取CAIM值最高的点作为切分点,并更新 D D D;
- 对于 D D D中的每个区间段,重复第2步的计算,直到满足终止条件。
2 无监督离散化
2.1 等距离散化
通过特征的最大值和最小值计算区间段的宽度,每个区间段等宽。对输入的数据质量要求高,无法解决特征存在离群值的问题。
ω = f m a x − f m i n k \omega=\frac{f_{max}-f_{min}}{k} ω=kfmax−fmin
2.2 等频离散化
要求离散化后的每个区间内样本数量相等。对离群值较敏感;等频离散化有时会将同样或接近的样本划分入不同的区间,容易使得相邻区间段内的数据具有相似的特征。
2.3 基于聚类的离散化
需要事先确定簇的个数以及描述样本之间的距离计算方式,主要包括以下三个步骤:
- 对于需要离散化的连续型特征,采用聚类算法把样本依据该特征的分布划分成相应的簇或类;
- 在聚类结果的基础上,基于特定的策略决定是否进一步分裂(自顶向下的策略)或者合并(自底向上的策略);
- 在最终确定划分的簇之后,确定切分点以及区间个数。
六、离群值检测
1 基于统计的方法——拉依达准则(Pauta criterion)
主要针对测量次数较多的情况,假定数据集服从正态分布,计算数据集的标准差,在给定置信度的情况下,如果有**超过均值三倍标准差以上,**我们认为含有该误差的样本即为离群值。
如果测量次数非常少,拉依达准则将失效,Z-score标准化可以用来辅助识别离群值。
x Z − s c o r e = x − μ σ x_{Z-score}=\frac{x-\mu}{\sigma} xZ−score=σx−μ
通常将满足条件 ∣ x Z − s c o r e ∣ > 3 |x_{Z-score}|>3 ∣xZ−score∣>3的样本认为是离群值。
2 基于近邻的方法
2.1 K近邻
直观的看,如果一个样本是离群值,那么它离其他样本的距离就会比较远,由此引出了基于K近邻算法的离群值检测方法。该方法简单有效,比较常用,但是它只能发现全局的离群值,无法发现局部离群值。如下图,K近邻算法能够检测出全局异常值 x 1 x_1 x1,但无法检测出局部异常值 x 2 x_2 x2。
2.2 局部离群因子算法(Local Outlier Factor,LOF)
符号说明:
符号 |
|
---|---|
d ( x 1 , x 2 ) d(x_1,x_2) d(x1,x2) | 样本 x 1 , x 2 x_1,x_2 x1,x2之间的距离 |
d k ( x ) d_k(x) dk(x) | 样本 x x x到其第 k k k个近邻样本的距离 |
N k ( x ) N_k(x) Nk(x) | 样本 x x x的 k k k个近邻样本集合 |
r d k ( x 1 , x 2 ) rd_k(x_1,x_2) rdk(x1,x2) | 指样本 x ‘ x_` x‘到样本 x 2 x_2 x2的可达距离, r d k ( x 1 , x 2 ) = rd_k(x_1,x_2)= rdk(x1,x2)=max{ d k ( x 2 ) , d k ( x 1 , x 2 ) d_k(x_2),d_k(x_1,x_2) dk(x2),dk(x1,x2)} |
l r d k ( x ) lrd_k(x) lrdk(x) | 样本的局部可达密度, l r d k ( x ) = ( 1 k ∑ y ∈ N k ( x ) r d k ( x , y ) ) − 1 lrd_k(x)=(\frac{1}{k} \sum_{y\in N_k(x)}rd_k(x,y))^{-1} lrdk(x)=(k1∑y∈Nk(x)rdk(x,y))−1 |
l o f k ( x ) lof_k(x) lofk(x) | 样本的局部离群因子, l o f k ( x ) = 1 k ∑ y ∈ N k ( x ) l r d k ( y ) l r d k ( x ) lof_k(x)=\frac{1}{k}\sum_{y\in N_k(x)}\frac{lrd_k(y)}{lrd_k(x)} lofk(x)=k1∑y∈Nk(x)lrdk(x)lrdk(y) |
计算出数据集中每个样本的局部离群因子后,根据以下规则对样本是否离群做判断:
- l o f k ( x ) ≈ 1 lof_k(x)\approx1 lofk(x)≈1,代表样本 x x x与其近邻样本的局部可达密度相似,可以认为是正常样本;
- l o f k ( x ) < 1 lof_k(x)<1 lofk(x)<1,正常样本;
- l o f k ( x ) > 1 lof_k(x)>1 lofk(x)>1,可能为离群值。
无论是K近邻算法还是LOF算法,当样本数据量很大而且维度较大时,这两种方法的计算代价都很大。
当从数据集中发现离群值后,不能简单地认定是噪音而删除,需要考察离群值存在的合理性以及产生的原因,进而调整现有模型,提高模型的解释能力。如果在预处理阶段就将离群值过滤,则可能导致数据分析失败。
其他预处理方法
在一些问题中,需要先对数据进行中心化转换,即令数据集中特征的均值为0,部分降维算法如主成分分析法在运行前就需要先对数据进行中心化转换。除此之外,很多模型都假设特征服从正态分布,如果实际的特征不服从,就需要对其进行转换,例如对呈现”右偏“特点的特征进行对数转换可以使其近似服从正态分布。