详解特征归一化

介绍

机器学习中,提取某个样本特征的过程,叫特征工程
同一个样本,可能具备不同类型的特征,各特征的数值大小范围不一致。所谓特征归一化,就是将不同类型的特征数值大小变为一致的过程。

举例:假设有4个样本及他们的特征如下

样本特征1特征2
1100012
2160204
3120086
4131318

可见归一化前,特征1和特征2的大小不是一个数量级。归一化后,特征变为

样本特征1特征2
100
210.33
30.730.67
40.811

特征归一化有很多不同的叫法,比如:特征缩放Feature NormalizationFeature Scaling,其实都是同一个意思。

特征归一化的意义

  • 各特征之间的大小范围一致,才能使用距离度量等算法
  • 加速梯度下降算法的收敛
  • 在SVM算法中,一致化的特征能加速寻找支持向量的时间
  • 不同的机器学习算法,能接受的输入数值范围不一样

两种常用特征归一化方法

下面详细介绍sklearn中最常用的特征归一化方法MinMaxScalerStandardScaler

MinMaxScaler

使用

sklearn中,sklearn.preprocessing.MinMaxScaler是一种用于特征归一化的方法。使用示例如下

from sklearn.preprocessing import MinMaxScaler
x=[[10001,2],[16020,4],[12008,6],[13131,8]]
min_max_scaler = MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(x)#归一化后的结果
X_train_minmax
array([[ 0.        ,  0.        ],
       [ 1.        ,  0.33333333],
       [ 0.33344409,  0.66666667],
       [ 0.52001994,  1.        ]])

它默认将每种特征的值都归一化到[0,1]之间,归一化后的数值大小范围是可调的(根据MinMaxScaler的参数feature_range调整)。下面代码能将特征归一化到[-1,1]之间。

min_max_scaler = MinMaxScaler(feature_range=(-1,1))
X_train_minmax = min_max_scaler.fit_transform(x)#归一化后的结果
X_train_minmax
array([[-1.        , -1.        ],
       [ 1.        , -0.33333333],
       [ 0.46574339,  0.33333333],
       [ 0.6152873 ,  1.        ]])

实现

MinMaxScaler的实现公式如下

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min

这是向量化的表达方式,说明X是矩阵,其中

  • X_std:将X归一化到[0,1]之间
  • X.min(axis=0)表示列最小值
  • max,min表示MinMaxScaler的参数feature_range参数。即最终结果的大小范围

以下例说明计算过程(max=1,min=0)

样本特征1特征2
1100012
2160204
3120086
4131318
X.max160208
X.min100012

归一化的过程如下,假设归一化后的矩阵为S

  • S11=(10001-10001)/(16020-10001)=0
  • S21=(16020-10001)/(16020-10001)=1
  • S31=(12008-10001)/(16020-10001)=0.333444
  • S41=(13131-10001)/(16020-10001)=0.52002
  • S12=(2-2)/(8-2)=0
  • S22=(4-2)/(8-2)=0.33
  • S32=(6-2)/(8-2)=0.6667
  • S42=(8-2)/(8-2)=1

可见,结果与章节“MinMaxScaler使用”中的计算结果一致。

StandardScaler

使用

sklearn中,sklearn.preprocessing.StandardScaler是一种用于特征归一化的方法。使用示例如下

from sklearn.preprocessing import StandardScaler
x=[[10001,2],[16020,4],[12008,6],[13131,8]]
X_scaler = StandardScaler()
X_train = X_scaler.fit_transform(x)
X_train
array([[-1.2817325 , -1.34164079],
       [ 1.48440157, -0.4472136 ],
       [-0.35938143,  0.4472136 ],
       [ 0.15671236,  1.34164079]])

归一化后,矩阵每列的均值为0,标准差为1。注意,这里的标准差是指加了Delta Degrees of Freedom因子后的标准差,这与传统的标准差计算公式有区别。(在numpy中,有std()函数用于计算标准差)

实现

StandardScaler的归一化方式是用每个特征减去列均值,再除以列标准差。

以下例说明计算过程,注意标准差是用np.std()计算的。

样本特征1特征2
1100012
2160204
3120086
4131318
列均值127905
列标准差2175.962.236

归一化的过程如下,假设归一化后的矩阵为S

  • S11=(10001-12790)/2175.96=-1.28173
  • S21=(16020-12790)/2175.96=1.484
  • S31=(12008-12790)/2175.96=-0.35938
  • S41=(13131-12790)/2175.96=0.1567
  • S12=(2-5)/2.236=-1.342
  • S22=(4-5)/2.236=-0.447
  • S32=(6-5)/2.236=0.447
  • S42=(8-5)/2.236=1.3416

总结

本文详细介绍了MinMaxScalerStandardScaler的计算过程。有这个过程可以看出:

  • 当我们需要将特征值都归一化为某个范围[a,b]时,选MinMaxScaler
  • 当我们需要归一化后的特征值均值为0,标准差为1,选StandardScaler

参考

  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在MATLAB中,归一化指的是将数据缩放到特定的范围内,通常是[0,1]或[-1,1]。这是一种常见的预处理方法,可以使不同的数据具有可比性,提高机器学习和数据分析的准确性。在MATLAB中,有几种方法可以进行归一化。 1.最小-最大归一化 最小-最大归一化,也称为离差标准化,是一种常见的归一化方法。它通过将数据缩放到[0,1]范围内来实现归一化。具体方法是将每个特征的值减去最小值,然后除以特征值的范围(最大值减最小值)。 例如,假设有一个向量x=[2,4,6,8],最小值为2,最大值为8。那么,应用最小-最大归一化的公式,可以得到: x_normalized = (x - min(x)) / (max(x) - min(x)) = ([0, 1, 2, 3] / 6) = [0, 0.1667, 0.3333, 0.5] 2.Z-score归一化 Z-score归一化,也称为标准差标准化,是另一种常见的归一化方法。它通过将数据缩放到均值为0,标准差为1的标准正态分布中来实现归一化。具体方法是将每个特征的值减去特征的平均值,然后除以特征的标准差。 例如,假设有一个向量x=[2,4,6,8],平均值为5,标准差为2。那么,应用Z-score归一化的公式,可以得到: x_normalized = (x - mean(x)) / std(x) = ([-3, -1, 1, 3] / 2) = [-1.5, -0.5, 0.5, 1.5] 3.范数归一化 范数归一化是一种将向量缩放到单位范数(长度为1)的方法。它适用于需要衡量向量之间相似性的应用程序。具体方法是将向量除以其范数(向量的长度)。 例如,假设有一个向量x=[2,4,6,8],其范数为10。那么,应用范数归一化的公式,可以得到: x_normalized = x / norm(x) = ([0.2, 0.4, 0.6, 0.8]) = [0.2, 0.4, 0.6, 0.8] 这些是MATLAB中最常用的归一化方法,可以根据具体的应用场景选择合适的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值