1.Min-Max scaling将该样本每个特征下的最大值与最小值之差作为缩放倍数,每个特征下没有任何一个数会超过其最值之差,所以作为分母;分子是每个特征下的值与最小值之差。全为0的特征,缩放后值为0。取值范围[0,1]代码表现如下:
# 引用相应的库,numpy用于生成缺失值,引用sklearn.processing库,其中包含绝大部分数据与处理方法
from sklearn import preprocessing
import numpy as np
# 原始数据X
X = np.array([[3, -2., 2.], [2., 0., 0.], [-1, 1., 3.]]) # 按行表示,按列计算
# 初始化数据预处理器,本例中为最小最大值缩放
min_max_scaler = preprocessing.MinMaxScaler()
# 数据转换并打印
X_minmax = min_max_scaler.fit_transform(X)
print("缩放规范化结果如下:\n")
print(X_minmax)
# 输出其缩放倍数
print("输出其缩放倍数:\n")
print(min_max_scaler.scale_)
# 输出其最小值
print("输出每一列的最小调整:\n")
print(min_max_scaler.min_)
print("输出每一列的最小值:\n")
print(min_max_scaler.data_min_)
输出结果:
缩放规范化结果如下:
[[1. 0. 0.66666667]
[0.75 0.66666667 0. ]
[0. 1. 1. ]]
输出其缩放倍数:
[0.25 0.33333333 0.33333333]
输出每一列的最小调整:
[0.25 0.66666667 0. ]
输出每一列的最小值:
[-1. -2. 0.]
2.MAxAbsolute Scaling执行效率更高。它在分子上减少了减法运算,分母上也仅采用特征的最大值的绝对值。取值范围[-1,1],分布以0为中心,更稀疏、合理。代码实现如下:
# 引用相应的库,numpy用于生成缺失值,引用sklearn.processing库,其中包含绝大部分的数据与处理方法
from sklearn import preprocessing
import numpy as np
#原始数据X
X = np.array([[3, -2., 2.], [2., 0., 0.], [-1, 1., 3.]]) # 按行表示,按列计算
# 初始化数据预处理器,本例中为最大绝对值缩放
max_abs_scaler = preprocessing.MaxAbsScaler()
#数据转换并打印
X_maxabs=max_abs_scaler.fit_transform(X)
print(X_maxabs)
输出结果如下:
[[ 1. -1. 0.66666667]
[ 0.66666667 0. 0. ]
[-0.33333333 0.5 1. ]]
对于希望数据分布到特定的取值范围之间的特殊要求,MaxMin Scaling可以预先设置特定的范围,添加一个x_scale表示设定最大值与最小值之后的缩放变换输出(在第一块代码的基础上)
from sklearn import preprocessing
import numpy as np
# 原始数据X
X = np.array([[3, -2., 2.], [2., 0., 0.], [-1, 1., 3.]]) # 按行表示,按列计算
# 初始化数据预处理器,本例中为最小最大值缩放
min_max_scaler = preprocessing.MinMaxScaler()
# 变式 添加x_scale改变缩放变换输出
# 初始化数据预处理器,用MaxMinScaling配置feature——range可转化之后的输出范围
min_max_scaler=preprocessing.MinMaxScaler(feature_range=(-2,6))
# 数据转换并打印
X_minmax=min_max_scaler.fit_transform(X)
print("feature_range=-2,6")
print(X_minmax)
输出结果:
feature_range=-2,6
[[ 6. -2. 3.33333333]
[ 4. 3.33333333 -2. ]
[-2. 6. 6. ]]
该方法存在问题,一旦样本某特征的数值超出最大最小值的边界,转化后的特征值存在不稳定的情况(在第一块代码的基础上)
from sklearn import preprocessing
import numpy as np
# 原始数据X
X = np.array([[3, -2., 2.], [2., 0., 0.], [-1, 1., 3.]]) # 按行表示,按列计算
# 初始化数据预处理器,本例中为最小最大值缩放
min_max_scaler = preprocessing.MinMaxScaler()
# 引入新数据,数据超出边界,输出特征值不稳定
X_new=np.array([[-3.,-1.,4.]])
X_new_minmax=min_max_scaler.transform(X_new)
print("缩放规范化效果如下:")
print(X_new_minmax)
输出:
缩放规范化效果如下:
[[-6. 0.66666667 8.66666667]]