数据无量纲化

preprocessing.MinMaxScaler(归一化)

导库
from sklearn.preprocessing import MinMaxScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
归一化
# 实现归一化
scaler = MinMaxScaler() #实例化
scaler = scaler.fit(data) #在这里本质是生成min(x), 和max(x)
result = scaler.transform(data) # 通过接口导出结果
result
另一种写法
scaler = MinMaxScaler() #实例化
result_ = scaler.fit_transform(data) # 训练和导出结果一步达成
result_


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


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

逆转
X_returned = X_nor * (X.max(axis=0) - X.min(axis=0)) + X.min(axis=0)
X_returned

preprocessing.StandardScaler(标准化)

导库
from sklearn.preprocessing import StandardScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
实例化
scaler = StandardScaler() # 实例化
scaler.fit(data) # 本质是生成均值和方差
查看属性
scaler.mean_ #查看均值的属性mean_
scaler.var_ # 查看方差的属性var_

查看结果
x_std = scaler.fit_transform(data)
x_std


逆标准化
return_x = scaler.inverse_transform(x_std)
return_x


关于如何选择这两种无量纲化的方式要具体问题具体分析,但是我们一般在机器学习算法中选择标准化,这就好比我们能让他符合标准正态分布为什么不呢?而且MinMaxScaler对异常值很敏感,如果有一个很大的值会把其他值压缩到一个很小的区间内
