一、什麼是數據標準化?
在數據挖掘和機器學習的過程中,絕大多數模型都需要對數據進行預處理。由於不同的特徵之間很可能具有不同的尺度,這就容易對模型產生不良影響。
例如有兩個特徵 age 和 income,age 的值通常在 0-100 之間(無單位),而 income 值通常在 0-100000 之間(單位為美元)。如果不對數據進行標準化,income 的值就會有更大的影響力。
數據標準化即是對原始數據進行變換,使其變換為均值為0,標準差為1的數據分布。這也被成為歸一化處理。標準化可以減少數據之間的差異影響,提高建模精度。
二、如何使用 Python 中的 Sklearn 進行數據標準化?
Python 中的 Sklearn 庫提供了大量的數據預處理工具,其中標準化(scaling)也包含在內。使用 Sklearn 實現標準化也非常簡單,代碼如下所示:
from sklearn.preprocessing import StandardScaler # 假設 data 是一個二維數組,共有 n 個樣本 scaler = StandardScaler().fit(data) data_scaled = scaler.transform(data)
在代碼中,我們通過導入sklearn.preprocessing中的StandardScaler類進行數據標準化。首先,初始化實例化 StandardScaler 類,根據指定的特徵數據對其進行訓練,得到每一維特徵值的均值和標準差,然後調用 transform 方法將數據標準化。
三、數據標準化的效果驗證
為了驗證數據標準化的效果,我們可以使用著名的iris數據集進行測試。iris數據集是分類問題中非常常用的數據集之一。通過比較使用歸一化前後,iris數據集上分類模型的效果,來驗證數據標準化的效果。代碼如下:
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import StandardScaler from sklearn import datasets iris = datasets.load_iris() X = iris.data y = iris.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 歸一化前 clf = LogisticRegression(random_state=42).fit(X_train, y_train) print("Before Scaling - Training set score: {:.3f}".format(clf.score(X_train, y_train))) print("Before Scaling - Test set score: {:.3f}".format(clf.score(X_test, y_test))) # 歸一化後 scaler = StandardScaler().fit(X_train) X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) clf_scaled = LogisticRegression(random_state=42).fit(X_train_scaled, y_train) print("After Scaling - Training set score: {:.3f}".format(clf_scaled.score(X_train_scaled, y_train))) print("After Scaling - Test set score: {:.3f}".format(clf_scaled.score(X_test_scaled, y_test)))
從上述代碼的結果可以看出,經過歸一化後,分類模型在訓練集和測試集上的效果均有提升,證明了數據標準化對於提高模型的準確度的作用。
四、總結
本篇文章介紹了使用 Sklearn 對數據進行標準化的方法,並結合 iris 數據集實現了數據標準化的效果驗證。數據標準化是機器學習建模不可或缺的一步預處理操作,在大多數情況下,數據標準化可以幫助模型更好地學習特徵,提高模型的準確度。
原創文章,作者:MSUZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/138290.html