数据预处理——归一化和标准化

归⼀化

当数据(x)按照最⼩值中⼼化后,再按极差(最⼤值 - 最⼩值)缩放,数据移动了最⼩值个单位,并且会被收敛到[0,1]之间,⽽这个过程,就叫做数据归⼀化(Normalization,⼜称Min-Max Scaling)。

使用numpy实现归一化

import numpy as np
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
X = np.array(data)
X_nor = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))    # 使用numpy实现归一化
X_return = X_nor * (X.max(axis=0) - X.min(axis=0)) + X.min(axis=0)    # 逆转归一化

使用pandas实现归一化

import pandas as pd
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
X = pd.DataFrame(data)
x_nor = (X - X.min())/(X.max() - X.min())    # 使用pandas实现归一化
x_return = x_nor * (X.max() - X.min()) + X.min()    # 逆转归一化

使用sklearn完成归一化

from sklearn.preprocessing import MinMaxScaler

data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]

#实现归⼀化
scaler = MinMaxScaler() #实例化
scaler = scaler.fit(data) #fit,在这⾥本质是⽣成min(x)和max(x)
result = scaler.transform(data) #通过接⼝导出结果
result

result_ = scaler.fit_transform(data) #训练和导出结果⼀步达成

scaler.inverse_transform(result) #将归⼀化后的结果逆转

#使⽤MinMaxScaler的参数feature_range实现将数据归⼀化到[0,1]以外的范围中
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = MinMaxScaler(feature_range=(5,10)) #依然实例化
result = scaler.fit_transform(data) #fit_transform⼀步导出结果
result
#当X中的特征数量⾮常多的时候,fit会报错并表示,数据量太⼤了我计算不了
#此时使⽤partial_fit作为训练接⼝
#scaler = scaler.partial_fit(data)

标准化(standardization)

当数据(x)按均值(μ)中⼼化后,再按标准差(σ)缩放,数据就变成满⾜均值为0,⽅差为1的分布,⽽这个过程,就叫做数据标准化(Standardization,⼜称Z-score normalization)。公式一般为:(X-mean)/std,其中mean是平均值,std是标准差。

从公式我们可以看出,标准化操作(standardization)是将数据按其属性(按列)减去平均值,然后再除以标准差。这个过程从几何上理解就是,先将坐标轴零轴平移到均值这条线上,然后再进行一个缩放,涉及到的就是平移和缩放两个动作。这样处理以后的结果就是,对于每个属性(每列)来说,所有数据都聚集在0附近,标准差为1。计算时对每个属性/每列分别进行。

使用sklearn完成标准化

from sklearn.preprocessing import StandardScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = StandardScaler() #实例化
scaler.fit(data) #fit,本质是⽣成均值和⽅差

scaler.mean_ #查看均值的属性mean_
scaler.var_ #查看⽅差的属性var_

x_std = scaler.transform(data) #通过接⼝导出结果

x_std.mean() #导出的结果是⼀个数组,⽤mean()查看均值
x_std.std() #⽤std()查看⽅差

scaler.fit_transform(data) #使⽤fit_transform(data)⼀步达成结果
scaler.inverse_transform(x_std) #使⽤inverse_transform逆转标准化

StandardScaler和MinMaxScaler选哪个?

看情况。⼤多数机器学习算法中,会选择StandardScaler来进⾏特征缩放,因为MinMaxScaler对异常值⾮常敏感。在PCA,聚类,逻辑回归,⽀持向量机,神经⽹络这些算法中,StandardScaler往往是最好的选择。

MinMaxScaler在不涉及距离度量、梯度、协⽅差计算以及数据需要被压缩到特定区间时使⽤⼴泛,⽐如数字图像处理中量化像素强度时,都会使⽤MinMaxScaler将数据压缩于[0,1]区间之中。

建议先试试看StandardScaler,效果不好换MinMaxScaler。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值