范围缩放
将样本矩阵中的每一列的最小值和最大值设定为相同的区间, 统一各列特征值的范围. 一般情况下,会把特征区间缩放至[0,1].
[17, 20, 23]
如何使这组数据的最小值等于0: [0, 3, 6]
如何使这组数据的最大值等于1: [0, 1/2, 1]
范围缩放相关API:
# 创建MinMaxScaler缩放器对象
mms = sp.MinMaxScaler(feature_range=(0, 1))
# 调用方法执行范围缩放
结果矩阵 = mms.fit_transform(原始矩阵)
案例:
"""
范围缩放
"""
import numpy as np
import sklearn.preprocessing as sp
samples = np.array([
[17., 100., 4000],
[20., 80., 5000],
[23., 70., 5500]])
# 范围缩放器
mms = sp.MinMaxScaler(feature_range=(0,1))
r_samples = mms.fit_transform(samples)
print(r_samples)
# 基于他们之间的线性关系 实现范围缩放
linear_samples = samples.copy()
for col in linear_samples.T:
# 一个col就是原始样本数组中的一列
col_min = col.min()
col_max = col.max()
A = np.array([ [col_min, 1],
[col_max, 1]])
B = np.array([0, 1])
x = np.linalg.lstsq(A, B)[0]
col *= x[0]
col += x[1]
print(linear_samples)
[[0. 1. 0. ]
[0.5 0.33333333 0.66666667]
[1. 0. 1. ]]
[[ 2.22044605e-15 1.00000000e+00 8.88178420e-16]
[ 5.00000000e-01 3.33333333e-01 6.66666667e-01]
[ 1.00000000e+00 -1.33226763e-15 1.00000000e+00]]