前言
本文针对数据预处理中的部分常见方法的数学原理进行讲解,将不涉及或很少涉及代码实现或应用,阅读前请确保已了解基本的机器学习相关知识。
本文章主要对于数据预处理中常见且常用的基础方法进行说明和介绍,各种方法集中在一篇文章比较冗余,因此决定分两篇文章来写。此外由于方法多样,本篇文章知识点可能分布地较为零散。
在机器学习中无论是数据预处理还是其它方法,这些都是基于不同情况的,或许你经常可以看到各种方法的使用都要基于当前情况考虑,这也导致很多时候没有经验的话会无从下手,本篇文章会尽量多举出一些案例来进行说明。
文章概述
数据预处理是从数据中检测,纠正或删除损坏,不准确或不适用于模型的记录的过程,可能面对的问题有许多:
- 数据类型不同:不同特征中有的是文字,有的是数字,有的是时间序列,有的是数值型变量,有的是离散型变量
- 数据的质量不行:有噪声,有异常值,有缺失值,有错误数据,数据的量纲不一,有重复,数据偏态,数据量太大或太小
数据预处理的目的:让数据适应模型,匹配模型的需求
本文将介绍一些常用的数据预处理方法的数学原理,这些方法包括:
- 数据归一化(Normalization):Min-Max Scaling(极差归一化)
- 数据标准化(Standardization):Z-score Normalization(Z-score标准化)
- 缺失值处理:0填充、均值填充、众数填充、中位数填充
- 编码与哑变量:离散型特征处理、One-Hot-Encoding(独热编码)
- 连续型特征处理:数据二值化(Binarization)、数据分段/分箱(Binning)
数据无量纲化
在数据处理时,我们往往有着将不同规格的数据转换到同一规格、不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据的 “无量纲化”。
例如以梯度和矩阵为核心的模型(逻辑回归,支持向量机,全连接神经网络等),无量纲化可以加快模型的求解速度;对于距离类模型(KNN、KMeans),无量纲化可以帮助提升模型精度,避免某一个取值范围特别大的特征对距离计算造成影响。
特例:决策树和以决策树为基础的集成算法,对于这些模型我们不需要进行数据无量纲化处理。
- 因为决策树处理连续型变量时是以设置分裂点来处理的,依靠的是数据的分布,而不是数据中心的确切数值
数据的无量纲化可以是线性的,也可以是非线性的。线性的无量纲化方法包括中心化处理(Zero-centered / Mean subtraction)和缩放处理(Scale)。中心化的本质是让所有记录减去一个固定值,即让数据样本数据平移到某个位置。缩放的本质则是通过除以一个固定值,将数据固定在某个范围之中。
非线性的无量纲方法包括对数转换(原来的数据取对数)、指数转换(例如平方根转换)等,这里我们主要介绍线性的无量纲化方法。
数据归一化:Min-Max Scaling
Min-Max Scaling 的原理
当数据按照最小值中心化后,再按极差(最大值 – 最小值)进行缩放,数据移动了最小值个单位,并且会被收敛到 [0,1][0,1] 之间。这个过程,就叫做数据归一化(Normalization,又称Min-Max Scaling)。公式如下:
xi∗=xi−min(x)max(x)−min(x)x_i^* = frac{x_i-min(x)}{max(x)-min(x)}
- xx:某特征下的所有数据
- xix_i:某特征下的第 ii 条数据
例:某特征下的数据为 [2,5,8,10,20][2, 5, 8, 10, 20],则有:
[2581020]→[01/61/34/91],其中2→2−220−2→0begin{bmatrix} 2 \ 5 \ 8 \ 10 \ 20 end{bmatrix} rightarrow begin{bmatrix} 0 \ 1/6 \ 1/3 \ 4/9 \ 1 end{bmatrix},其中2rightarrow frac{2-2}{20-2} rightarrow 0
逆转公式
同理,既然我们可以使用该公式来归一化数据,那我们也可以将该公式变换得到数据归一化的逆转公式:
xi=xi∗∗(max(x)−min(x))+min(x)x_i = x_i^* * (max(x)-min(x)) + min(x)
- xx:某特征下的所有数据
- xix_i:某特征下的第 ii 条数据
例:某特征下的数据为 [2,5,8,10,20][2, 5, 8, 10, 20],则有:
[01/61/34/91]→[2581020],其中0→0∗(20−2)+2=2begin{bmatrix} 0 \ 1/6 \ 1/3 \ 4/9 \ 1 end{bmatrix}rightarrow begin{bmatrix} 2 \ 5 \ 8 \ 10 \ 20 end{bmatrix},其中0rightarrow 0*(20-2)+2 = 2
缩放为任意范围
[0,1][0, 1] 是我们归一化数据最常用的区间,但我们不仅可以将数据缩放到 [0,1][0,1] 范围内,我们也可以缩放为任意区间内:
xi∗∗=[xi∗∗(b−a)]+ax_i^{**} = [x_i^* * (b-a)] + a
- xi∗x_i^*:某特征下通过 Min-Max Scaling归一化后的第 ii 条数据
- a,ba, b:规定的目标区间 [a, b]
例:某特征下的数据为 [2,5,8,10,20][2, 5, 8, 10, 20],我们想归一化到 [2,5][2, 5] 区间中,则有:
[2581020]→[01/61/34/91]→[22.5310/35],其中2→2−220−2→0→0∗(5−2)+2=2begin{bmatrix} 2 \ 5 \ 8 \ 10 \ 20 end{bmatrix} rightarrow begin{bmatrix} 0 \ 1/6 \ 1/3 \ 4/9 \ 1 end{bmatrix}rightarrowbegin{bmatrix} 2 \ 2.5 \ 3 \ 10/3 \ 5 end{bmatrix},其中2rightarrow frac{2-2}{20-2} rightarrow 0 rightarrow 0*(5-2)+2 = 2
作用和缺点
Min-Max Scaling 的作用:可以消除不同变量的单位限,统一量纲
问题一:为什么使用Min-Max Scaling转换后的数据可以在一定程度上提升模型精度?
- 例如 label 为房价,特征为占地面积和距离市中心距离,由于数据量纲不同,占地面积的取值在 [40,200](单位:m2)[40, 200](单位:m^2),而距离市中心距离的取值在 [0,1000000](单位:m)[0, 1000000] (单位:m),假设我们使用线性回归模型,占地面积和市中心距离分别为 x1,x2x_1, x_2,结果为 y=w1x1+w2x2y=w_1 x_1 + w_2 x_2,我们可能会得到 w1>>w2w_1 >> w_2,但实际上或许占地面积才是主导因素,但被分配到的权重却很小,原来我们想的是让越重要的特征被分配到的对应权重 ww 越大,但却由于数据量纲不同,使得取值范围更大的特征对应的权重更大,显然这是不可靠的。
- 使用 Min-Max Scaling 统一量纲后,消除了量纲不同对模型的影响,当然会在一定程度上影响模型性能,提高精度。
- 对于使用梯度下降优化的模型,每次迭代会找到梯度最大的方向迭代更新模型参数;若模型的特征属性量纲不一,
问题二:为什么模型使用MinMaxScaler转换后的数据训练在相同学习率下收敛速度相对更快?
这里以梯度下降为例:
- 在梯度下降过程中,如图所示为我们寻求最优解的特征空间,假设共两个特征,图中横轴为特征1对应的权重,纵轴为特征2对应的权重,圆环表示模型的损失,最内圈(绿色最小圈)为最优解,每个圆环上的点损失相等,当两特征量纲不同时,假设特征2的量纲大于特征1,则为左图,形成一个向特征2方向拉长了的椭圆,若量纲相同,则为右图,为一个正圆,刚开始我们随机初始化权重,假设在最外圈,通过梯度下降不断更新参数,逐渐达到最优解。
- 在该过程中,左图中更容易出现 “Z” 字型,而不是一直在向最优解方向前进,由于一个特征的值范围较大,而另一个特征的值范围较小,且梯度下降算法是根据目标函数的梯度来更新权重的,当一个特征的变化范围较大时,它的梯度也会相应地较大,从而导致算法更快地更新该特征权重的取值,同理另一个特征权重则相对更新地更慢,就容易出现 “Z” 字型,从而收敛速度更慢。
对于涉及距离计算的算法或模型,归一化也可以加快模型迭代,具体原因这里不再深入探讨,但要记住,归一化最大的作用就是统一量纲,在原来,许多问题都是由于量纲不统一而产生的。
Min-Max Scaling 的缺点:
- 可能会损失一些特征信息
- 例如在上面我们的案例中也可以发现,该方法改变了数据之间的比例关系,有可能数据中的比例关系含有重要特征信息
- 对异常值敏感
- 例如某数据全都在 [0,100][0, 100] 中,但有一个异常值为 100000,那 Min-Max Scaling在计算的时候就会把这个异常值 100000 作为最大值参与到计算公式中,从而导致数据归一化后都很小。
数据标准化:Z-score Normalization
相较于于以上Min-Max Scaling,一些较为相似的知识点就不再重复进行讲解了。
Z-score 标准化的原理
当数据按均值中心化后,再按标准差进行缩放,这个过程就是 Z-score 标准化,公式如下:
xi∗=xi−μσx_i^* = frac{x_i – mu}{sigma}
- xix_i:某特征下的第 ii 条数据
- μmu:某特征下所有数据的均值
- σsigma:某特征下所有数据的标准差
例:某特征下的数据为 [2,5,8,10,20][2, 5, 8, 10, 20],则有:
[2581020]→[−1.141−0.652−0.1630.1631.794],其中2→2−91885≈−1.141begin{bmatrix} 2 \ 5 \ 8 \ 10 \ 20 end{bmatrix} rightarrow begin{bmatrix} -1.141 \ -0.652 \ -0.163 \ 0.163 \ 1.794 end{bmatrix},其中2rightarrow frac{2-9}{sqrt{frac{188}{5}}} approx -1.141
同理,我们也可以根据标准化公式来推导其逆转公式:
xi=xi∗∗σ+μx_i = x_i^* * sigma + mu
通过逆转公式我们可以把使用Z-score标准化后的数据复原
注意:”经过Z-score标准化的数据服从为均值为 0,方差为 1 的正态分布(即标准正态分布)”这句话是不对的,Z-score标准化只是将某组数据的均值和方差分别变换为0和1,但均值为0方差为1的数据不一定就服从标准正态分布。
分析Z-score标准化的公式来看:
- 每条数据减去该组数据的均值:让该组数据以0为中心,也就是一半数据小于0,一半数据大于0。
- 例如小明的数学考了135分,语文考了130分,那么小明的数学和语文哪个好?在这里小明就是某样本,数学和语文的分数分别是两个特征,显然我们无法仅看分数来进行比较,如果不减去均值,那我们就会以数学和语文的取值范围相同,且数学比语文分数高为理由认为数学比语文成绩好,但事实是我们需要相对其它学生都考多少分来比较,如果数学人均150,语文人均30分,这样判断毫无疑问就是错误的,但是如果减去均值,我们可以得到小明的数学:(135-150=-15,而小明的语文:(130-30=100),这样就能相对于总体学生的分数来进行比较。
- 除以标准差:标准差表示的是各样本与样本均值之间的差异,让样本都除以这种差异以削弱这种差异带来的影响。
- 仅仅减去均值还是不够的,还要考虑另一方面 —- 方差,例如小明数学和语文都考了100,这两科的均值也是100,那哪一科更好呢?这时候我们就要考虑数据的稳定性了,假如说数学成绩的方差很大,语文很小,那就说明数学成绩不稳定,语文成绩很稳定,一定程度上语文成绩能更能反映出学生的语文真实水平,我们就认为语文比数学更好。
- 例:一个学生最近4的数学成绩(满分150)分别为 [110, 90, 130, 70],语文成绩分别为 [100, 100, 100, 100],语文成绩波动更小,综合这四次来看,语文和数学的均值都一样,但是语文的波动更小,更稳定,因此我们认为这个学生的语文更好。
Z-score标准化正是消除了特征之间的某种差异,可以将数据放到其”原本的位置”上,使得最终各特征数据的表达更为精确,此外也可以在一定程度上统一不同特征的取值范围(但不像是数据归一化那样使得各特征范围相同)。
作用和缺点
Z-score 标准化的作用:
- 可以消除不同变量的单位限制,在一定程度上统一量纲,且能使得各数据表达更为准确
缺点:
- 可能会损失一些特征信息
- 例如方差、相关性等,方差可以反应该特征数据的分散程度,原本的数据在经过Z-score标准化后标准差为1,也就是方差为1。
- 容易收到异常值影响
- 计算公式中含有均值和方差,方差和均值的计算容易收到异常值的影响
方法选择
大多数机器学习算法中,会选择 Z-score 标准化来进行特征缩放,因为Min-Max Scaling 方法相对对异常值或异常值更加敏感。在PCA,KMeans聚类,逻辑回归,支持向量机,神经网络等这些算法中,Z-score 标准化往往是最好的选择。
Min-Max Scaling 在不涉及距离度量、梯度、协方差计算且数据需要被压缩到特定区间时使用广泛,比如数字图像处理中量化像素强度时,都会使用 Min-Max Scaling 将数据压缩于[0,1][0,1] 区间之中。
缺失值处理
机器学习和数据挖掘中所使用的数据,永远不可能是完美的。在收集数据时常常会存在重要的特征缺失值很多,但又不能舍弃该特征的情况。因此,数据预处理中非常重要的一项就是处理缺失值。
对于本文主要介绍的0填充、均值填充、中位数填充、众数填充,这些都是最简单最基本的填充方案,简单高效和实用就是最大的优点,因此我们着重介绍这些填充方案的缺点。
0填充
0填充:常用于连续型数值数据和离散型分类数据,使用数值0填充缺失值。
- 优点:简单高效,保持数据分布形态
- 缺点:当特征的取值不以 0 为中心时,会使数据偏移;可能会缩放数据的范围
特征取值分布以 nn 为中心:通常是指该特征的均值、中位数或者期望在 nn 附近。
若为稀疏数据(取值绝大多数都是 0),可以使用 0 填充。
某些特征的取值分布以 0 为中心,这时 0 可以代表特征的中心趋势,使用 0 填充不会造成太大的偏差,但当取值分布不以 0 为中心时,则可能会扭曲数据原本的中心趋势。
假如一组数据的范围为 [10,100][10, 100],使用 0 填充后就会变为 [0,100][0, 100],对于在我们上面介绍的Min-Max Scaling归一化方法中,计算公式中含有 min(x)min(x),也就是这组数据的最小值,结果就会产生较大的影响,对于这些方法则应该在 0 填充之前使用。
均值填充
均值填充:常用于连续型数值数据,一般适用于数据整体极值差异不大时,取这组数据的平均值来填充缺失值
- 优点:简单高效,均值为该组数据的中心趋势,且能保持数据原来的分布
- 缺点:减小了这组数据的方差
缩小方差的弊端:方差反应某组数据的差异,这种差异越大,变量之间的区分度越高,一定程度上这个特征越有用。
- 例:房价与占地面积相关,但当所有的样本的占地面积都相同时(方差为0),尽管这个特征本身很重要,但对模型训练提供不了任何有用的信息。
中位数填充
中位数填充:常用于连续型数值数据,一般适用于数据整体极值差异较大时,使用某组数据的中位数对该组数据的缺失值进行填充
- 优点:中位数代表数据的中心趋势,对异常值鲁棒性相对较高,保持数据布形态
- 缺点:减小了这组数据的方差
中位数填充和均值填充类似,因为中位数和均值都能在一定程度上反应该组数据的中心趋势,但均值相对中位数更容易计算(中位数需要排序),但是均值则容易收到异常值影响,由于中位数是根据取所有数据对应的秩次来选择位于中间的数据,因此对异常值相对更不敏感,更具有鲁棒性。
众数填充
众数填充:常用于连续型数据和离散型分类数据,一般适用于名义变量的填充,使用某组数据的众数对该组数据的缺失值进行填充
名义变量:如 性别(0:男,1:女),样本数据无大小、顺序之分,不能加减乘除,下面会详细介绍。
- 优点:简单高效,对没有明确中心趋势的分布也适用。
- 缺点:数据不均衡时可能会存在偏差。
填充方法总结
这几种填充方案都相对简单高效,且能保持数据分布形态,但也分别适用于不同的情况:
数据分布 | 填充方案 | 说明 |
---|---|---|
近正态分布 | 均值填充 | 样本数据聚集在均值周围 |
偏态分布 | 中位数填充 | 大部分数据聚集在分布的一侧 |
存在离群值 | 中位数填充 | 中位数填充鲁棒性高 |
名义变量 | 众数填充 | 样本数据无大小、顺序之分,不能加减乘除 |
使用固定值(如 0)进行填充的部分常见情况:
- 当样本量非常小时,计算均值、中位数等统计量不太稳定和准确,这时可以用固定值填充。
- 数据分布严重扭曲时,如果使用统计量填充可能会导致数据分布异常,这时可以用定值填充。
- 一些情况下,可以先用简单的固定值填充,之后再替换为更合适的统计值
这几种填充方案的缺点:
- 不适合缺失值数量较多的情况,当缺失比例较大时,填充误差会积累,对结果产生较大影响
- 整体对异常值和噪声数据鲁棒性较差
- 填入的值都是相同的,且利用单个特征信息,而未利用其他特征的信息,会在一定程度上损失特征之间的相关性
损失特征之间的相关性:使用依赖单个特征的填充方案,可能会破坏特征间原有的相关配对和依赖关系。比如特征 A 和 B 正相关,但用各自的均值对缺失值进行填充后,这种相关性就减弱了。
这几种填充方案简单高效且非常常用,但简单的背后也存在着许多缺陷,当然对于数据填充的方案显然也不局限于这几种,其它还有建模预测等统计学填补方法,本文不对其它的这些方法进行详细说明。
编码与哑变量
在机器学习中,大多数算法,例如逻辑回归,支持向量机SVM,K近邻算法等都只能够处理数值型数据,不能处理字符串,然而在日常中,许多标签和特征在数据收集完毕的时候,都不是以数字来表现的。例如学历的取值可以是 [“小学”,”初中”,”高中”,”大学”]等。在这种情况下,为了让数据适应算法和库,我们必须将数据进行编码,即将字符串数据转为数值型。
离散型特征处理
在对字符串类型的离散型特征处理时,我们一般将其转换从0开始的整数,例如对于某数据下的学历特征:
−−−−−−−学历学历−−−−−−−[小学初中小学大学高中⋮]→[01032⋮],其中{小学→0初中→1高中→2大学→3——- qquad qquad qquad qquad\
学历 qquad 学历 qquad qquad qquad qquad \——- qquad qquad qquad qquad\
begin{bmatrix} 小学 \ 初中 \ 小学 \ 大学 \ 高中 \vdotsend{bmatrix} rightarrow begin{bmatrix} 0 \ 1 \ 0 \ 3 \ 2 \ vdots end{bmatrix},其中 begin{cases} 小学rightarrow 0 \ 初中 rightarrow 1 \ 高中 rightarrow 2 \ 大学 rightarrow 3 end{cases}
但是并不是对于任何字符串类型的离散特征都适合这种方式来处理,对于名义变量,我们一般使用这种处理方法。
数据类型以及常用统计量
数据类型 | 数据名称 | 数学含义 | 说明 | 举例 | 可用操作 |
---|---|---|---|---|---|
离散,定性 | 名义变量 | =,≠=, ne | 名义变量就是不同的名字,告诉我们这些数据是否相同 | 性别、邮编 | 众数、信息熵、相关性分析、卡方检验、情形分析表或列联表 |
离散,定性 | 有序变量 | <,><, > | 数据有顺序,但大小间隔不具有固定意义,不能想加减 | 学历 | 中位数、分位数、等级相关分析、测量系统分析、符号检验 |
连续,定量 | 有距变量 | +,−+, – | 数据的间隔是有固定意义的,可以相加减 | 日期 | 均值、标准差、皮尔逊相关系数、T/F检验 |
连续,定量 | 比率变量 | ×,÷times, div | 变量之间的间隔和比例都是有意义的,可以加减乘除 | 货币、年龄、长度 | 几何平均、调和平均、百分数、变化量 |
- 性别(”男”,”女”):这两种取值相互独立,彼此之间完全没有联系,且非此即彼,这是名义变量
- 学历(”小学”,”初中”,”高中”):三种取值不是完全独立的,我们可以明显看出,在性质上可以有 高中 > 初中 > 小学 这样的联系,学历有高低,但是学历取值之间却不是可以计算的,我们不能说小学 + 某个取值 = 初中。这是有序变量
- 温度(10°,20°,30°):是量化的,可以加减计算的。变量之间可以通过数学计算互相转换。这是有距变量
- 钱(1¥,10¥,100¥):1块钱的意义和10块钱的意义肯定是不一样的,10块钱的购买力相当于1块钱购买力的十倍,变量之间间隔和比例本身都是有意义的,同时也可以加减乘除。这是比率变量
对于有距变量和比率变量的区分:
- 有距变量:例如以温度计量出的 “温度”、以考试决定的 “成绩”、以智力测验测得的 “智商”等。等距尺度的一个重要特性,是其单位只有相对的零点,而无绝对的零点。相对零点的使用,使得数值与数值的比值,仅具有数学的意义,而缺乏实务意义。使用相对的零点,当测量值为零时,并无一个绝对的意义,并非指未具任何所测变量的属性,如气温为0时,并非无温度,而是指就该测量工具而言,得到零个单位的意思,它仍具有所测变量的某种属性。某科考试0分,并非指学生在该科能力上毫无能力,而是指得到0个单位的分数。
- 比率变量:当一个测量尺度使用了某个标准化的单位,同时又具有一个绝对零点,称为比率尺度(ratio scale)。比率层次的测量,可以说是具有真正零点的等距尺度。如身高(公分)、体重(公斤)、工资(元)、年龄(岁)、住院日数、受教育年数等等变量,都是以比率尺度来测量得到的比率变量,测量尺度不但具有单位,单位的使用有一公共认同的标准与意义,与主观判断无关,无需以人为方式调整改变,而有一定的绝对零点。
在对特征进行编码的时候,[0, 1, 2]这三个数字在算法看来是连续且可以计算的,这三个数字相互不等,有大小,并且有着可以相加相乘的联系。
若这三种分类的数据都会被我们转换为 [0, 1, 2] 这种数值型数据,算法会把性别这样的名义变量,都解读为学历、体重这样的变量。也就是说,我们把分类转换成数字的时候,忽略了数字中自带的数学性质,所以给算法传达了一些不准确的信息,而这会影响我们的建模。
考虑到数字本身所含有的意义,上述我们将分类变量转为整数的方法可以用来处理除了名义变量以外的其它变量,而对于名义变量,我们则一般使用哑变量的方法来处理,这样我们才能够尽量向算法传达最准确的信息。
对于连续定量的有距变量或比率变量也可以转化为分类变量,例如体重可以转化为(>45kg,>75kg, >135kg)
One-hot encoding 独热编码
独热编码就是来处理我们上面所说的名义变量的,例如对于某数据下的性别特征处理方式如下:
−−−−−−−−性别男女−−−−−−−−[男女女男女⋮]→[1001011001⋮⋮]——–\
性别 quad quad男 qquad 女 \
——–\
begin{bmatrix} 男 \ 女 \ 女 \ 男 \ 女 \ vdots end{bmatrix} rightarrow begin{bmatrix} 1 & & 0\ 0 & & 1 \ 0 & & 1 \ 1 & & 0 \ 0 & & 1 \ vdots & & vdots end{bmatrix}
对于特征性别中的 “男”、”女” 拿出来分别作为两个特征,其中例如对于特征”男”,若该样本性别为男,则为1,若不是,则为0,对于特征”女”则同理,可以看到对于这种名义变量在经过独热编码处理后这些特征之间是线性无关的,转变后的变量被称为哑变量。
哑变量:哑变量不能独立存在,必须与其他变量一起使用,否则没有意义
单个哑变量无法表达语义信息,像 “哑巴” 一样,因此被称为哑变量
哑变量不能独立存在:例如对于性别,我们将性别经过独热编码处理后得到上述公式块中的男和女两个特征,从常识上我们就可以发现,这两个哑变量的值是完全依赖的。如果男=1,我们就可以确定女一定为0,反之亦然。
按我们的常识来讲,我们直觉上会觉得如果为男性,则一定不是女性,但是对于模型来讲,它可不知道男和女这两个特征是这样非此即彼的关系,因此对于模型训练,男和女这两个哑变量必须同时存在才有意义。
连续型特征处理
数据二值化和分箱都是常见的连续型特征离散化方法,通过设定阈值或其它方法对连续型数据进行分类处理。
数据二值化
数据二值化:根据设定的阈值将数据二值化(将特征值设置为 0 或 1),用于处理连续型变量;大于阈值的值映射为 1,而小于或等于阈值的值映射为 0。
例:某特征存在数据 [1,3,5,7,9][1,3,5,7,9],我们设定阈值为 5 对该组数据进行二值化:
[13579]→[00011]begin{bmatrix} 1 \ 3 \ 5 \ 7 \ 9 end{bmatrix} rightarrow begin{bmatrix} 0 \ 0 \ 0 \ 1 \ 1 end{bmatrix}
数据二值化相当于对原来的连续型数据从中 “一刀切开” 分为两半,将连续数值型数据转为离散的分类型数据;同时其通过离散化简化了数据表达,但也因此损失相应的信息,需要权衡使用。
二值化是对文本计数数据的常见操作,在大多时候分析人员用于考虑某种现象的存在与否。它也可以用作考虑布尔随机变量的模型的预处理步骤(例如使用贝叶斯设置中的伯努利分布建模)
数据分箱
数据分箱:将连续型变量分成几段,每段代表一个类别。如年龄可以划分为青年、中年、老年,收入可以分为贫困、小康、中产等。
对于数据分段的方式,常见的有三种方法,分别为等宽分箱、等位分箱、聚类分箱。
等宽分箱:每个箱中的数据宽度相同。特征中每箱(段)数据的极差不能超过为数据宽度 XX,分箱的数据宽度我们用以下公式来计算:
X=max(x)−min(x)NbinsX = frac{max(x) – min(x)}{N_{bins}}
- xx:为某特征下的数据
- NbinsN_{bins}:为分箱个数
例:使用等宽方法将数据组分为 3 个箱:[5,10,11,13,15,35,50,55,72,92,204,215][5,10,11,13,15,35,50,55,72,92,204,215]
- 数据宽度 =215−53=70= frac{215-5}{3}=70
- 分箱结果:(xx 为数据本身)
- 箱一(5<x≤755<xle 75):[5,10,11,13,15,35,50,55,72][5,10,11,13,15,35,50,55,72]
- 箱二(75<x≤14575<xle 145):[92][92]
- 箱三(145<x≤215145<xle 215):[204,215][204,215]
等位分箱:每个特征中的每个箱内的样本数量都相同
例:使用等位方法将数据组分为 3 个箱:[5,10,11,13,15,35,50,55,72,92,204][5,10,11,13,15,35,50,55,72,92,204]
- 共 11 个样本,则每个箱中的样本数量为 11/3≈3.6711 / 3 approx 3.67,共分三箱,则第一个分位点为 3.673.67,第二个分位点为 7.337.33,对结果四舍五入,则两个分位点分别为 44 和 77
- 分箱结果:(xx 为数据对应的索引编号)
- 箱一(0≤x<40le x<4):[5,10,11,13][5,10,11,13]
- 箱二(4≤x<74le x<7):[15,35,50][15,35,50]
- 箱三(7≤x<117le x< 11):[55,72,92,204][55,72,92,204]
聚类分箱:基于无监督KMeans聚类算法衍生而来的分箱方法,每个箱中的值到最近的一维k均值聚类的簇心的距离都相同
分箱过程和KMeans聚类完全一样,这里就不再重复介绍了;将数据分为 xx 箱,也就意味着设置 xx 个簇进行聚类。
三种分箱方法横向对比,等位分箱较均衡,等宽分箱简单直接,聚类分箱能反映数据本身聚集特性,在使用时,也应该根据具体情况选择对应方法,针对一些使用情况举例:
- 若特征分布比较均匀,没有明显聚集趋势,可以选择等宽分箱;它计算简单,可以快速分箱处理数据。
- 若特征分布非常不均衡,有明显的倾斜,这时可以用等位分箱;它可以将样本均匀分到各箱,防止数据偏斜。
- 若特征存在自然的聚集结构,例如学生成绩(优、良、差),可以考虑用聚类分箱,根据聚类结果分箱。
- 若需要重点关注某些取值范围,可以手动设置分箱边界,调整各区间样本量。
- 若分箱主要用于数据探索,理解分布,等距和等位分箱更简单直接。
数据分箱的作用(包括但不限于):
- 分箱(离散化)后的特征对异常数据有很强的鲁棒性,且可以将缺失值作为独立的特征带入模型
- 简化数据复杂性,同时会丢掉数据本身的部分信息,因此减少数据的随机噪声,降低过拟合,且利于加速模型迭代
- 优化机器学习模型的预测性能,如Naive Bayes和决策树。
Reference
- 深度学习每日一问:为什么要对数据归一化(数据预处理)_深度学习为什么要归一化_rope_的博客-CSDN博客
- 数据处理之缺失值填充_df空缺值填平均_PyQuant的博客-CSDN博客
- 一题搞定等宽分箱_等宽分箱法怎么分组_墨菲墨菲的博客-CSDN博客
- 菜菜的sklearn机器学习教程
- 相关网络资源和书籍