标准化
2021-9-2
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

z-score标准化

这是最常见的特征预处理方式,基本所有的线性模型在拟合的时候都会做 z-score标准化。具体的方法是求出样本特征 的均值mean和标准差std,然后用(x-mean)/std来代替原特征。这样特征就变成了均值为0,方差为1了。在sklearn中,可以用StandardScaler来做z-score标准化。当然,如果用pandas做数据预处理,可以自己在数据框里面减去均值,再除以方差做z-score标准化

max-min标准化

也称为离差标准化,预处理后使特征值映射到[0,1]之间。具体的方法是求出样本特征 的最大值max和最小值min,然后用(x-min)/(max-min)来代替原特征。如果希望将数据映射到任意一个区间[a,b],而不是[0,1],那么也很简单。用(x-min)(b-a)/(max-min)+a来代替原特征即可。在sklearn中,可以用MinMaxScaler来做max-min标准化。
这种方法的问题就是如果测试集或者预测数据里的特征有小于min,或者大于max的数据,会导致max和min发生变化,需要重新计算。所以实际算法中, 除非对特征的取值区间有需求,否则max-min标准化没有 z-score标准化好用。
 

L1/L2范数标准化

如果只是为了统一量纲,那么通过L2范数整体标准化也是可以的,具体方法是求出每个样本特征向量 的L2范数,然后用 代替原样本特征即可。当然L1范数标准化也是可以的,即用 代替原样本特征。通常情况下,范数标准化首选L2范数标准化。在sklearn中,可以用Normalizer来做L1/L2范数标准化
 

中心化

主要是在PCA降维的时候,求出特征x的平均值mean后,用x-mean代替原特征,也就是特征的均值变成了0,但是方差并不改变,因为PCA就是依赖方差来降维的。
 

MaxAbsScaler

列除以该列的最大值。优点是可以保持稀疏矩阵中的0不变
 

RobustScaler

一种可以防止异常值的Scaler。算法是减去0.5分位数,然后除以0.75-0.25极差
 
 

幂变换

线性回归和逻辑回归等一些算法明确假设实值变量具有高斯分布。其他非线性算法可能没有这个假设,但当变量具有高斯分布时,通常表现更好。这既适用于分类和回归任务中的实值输入变量,也适用于回归任务中的实值目标变量。
但我们的数据可能没有高斯分布,而是可能具有类似高斯的分布(例如接近高斯但有异常值或偏斜)或完全不同的分布(例如指数)
因可以通过将输入和输出变量转换为具有高斯或更多高斯分布的方式,在各种机器学习算法上实现更好的性能。Box-Cox 变换和 Yeo-Johnson 变换等幂变换提供了一种对数据执行这些变换的自动方式,并在 scikit-learn Python 机器学习库中提供。
幂变换将使变量的概率分布更加高斯。这通常被描述为消除分布中的偏斜,尽管更一般地被描述为稳定分布的方差。对数变换是称为幂变换的一系列变换的一个具体示例。在统计术语中,这些是方差稳定转换
我们可以通过计算变量的对数或平方根来直接应用幂变换,尽管这可能是也可能不是给定变量的最佳幂变换。
相反,我们可以使用变换的广义版本,找到一个参数 ( ),将变量最好地变换为高斯概率分布。
这种自动幂变换有两种流行的方法;他们是:
  • Box-Cox 变换
  • Yeo-Johnson 变换
 
以下是 的一些常见值:
  • = -1是倒数变换
  • = -0.5是倒数平方根变换
  • = 0.0是对数变换
  • = 0.5是平方根变换
这些幂变换可通过PowerTransformer 类在 scikit-learn Python 机器学习库中获得。
该类采用名为“method ”的参数,可以将首选方法设置为“ yeo-johnson ”或“ box-cox ”。它还将在转换后自动标准化数据,这意味着每个变量都将具有零均值和单位方差。可以通过将“ standardize ”设置为False来关闭。
notion image
notion image
 
Box-Cox 过程只能应用于严格为正的数据,Yeo-Johnson支持零值和负值
 

分位数变换(Quantile Transforms)

分位数变换会将变量的概率分布映射到另一个概率分布。
分位数函数,也称为百分比点函数 (PPF),是累积概率分布 (CDF) 的倒数。CDF 是一个函数,它返回一个值等于或低于给定值的概率。PPF 是此函数的逆函数,并返回等于或低于给定概率的值。
分位数函数对观测值之间的关系进行排序或平滑处理,并且可以映射到其他分布,例如均匀分布或正态分布。
转换可以应用于训练数据集中的每个数字输入变量,然后作为输入提供给机器学习模型以学习预测建模任务。
此分位数转换可通过QuantileTransformer 类在scikit-learn中使用。
该类有一个“ output_distribution ”参数,可以设置为“ uniform ”或“ normal ”,默认为“ uniform ”。
它还提供了一个“ n_quantiles ”,用于确定数据集中观察的映射或排名的分辨率。这必须设置为小于数据集中观察数的值,默认为 1,000。
notion image
notion image
  • Scikit-Learn
  • 离散化变换Column Transformer
    目录