标准化数据
当数据(x)按均值(μ)中⼼化后,再按标准差(σ)缩放,数据就变成满⾜均值为0,⽅差为1的分布,⽽这个过程,就叫做数据标准化(Standardization,⼜称Z-score normalization)。公式一般为:(X-mean)/std,其中mean是平均值,std是标准差。
从公式我们可以看出,标准化操作(standardization)是将数据按其属性(按列)减去平均值,然后再除以标准差。这个过程从几何上理解就是,先将坐标轴零轴平移到均值这条线上,然后再进行一个缩放,涉及到的就是平移和缩放两个动作。这样处理以后的结果就是,对于每个属性(每列)来说,所有数据都聚集在0附近,标准差为1。计算时对每个属性/每列分别进行。
有以下三种方式:
当数据(x)按照最⼩值中⼼化后,再按极差(最⼤值 - 最⼩值)缩放,数据移动了最⼩值个单位,并且会被收敛到[0,1]之间,⽽这个过程,就叫做数据归⼀化(Normalization,⼜称Min-Max Scaling)。

标准化:将数据所防伪均值是0,方差为1的状态,公式如下:

归一化和标准化的具体区别:
实例:
sklearn实现标准化。
#sklearn实现标准化
from sklearn.preprocessing import StandardScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = StandardScaler() # 实例化
scaler.fit(data) # fit,本质是⽣成均值和⽅差
print("均值的属性mean_",scaler.mean_) # 查看均值的属性mean_
print("⽅差的属性var_",scaler.var_) # 查看⽅差的属性var_
x_std = scaler.transform(data) # 通过接⼝导出结果
print("⽤mean()查看均值:",x_std.mean())
print("⽤std()查看⽅差:",x_std.std())
print("使⽤fit_transform(data)⼀步达成结果")
print(scaler.fit_transform(data))
print("使⽤inverse_transform逆转标准化")
print(scaler.inverse_transform(x_std))
实现归一化的三种方式。
# 使用numpy实现归一化
import numpy as np
print("使用numpy实现归一化")
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
x = np.array(data)
#print(x)
print("最小值:",x.min(axis=0))
print("最大值:",x.max(axis=0))
x_nor = (x - x.min(axis=0)) / (x.max(axis=0) - x.min(axis=0))
print(x_nor)
print("----------逆转归一化----------")
x_return = x_nor * (x.max(axis=0) - x.min(axis=0)) + x.min(axis=0) # 逆转归一化
print(x_return)
# 使用pandas实现归一化
import pandas as pd
print("使用pandas实现归一化")
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
x = pd.DataFrame(data)
x_nor = (x - x.min()) / (x.max() - x.min())
print(x_nor)
print("----------逆转归一化----------")
x_return = x_nor * (x.max() - x.min()) + x.min() # 逆转归一化
print(x_return)
from sklearn.preprocessing import MinMaxScaler
print("klearn完成归一化")
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) # 通过接⼝导出结果
# print(result)
result_ = scaler.fit_transform(data) # 训练和导出结果⼀步达成
print(result)
print("----------逆转归一化----------")
print(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⼀步导出结果
print(result)
# 当X中的特征数量⾮常多的时候,fit会报错并表示,数据量太⼤了我计算不了
# 此时使⽤partial_fit作为训练接⼝
# scaler = scaler.partial_fit(data)