当进行"最小-最大"缩放(Min-Max Scaling)时,你将数据缩放到一个特定的范围,通常是0到1。这个缩放方法的公式如下:
其中 x 是原始数据,
是缩放后的数据。这样做的结果是,原始数据中的最小值将映射到缩放后的范围的0,而最大值将映射到1,其它值将映射到两者之间的适当位置。
"最小-最大"缩放在数据的特征值范围相差较大时非常有用,可以将特征值归一化到一个固定的范围,从而消除不同特征之间的量纲差异。这有助于某些机器学习算法更快地收敛,提高算法的稳定性和准确性。
注意:虽然上述公式描述了单个特征的缩放,但在实际应用中,会对整个数据集的每个特征应用相同的缩放操作。
当使用PyTorch进行数据预处理时,可以使用sklearn.preprocessing中的MinMaxScaler来实现“最小-最大”缩放,例如下面是一个完整的例子。
实例3-4:使用PyTorch实现“最小-最大”缩放(源码路径:daima/3/suo.py)
实例文件suo.py的具体实现代码如下所示。
import torch
import numpy as np
from sklearn.preprocessing import MinMaxScaler
# 创建一些示例数据
data = np.array([[1.0, 2.0],
[2.0, 3.0],
[3.0, 5.0]])
# 创建 MinMaxScaler 对象
scaler = MinMaxScaler(feature_range=(0, 1))
# 对数据进行拟合和转换
scaled_data = scaler.fit_transform(data)
# 将 NumPy 数组转换为 PyTorch 张量
tensor_data = torch.tensor(scaled_data, dtype=torch.float32)
print("原始数据:")
print(data)
print("缩放后的数据:")
print(tensor_data)
在这个示例中,首先创建了一个包含示例数据的NumPy数组。接下来,创建了一个MinMaxScaler对象,指定feature_range=(0, 1)以进行“最小-最大”缩放。我们使用fit_transform方法将数据进行拟合和转换,得到缩放后的数据。最后,将缩放后的NumPy数组转换为PyTorch张量并打印出来。执行后会输出:
原始数据:
[[1. 2.]
[2. 3.]
[3. 5.]]
缩放后的数据:
tensor([[0.0000, 0.0000],
[0.5000, 0.3333],
[1.0000, 1.0000]])
当使用TensorFlow进行数据预处理时,可以使用sklearn.preprocessing中的MinMaxScaler来实现“最小-最大”缩放功能,例如下面的例子演示了这一用法。
实例3-4:使用PyTorch实现“最小-最大”缩放(源码路径:daima/3/tsuo.py)
实例文件tsuo.py的具体实现代码如下所示。
import tensorflow as tf
import numpy as np
from sklearn.preprocessing import MinMaxScaler
# 创建一些示例数据
data = np.array([[1.0, 2.0],
[2.0, 3.0],
[3.0, 5.0]])
# 创建 MinMaxScaler 对象
scaler = MinMaxScaler(feature_range=(0, 1))
# 对数据进行拟合和转换
scaled_data = scaler.fit_transform(data)
# 将 NumPy 数组转换为 TensorFlow 张量
tensor_data = tf.convert_to_tensor(scaled_data, dtype=tf.float32)
print("原始数据:")
print(data)
print("缩放后的数据:")
print(tensor_data)
在这个例子中,首先创建了一个包含示例数据的NumPy数组。接下来,我们创建了一个MinMaxScaler对象,指定feature_range=(0, 1)以进行“最小-最大”缩放。使用fit_transform方法将数据进行拟合和转换,得到缩放后的数据。最后,将缩放后的NumPy数组转换为TensorFlow张量并打印出来。执行后会看到原始数据和经过“最小-最大”缩放后的数据:
原始数据:
[[1. 2.]
[2. 3.]
[3. 5.]]
缩放后的数据:
tf.Tensor(
[[0. 0. ]
[0.5 0.33333334]
[1. 1. ]], shape=(3, 2), dtype=float32)