数据预处理

2020-03-22  本文已影响0人  SummerTan

数据预处理包括数据清洗、无量纲化、特征分桶、统计变换和特征编码等步骤,

数据清洗

无量纲化

说明

一般而言,原始的训练数据中,每一维特征的来源以及度量单位不同,会造成特征的分布范围往往差异很大。当计算不同样本之间的距离时,取值范围大的特征会起到主导作用。对于基于相似度比较的机器学习方法(如最近邻分类器),必须先对样本进行预处理,将各维度特征归一化到同一取值区间,并且消除不同特征之间的相关性,才能获得理想的结果。

我们的数据一般都是有单位的,比如身高的单位有m,cm,这个无量纲化并不是说把m变成cm,而是说,无论是m还是cm,最后都会变成1,也就是没有了单位。

无量纲化使不同规格的数据转换到同一规格。常见的无量纲化方法有标准化和归一化。

数据标准化的原因:

归一化方法 缩放范围&公式 说明
标准归一化StandardScaler 无范围 适合于正态分布数据
最大最小归一化MinMaxScaler [0,1] 缩放稀疏数据,对异常值敏感
MaxAbs归一化 [-1,1] 缩放稀疏数据,对异常值敏感
RobustScaler分位数归一化 无范围 缩放带有outlier的数据

适用场景

一般来说,建议优先使用标准化。对于输出有要求时再尝试别的方法,如归一化或者更加复杂的方法。很多方法都可以将输出范围调整到[0, 1],如果我们对于数据的分布有假设的话,更加有效的方法是使用相对应的概率密度函数来转换。

标准归一化StandardScaler

标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。

公式为:

优点:

Z-Score最大的优点就是简单,容易计算,Z-Score能够应用于数值型的数据,并且不受数据量级的影响,因为它本身的作用就是消除量级给分析带来的不便。

缺点:

最大最小归一化MinMaxScaler

区间缩放法利用了边界值信息,将属性缩放到[0,1]。公式为:

缺点:

MaxAbs归一化

单独地缩放和转换每个特征,使得训练集中的每个特征的最大绝对值将为1.0,将属性缩放到[-1,1]。它不会移动/居中数据,因此不会破坏任何稀疏性。

公式为:

缺点:

RobustScaler分位数归一化

公式为:(x-中位数)/四分位距

规范化(正则化)

正则化的过程是将每个样本缩放到单位范数,如果要使用二次型(点积)或者其他核方法计算两个样本之间的相似性会非常有用。

离散化(分箱)

离散化是数值型特征非常重要的一个处理,其实就是要将数值型数据转化成类别型数据。连续值的取值空间可能是无穷的,为了便于表示和在模型中处理,需要对连续值特征进行离散化处理。

分箱的重要性及其优势:

1.无监督分箱法

1)自定义分箱

自定义分箱,是指根据业务经验或者常识等自行设定划分的区间,然后将原始数据归类到各个区间中。

2)等距分箱

定义:按照相同宽度将数据分成几等份。

从最小值到最大值之间,均分为 N 等份, 这样, 如果 A,B 为最小最大值, 则每个区间的长度为 W=(B−A)/N , 则区间边界值为A+W,A+2W,….A+(N−1)W 。这里只考虑边界,每个等份里面的实例数量可能不等。

缺点:受异常值影响大

3)等频分箱

定义:将数据分成几等份,每等份数据里面的个数是一样的。

区间的边界值要经过选择,使得每个区间包含大致相等的实例数量。比如说 N=10 ,每个区间应该包含大约10%的实例。

4)聚类分箱

定义

基于k均值聚类的分箱:k均值聚类法将观测值聚为k类,但在聚类过程中需要保证分箱的有序性:第一个分箱中所有观测值都要小于第二个分箱中的观测值,第二个分箱中所有观测值都要小于第三个分箱中的观测值,等等。

实现步骤
实现代码

from sklearn.cluster import KMeans
kmodel=KMeans(n_clusters=k)  #k为聚成几类
kmodel.fit(data.reshape(len(data),1))) #训练模型
c=pd.DataFrame(kmodel.cluster_centers_) #求聚类中心
c=c.sort_values(by=’列索引') #排序  
w=pd.rolling_mean(c,2).iloc[1:] #用滑动窗口求均值的方法求相邻两项求中点,作为边界点
w=[0] +list(w[0] + [ data.max() ]  #把首末边界点加上
d3= pd.cut(data,w,labels=range(k)) #cut函数</pre>

5)二值化(Binarization)

定义

二值化可以将数值型(numerical)的feature进行阀值化得到boolean型数据。这对于下游的概率估计来说可能很有用(比如:数据分布为Bernoulli分布时)。

公式

定量特征二值化的核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0,

2.有监督分箱法

1)卡方分箱法

定义

自底向上的(即基于合并的)数据离散化方法。它依赖于卡方检验:具有最小卡方值的相邻区间合并在一起,直到满足确定的停止准则。

基本思想

对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开。而低卡方值表明它们具有相似的类分布。

实现步骤

Aij:第i区间第j类的实例的数量;Eij:Aij的期望频率(=(Ni*Cj)/N),N是总样本数,Ni是第i组的样本数,Cj是第j类样本在全体中的比例;

阈值的意义

类别和属性独立时,有90%的可能性,计算得到的卡方值会小于4.6。大于阈值4.6的卡方值就说明属性和类不是相互独立的,不能合并。如果阈值选的大,区间合并就会进行很多次,离散后的区间数量少、区间大。

注意
实现代码

https://github.com/tatsumiw/ChiMerge/blob/master/ChiMerge.py

2)最小熵法分箱

需要使总熵值达到最小,也就是使分箱能够最大限度地区分因变量的各类别。

熵是信息论中数据无序程度的度量标准,提出信息熵的基本目的是找出某种符号系统的信息量和冗余度之间的关系,以便能用最小的成本和消耗来实现最高效率的数据存储、管理和传递。 数据集的熵越低,说明数据之间的差异越小,最小熵划分就是为了使每箱中的数据具有最好的相似性。给定箱的个数,如果考虑所有可能的分箱情况,最小熵方法得到的箱应该是具有最小熵的分箱。

总结

  1. 特征预处理是数据预处理过程的重要步骤,是对数据的一个的标准的处理,几乎所有的数据处理过程都会涉及该步骤。

  2. 我们对特征进行分箱后,需要对分箱后的每组(箱)进行woe编码和IV值的计算,通过IV值进行变量筛选后,然后才能放进模型训练。

  3. 分箱后需要进行特征编码,如:

    LabelEncode、OneHotEncode或LabelBinarizer等。

链接

https://mp.weixin.qq.com/s/qWO9zgKyntvyWfftpGqrHQ

上一篇 下一篇

猜你喜欢

热点阅读