在 Python 中對數字列表進行歸一化
![在 Python 中對數字列表進行歸一化](/img/Python/feature-image---normalize-a-list-of-numbers-in-python.webp)
歸一化意味著將給定的資料轉換為另一個尺度。我們重新調整資料,使其介於兩個值之間。大多數情況下,資料會在 0 和 1 之間重新縮放。我們出於不同的目的重新縮放資料。例如,當資料集值較小時,機器學習演算法的效能會更好。
假設我們有一個列表 {1,2,3},在標準化 0 和 1 的比例後,列表將是 {0, 0.5, 1}
。我們也可以將我們的資料標準化為其他規模。假設在 2 和 6 之間。所以,如果我們在歸一化後有列表 {1,2,3},它將是 {2,4,6}。
歸一化公式
瞭解標準化的工作原理。我們將看看它的公式。我們從每個數字中減去最小值,然後除以範圍 i-e: max-min。因此,在輸出中,我們得到了該特定數字的歸一化值。
我們可以使用兩種方法來歸一化列表。我們可以使用內建函式,該函式在 sklearn
包的預處理模組中可用。或者我們可以為它制定與上面討論的相同公式的邏輯。
使用 Python sklearn
中的 MinMaxScaler
函式歸一化數字列表
sklearn
包的 preprocessing
模組中提供了一個名為 MinMaxScaler()
的內建方法。我們將建立一個一維 NumPy
陣列並將其傳遞給函式。我們必須安裝 NumPy
和 sklearn
軟體包才能使用此功能。
示例程式碼:
# python 3.x
import numpy as np
from sklearn import preprocessing
list = np.array([6, 1, 0, 2, 7, 3, 8, 1, 5]).reshape(-1, 1)
print("Original List:", list)
scaler = preprocessing.MinMaxScaler()
normalizedlist = scaler.fit_transform(list)
print("Normalized List:", normalizedlist)
輸出:
Original List: [[6]
[1]
[0]
[2]
[7]
[3]
[8]
[1]
[5]]
Normalized List: [[0.75 ]
[0.125]
[0. ]
[0.25 ]
[0.875]
[0.375]
[1. ]
[0.125]
[0.625]]
現在假設我們要指定歸一化的範圍。為此,我們將在 MinMaxScaler()
中指定我們的 range
。預設情況下,如果我們不指定範圍,它將是 0 和 1。但是我們可以定義我們的縮放範圍。在此示例中,我們指定範圍 0 和 3。
示例程式碼:
# python 3.x
import numpy as np
from sklearn import preprocessing
list = np.array([6, 1, 0, 2, 7, 3, 8, 1, 5]).reshape(-1, 1)
print("Original List:", list)
scaler = preprocessing.MinMaxScaler(feature_range=(0, 3))
normalizedlist = scaler.fit_transform(list)
print("Normalized List:", normalizedlist)
輸出:
Original List: [[6]
[1]
[0]
[2]
[7]
[3]
[8]
[1]
[5]]
Normalized List: [[2.25 ]
[0.375]
[0. ]
[0.75 ]
[2.625]
[1.125]
[3. ]
[0.375]
[1.875]]
在 Python 中手動歸一化數字列表
我們還可以通過為其編寫完整的程式碼來手動歸一化數字列表,該程式碼使用與上面討論的歸一化相同的公式。
示例程式碼:
list = [6, 1, 0, 2, 7, 3, 8, 1, 5]
print("Original List:", list)
xmin = min(list)
xmax = max(list)
for i, x in enumerate(list):
list[i] = (x - xmin) / (xmax - xmin)
print("Normalized List:", list)
輸出:
Original List: [6, 1, 0, 2, 7, 3, 8, 1, 5]
Normalized List: [0.75, 0.125, 0.0, 0.25, 0.875, 0.375, 1.0, 0.125, 0.625]
I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.
LinkedIn