在這篇文章中,我們將討論什麼是特徵縮放以及為什麼我們在機器學習中需要特徵縮放。我們還將討論數據的標準化,以及使用scikit-learn實現同樣的標準化。
特徵縮放是對輸入數據進行標準化/規範化所需要的重要預處理之一。當每一列的值範圍非常不同時,我們需要將它們擴展到公共級別。這些值重新規劃成公共水平,然後我們可以對輸入數據應用進一步的機器學習算法。
我們有不同的特徵,其中一個特徵的數據可能以公裡表示,另一列的數據可能以米表示,最後一列的數據可能以釐米表示。在將算法應用到數據上之前,首先需要將數據放到「米」、「公裡」或「釐米」的公共尺度上進行有效的分析和預測。
縮放前輸入數據
在上面的數據集中,我們可以看到列1和列2中的值有非常不同的範圍。第一列值表示年齡在30到90歲之間,而工資值在30000到15000之間變化。所以兩列值的比例是截然不同的。在進一步分析之前,我們需要將其調整到相同的範圍。
縮放後的輸出
縮放值的一種方法是將所有列的值從0到1或者我們可以將它們的值放在-3到3之間。將值更新到新的範圍的過程通常稱為Normalization 或 Standardization.。
下面是標準縮放後的數據輸出。從數據中可以看出,所有的值都在-3到3之間。
數據標準化後的數據如下。可以看出,年齡和薪水的數據介於0到1之間。
要獲得正確的預測和結果,就需要特徵縮放。如果某一列的值與其他列相比非常高,則具有更高值的列的影響將比其他低值列的影響高得多。高強度的特徵比低強度的特徵重得多,即使它們在確定輸出中更為關鍵。因此,預測可能無法給出預期的結果,並且可能無法滿足業務用例。
機器學習算法也可能對範圍較小的列不敏感,並可能導致不一致
總而言之,功能縮放是必需的,因為:
回歸係數直接受特徵範圍的影響
具有較高比例的功能比具有較低比例的功能更重要
如果我們具有縮放值,則可以輕鬆實現漸變下降
如果按比例縮放,某些算法將減少執行時間。
一些算法基於歐幾裡得距離,歐幾裡得距離對特徵尺度非常敏感。
不同的特徵縮放技術我們可以使用不同的縮放技術來縮放輸入數據集。我們可以應用以下任一方法:
Normalization 或 Standardization
什麼是歸一化(Normalization )?歸一化是在0到1之間縮放要素值歸一化。這稱為最小-最大縮放。
在上式中:
Xmax和Xmin是功能列的最大值和最小值
X的值始終在最小值和最大值之間
使用Scikit Learn進行數據歸一化
以下是使用Scikit Learn進行歸一化的簡單實現。
import pandas
import numpy as np
dataset = pandas.read_csv("./data/FirstDataset.csv")
X = dataset.iloc[:, :].values
from sklearn.preprocessing import MinMaxScaler
norm = MinMaxScaler()
X[:, 1:3] = norm.fit_transform(X[:, 1:3])
print(X)什麼是機器學習的標準化?
標準化基於標準偏差。它衡量功能中價值的傳播。這是最常用的之一。
在標準縮放過程中,我們將特徵的均值偏移為0,標準偏差為1。應用標準縮放器時,我們獲得的值在-3到3範圍內
當對特徵值應用標準偏差時,特徵集中值的99.7%介於-3 SD(標準偏差)至3 SD(標準偏差)之間。
讓我們看一下示例:
在上述情況下,值在-3到3之間標準化,因此減小了數據列中值的範圍。縮放這些值後,可以將其輸入到機器學習算法進行進一步分析。
import pandas
import numpy as np
dataset = pandas.read_csv("./data/FirstDataset.csv")
X = dataset.iloc[:, :].values
from sklearn.preprocessing import StandardScaler
norm = StandardScaler()
X[:, 1:3] = norm.fit_transform(X[:, 1:3])
print(X)在Scikit-Learn中應用Standard Scaler
當數據遵循高斯曲線時,我們可以應用標準縮放器。如果數據遵循高斯曲線,則標準偏差變得易於計算且有效,並且在預測時會給出出色的結果。
對特徵縮放敏感的算法下面給出了一些對特徵縮放非常敏感的算法。這些算法對特徵縮放很敏感,因為它們取決於距離和高斯曲線。
線性和邏輯回歸
神經網絡
支持向量機
K均值聚類
K最近鄰居
主成分分析
對特徵縮放不敏感的算法
對特徵縮放不敏感的算法通常是「基於樹的」算法
標準化和歸一化這些關鍵字經常可互換使用。雖然歸一化是在0到1之間縮放值,但是標準化大約是將平均值設為0,將標準偏差設為1。在確定我們需要標準化還是歸一化時,需要考慮一些要點。
當數據代表高斯曲線時,可以使用標準化
標準化不受異常值的影響。
歸一化對異常值的影響很高
非高斯曲線表示時的歸一化效果很好
作者:Mayank Gupta
deephub翻譯組
京東購書,贈送超值禮包