如何將 NumPy 陣列標準化,使其值範圍恰好在 0 到 1 之間?


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

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

# Find the minimum and maximum values in the array
my_min_val = np.min(my_arr)
my_max_val = np.max(my_arr)

# Perform min-max normalization
my_normalized_arr = (my_arr - my_min_val) / (my_max_val - my_min_val)
print(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 之間,但它通常用於統計分析。例如,將 z 分數標準化應用於陣列 [10, 4, 5, 6, 2, 8, 11, 20]。

#import numpy module
import numpy as np

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

# Calculate the mean and standard deviation of the array
my_mean_val = np.mean(arr)
my_std_val = np.std(arr)

# Perform z-score normalization
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

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

#define the max value
my_max_val = 10

# Perform rescaling by dividing each element by the maximum value
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])

# Create an instance of MinMaxScaler
my_minmax_scaler = MinMaxScaler(feature_range=(0, 1))

# Reshape the array to be a column vector and fit-transform the data
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 提供了一種使用特定範圍標準化陣列的便捷方法。

更新於: 2023 年 8 月 10 日

3K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.