如何规范化 NumPy 数组,使其值精确介于 0 和 1 之间?

numpypythonserver side programmingprogramming

NumPy 是 Python 中用于数值计算的强大库,它提供了一个数组对象,可以高效处理大型数据集。通常,需要规范化 NumPy 数组的值,以确保它们在特定范围内。一种常见的规范化技术是将值缩放到 0 到 1 之间。

在本文中,我们将学习如何规范化 NumPy 数组,使值的范围精确地介于 0 和 1 之间。我们将看到使用 NumPy 实现此目的的不同方法,以及语法和完整示例。

方法

有各种方法或方法,我们可以轻松地规范化 NumPy 数组,使值的范围精确地介于 0 和 1 之间。让我们看看一些常用的方法及其语法和示例 -

方法 1:使用最小-最大规范化

将数组规范化为精确介于 0 和 1 之间的第一种方法是使用最小-最大规范化。它也称为特征缩放,使用数组中的最小值和最大值将值重新缩放到 0 到 1 的范围内。这种方法被广泛使用并且易于实现。

语法

以下是使用最小-最大规范化将数组规范化为精确介于 0 和 1 之间的语法 -

normalized_arr = (arr - min_val) / (max_val - min_val)

示例

在给定的示例中,我们使用最小-最大规范化根据数组中的最小值和最大值将值重新调整为 0 到 1 之间的值。例如,如果我们有一个数组 [10, 4, 5, 6, 2, 8, 11, 20],最小值为 2,最大值为 20。通过从每个元素中减去最小值并将其除以范围(最大值 - 最小值),我们可以获得 0 到 1 之间的归一化值。

#import numpy module
import numpy as np

#定义具有一些值的数组
my_arr = np.array([10, 4, 5, 6, 2, 8, 11, 20])

# 查找数组中的最小值和最大值
my_min_val = np.min(my_arr)
my_max_val = np.max(my_arr)

# 执行最小-最大归一化
my_normalized_arr = (my_arr - my_min_val) / (my_max_val - my_min_val)
打印(my_normalized_arr)

输出

[0.44444444 0.11111111 0.16666667 0.22222222 0.         0.333333330.5        1.        ] ]

方法 2:使用 Z 分数标准化

将数组标准化为精确介于 0 和 1 之间的第二种方法是使用 Z 分数标准化。它也被称为标准化,将值转换为平均值为 0 且标准差为 1。

语法

以下是使用 Z 分数标准化将数组标准化为精确介于 0 和 1 之间的语法 −

mean_val = np.mean(arr)
std_val = np.std(arr)
normalized_arr = (arr - mean_val) / std_val

示例

在给定的示例中,我们使用 Z 分数标准化通过减去平均值并除以标准差来标准化值。虽然它不能保证值介于 0 和 1 之间,但它通常用于统计分析。例如,对数组 [10, 4, 5, 6, 2, 8, 11, 20] 应用 z 分数标准化。

#导入 numpy 模块
导入 numpy 作为 np

#定义具有一些值的数组
my_arr = np.array([10, 4, 5, 6, 2, 8, 11, 20])

#计算数组的平均值和标准差
my_mean_val = np.mean(arr)
my_std_val = np.std(arr)

#执行 z 分数标准化
my_normalized_arr = (my_arr - my_mean_val) / my_std_val
print(my_normalized_arr)

输出

[ 0.85564154 -0.34874292 -0.2032739  -0.05780487 -0.63668096  0.14113318  1.00082049  4.38233801]

方法 3:使用重新缩放除法

将数组标准化为精确介于 0 和 1 之间的第三种方法是使用重新缩放除法。当我们心中有一个特定的最大值时,这种方法很有用,如果有,那么我们可以直接将数组的每个元素除以该值,以获得 0 到 1 之间的标准化范围。

语法

以下是使用重新缩放除法将数组标准化为精确介于 0 和 1 之间的语法 -

normalized_arr = arr / max_val

示例

在下面的示例中,我们使用了通过除法重新缩放的方法,该方法允许使用特定的最大值直接缩放数组的值。对于数组 [10, 4, 5, 6, 2, 8, 11, 20] 且选定的最大值是 20,将每个元素除以 20 可得到规范化数组。当需要特定的最大值时,此方法非常有用。

#import numpy module
import numpy as np

#定义具有某些值的数组
my_arr = np.array([10, 4, 5, 6, 2, 8, 11, 20])

#定义最大值
my_max_val = 10

#通过将每个元素除以最大值来执行重新缩放
my_normalized_arr = my_arr / my_max_val
print(my_normalized_arr)

输出

[1. 0.4 0.5 0.6 0.2 0.8 1.1 2. ]

方法 4:使用 Sklearn MinMaxScaler

将数组标准化为精确介于 0 和 1 之间的第四种也是最后一种方法是使用 sklearn MinMaxScaler。此方法提供了一种方便的方法来标准化数据,方法是将数据缩放到特定范围,在本例中为 0 到 1 之间。当我们想要保留数据的原始分布,同时确保它在所需范围内时,sklearn MinMaxScaler 方法很有用。

语法

以下是使用 sklearn MinMaxScaler 将数组标准化为精确介于 0 和 1 之间的语法 -

scaler = MinMaxScaler(feature_range=(0, 1))
normalized_arr = scaler.fit_transform(arr.reshape(-1, 1)).flatten()

示例

在给定的示例中,我们使用了 Scikit-learn 的 MinMaxScaler,它提供了一种方便的方法将数组规范化到所需范围,例如 0 到 1。通过将 MinMaxScaler 拟合到数组 [10, 4, 5, 6, 2, 8, 11, 20],然后应用转换方法。

#import numpy module
import numpy as np
from sklearn.preprocessing import MinMaxScaler

#define array with some values
my_arr = np.array([10, 4, 5, 6, 2, 8, 11, 20])

# 创建 MinMaxScaler 的实例
my_minmax_scaler = MinMaxScaler(feature_range=(0, 1))

# 将数组重塑为列向量并拟合转换数据
my_normalized_arr = my_minmax_scaler.fit_transform(arr.reshape(-1, 1)).flatten()
print(my_normalized_arr)

输出

[0.47368421 0.15789474 0.21052632 0.26315789 0.05263158 0.31578947 0.52631579 1. ]

结论

将 NumPy 数组规范化为精确介于 0 和 1 之间是数据预处理任务中的常见要求。在本文中,我们学习了如何将数组标准化为介于 0 和 1 之间的范围。我们看到了实现此标准化的四种不同方法:最小-最大标准化、Z 分数标准化、通过除法重新缩放以及使用 Scikit-learn 的 MinMaxScaler。

最小-最大标准化计算数组中值的范围并将它们重新缩放到范围 [0, 1]。Z 分数标准化通过减去平均值并除以标准差来标准化值。通过除法重新缩放直接将每个元素除以指定的最大值。Scikit-learn 的 MinMaxScaler 提供了一种使用特定范围标准化数组的便捷方法。


相关文章