标准化和归一化什么区别?

转载自:https://www.zhihu.com/question/20467170

作者:thothsun
链接:https://www.zhihu.com/question/20467170/answer/839255695
来源:知乎

通常来说,它们都是指特征工程中的特征缩放过程,使用特征缩放的作用是:使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确。 (如:将特征取值的原始范围-100 ~ 100缩放至-1 ~ 1

加快学习算法的收敛速度。参考sklearn的官方文档的数据预处理章节:
5.3. Preprocessing data​scikit-learn.org

缩放过程可以分为以下几种:

  • 缩放到均值为0,方差为1(Standardization——StandardScaler())
  • 缩放到0和1之间(Standardization——MinMaxScaler())
  • 缩放到-1和1之间(Standardization——MaxAbsScaler())
  • 缩放到0和1之间,保留原始数据的分布(Normalization——Normalizer())

1就是常说的z-score归一化(或者叫标准化),2是min-max归一化。

举个例子来看看它们之间的区别,假设一个数据集包括「身高」和「体重」两个特征,它们都满足正态分布,原始数据图像:原始数据分布

使用1.StandardScaler()缩放,结果为:
StandardScaler缩放

使用2.MinMaxScaler()缩放,结果为:
MinMaxScaler缩放

使用3.MaxAbsScaler()缩放,结果为:
MaxAbsScaler缩放

使用4.Normalizer()缩放,结果为:
Normalizer缩放

按需选择。
附:(画出上面4幅图的代码)

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import preprocessing

def plot(data, title):
   sns.set_style('dark')
   f, ax = plt.subplots()
   ax.set(ylabel='frequency')
   ax.set(xlabel='height(blue) / weight(green)')
   ax.set(title=title)
   sns.distplot(data[:, 0:1], color='blue')
   sns.distplot(data[:, 1:2], color='green')
   plt.savefig(title + '.png')
   plt.show()

np.random.seed(42)
height = np.random.normal(loc=168, scale=5, size=1000).reshape(-1, 1)
weight = np.random.normal(loc=70, scale=10, size=1000).reshape(-1, 1)

original_data = np.concatenate((height, weight), axis=1)
plot(original_data, 'Original')

standard_scaler_data = preprocessing.StandardScaler().fit_transform(original_data)
plot(standard_scaler_data, 'StandardScaler')

min_max_scaler_data = preprocessing.MinMaxScaler().fit_transform(original_data)
plot(min_max_scaler_data, 'MinMaxScaler')

max_abs_scaler_data = preprocessing.MaxAbsScaler().fit_transform(original_data)
plot(max_abs_scaler_data, 'MaxAbsScaler')

normalizer_data = preprocessing.Normalizer().fit_transform(original_data)
plot(normalizer_data, 'Normalizer')

robust_scaler_data = preprocessing.RobustScaler().fit_transform(original_data)
plot(robust_scaler_data, 'RobustScaler')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值