一、数据无量纲化
将不同规格的数据转换到同一规格,或将不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”。
- 在以梯度和矩阵为核心的算法中,譬如逻辑回归,支持向量机,神经网络,无量纲化可以加快求解速度;
- 在距离类模型,譬如K近邻,KMeans聚类中,无量纲化可以帮我们提升模型精度,避免某一个取值范围特别大的特征对距离计算造成影响。
- 一个特例是决策树和树的集成算法们,对决策树、不需要无量纲化,决策树可以把任意数据都处理得很好。
数据的无量纲化可以是线性的,也可以是非线性的。线性的无量纲化包括中心化(Zero-centered或者Mean-subtraction)处理和缩放处理(Scale)。
- 中心化的本质是让所有记录减去一个固定值,即让数据样本数据平移到某个位置。
- 缩放的本质是通过除以一个固定值,将数据固定在某个范围之中,取对数也算是一种缩放处理。
二、数据无量纲化的作用
- 提升模型精度:标准化 / 归一化使不同维度的特征在数值上更具比较性,提高分类器的准确性。
- 提升收敛速度:对于线性模型,数据归一化使梯度下降过程更加平缓,更易正确的收敛到最优解。
三、各种数据无量纲化的适用场景
1.哪些算法需要无量纲化
- 涉及或隐含距离计算的算法,比如K-means、KNN、PCA、SVM等,一般需要进行无量纲化。
- 梯度下降算法,梯度下降的收敛速度取决于:参数的初始位置到local minima的距离,以及学习率η的大小,其实还是距离的计算。
- 采用sigmoid等有饱和区的激活函数,如果输入分布范围很广,参数初始化时没有适配好,很容易直接陷入饱和区,导致梯度消失,所以才会出现各种BN,LN等算法。
2.哪些算法不需要无量纲化
- 与距离计算无关的概率模型不需要,比如Naive Bayes;
- 与距离计算无关的基于树的模型,比如决策树、随机森林等,树中节点的选择只关注当前特征在哪里切分对分类更好,即只在意特征内部的相对大小,而与特征间的相对大小无关。其实无量纲化的作用就是由绝对变为了相对,所以可以说无量纲化对于树型模型不那么重要,是一个可选项或者说可以作为一个超参数在训练时进行选择。
四、线性变换方法
1.去中心化MeanScaler
每列数据减去其均值。
from sklearn.preprocessing import Normalizer
import numpy as np
X_train = np.array([[130, 20., 20],
[80, 50., 96],
[90, 60., 88]])
def MeanScaler(X):
X = X.copy()
new_X = X - X.mean(axis=0)
return new_X
X_scaled = MeanScaler(X_train)
print("StandardScaler缩放结果为:", X_scaled)
print("*" * 30)
print("均值为:", X_scaled.mean(axis=0))
print("标准差为:", X_scaled.std(axis=0))
2. 极差标准化 / 归一化 MinMaxScaler
该方法是线性无量纲化,区间缩放,基于最大最小值,将数据转换到0,1区间上。
from sklearn.preprocessing import MinMaxScaler
- 处理方法:将特征缩放到给定的最小值和最大值之间,也可以将每个特征的最大绝对值转换至单位大小。这种方法是对原始数据的线性变换,将数据归一到[0,1]中间;
- 转换函数:x = (x-min) / (max-min);
- 适用性:适用于分布范围较稳定的数据,当新数据的加入导致max/min变化,则需重新定义;
- Outlier 的影响:因为outlier会影响最大值或最小值,因此对outlier非常敏感。
(1)参数包括:min, max, copy文章来源:https://www.toymoban.com/news/detail-400566.html
- min:默认为0,指定区间的下限;
- max:默认为1,指定区间的上限;
- copy : 布尔值,默认为True,可选参数,表示拷贝一份数据以避免在原数据上进行操作,若设置为 False执行插入行规范化并避免复制。
(2)属性包括:min_, scale_, data_min_, data_max_文章来源地址https://www.toymoban.com/news/detail-400566.html
- min_:每个功能调整为最小;
- scale_:每个特征数据的相对缩放;
- data_min_:每个特征在数据中出现的最小值;
- data_max_:每个特征在数据中心出现的最大值。
from sklearn.preprocessing import StandardScaler,MinMaxScaler
import numpy as np
X_train = np.array([[130, 20., 20
到了这里,关于数据无量纲化 学习(2):数据缩放(数据标准化 / 数据无量纲化 )的作用、适用场景、具体方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!