先说结果!之前一直用MinMaxScaler 进行归一化,最近才发现之前理解错了MinMaxScaler 的作用,MinMaxScaler只能对每一列分别进行归一化,即使将全部数据集的所有列都输入给MinMaxScaler,其归一化的结果也是对每列进行归一化。要想对整个数据集进行归一化可以将所有数据展平为一维输入给MinMaxScaler ,最后再重构形状。

MinMaxScaler 是一种数据预处理工具,用于将数据缩放到一个指定的范围内,通常是 [0, 1] 或者 [-1, 1]。它的工作原理是通过对每个特征进行线性变换,将其映射到指定的范围内。

具体来说,MinMaxScaler 的操作步骤如下:

1.对于每个特征,找到最小值(min)和最大值(max)。
2.对于每个特征,将它们的值进行线性变换,使得最小值变成了指定范围的最小值,最大值变成了指定范围的最大值。
具体的变换公式为:

Xscaled=X−XminXmax−Xmin{X_{scaled}=\frac{X-X_{min}}{X_{max}-X_{min}} }Xscaled=XmaxXminXXmin

Xmin{X_{min}}XminXmax{X_{max}}Xmax分别是特征的最小值和最大值,X{X}X 是特征的原始值,Xscaled{X_{scaled}}Xscaled是缩放后的值。

1. 对每列数据分别进行归一化

from sklearn.preprocessing import MinMaxScaler
import numpy as np

# 假设有两列数据
data = np.array([[1, 2],
                 [3, 4],
                 [5, 6]])

# 创建一个 MinMaxScaler 对象
scaler = MinMaxScaler()

# 将所有数据输入给MinMaxScaler进行归一化
normalized_data = scaler.fit_transform(data)

print("原始数据:")
print(data)
print("\n归一化后的数据:")
print(normalized_data)

输出的结果如下:(显而易见,这是对每列数据分别进行了归一化)

原始数据:
[[1 2]
 [3 4]
 [5 6]]

归一化后的数据:
[[0.  0. ]
 [0.5 0.5]
 [1.  1. ]]

2. 对整个数据集进行归一化

from sklearn.preprocessing import MinMaxScaler
import numpy as np

# 假设有两列数据
data = np.array([[1, 2],
                 [3, 4],
                 [5, 6]])

# 将多列数据合并成一个列
flattened_data = data.flatten()

# 创建一个 MinMaxScaler 对象
scaler = MinMaxScaler()

# 对整个数据集进行归一化
normalized_data = scaler.fit_transform(flattened_data.reshape(-1, 1))

# 将归一化后的数据重新转换成原来的形状
normalized_data = normalized_data.reshape(data.shape)

print("原始数据:")
print(data)
print("\n归一化后的数据:")
print(normalized_data)

输出的结果如下:(显而易见,这是对整个数据集进行了归一化)

原始数据:
[[1 2]
 [3 4]
 [5 6]]

归一化后的数据:
[[0.  0.2]
 [0.4 0.6]
 [0.8 1. ]]
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐