- 機器學習:使用OpenCV、Python和scikit-learn進行智能圖像處理(原書第2版)
- (印)阿迪蒂亞·夏爾馬 維什韋什·拉維·什里馬利 (美)邁克爾·貝耶勒
- 1802字
- 2020-11-24 18:13:03
4.3 數據預處理
我們正在處理的數據訓練得越好,最終可能得到的結果也就越好。這個過程的第一步稱為數據預處理(data preprocessing),(至少)有3種不同的形式:
- 數據格式化:數據的格式可能不適合我們使用,例如,可能以專有文件格式提供數據,而我們最喜歡使用的機器學習算法卻不理解這種格式。
- 數據清洗:數據可能包含無效記錄或者缺失記錄,它們需要清除或者刪除。
- 數據采集:對于我們特定目的來說,數據可能太大了,這就迫使我們對數據進行智能采集。
數據預處理后,我們就可以開始實際的特征工程了:變換預處理數據以適應我們特定的機器學習算法。這一步通常涉及3個可能過程中的一個或者多個:
- 縮放(scaling):通常,某些機器學習算法要求數據在一個通用的范圍內,如零均值和單位方差??s放就是將所有特征(可能有不同的物理單元)放入一個通用取值范圍的過程。
- 分解(decomposition):通常,數據集有很多我們無法處理的特征。特征分解是將數據壓縮成數量更少、信息更豐富的數據分量的過程。
- 聚合(aggregation):有時,可以將多個特征組合成一個更有意義的特征。例如,一個數據庫可能包含登錄到基于Web系統的每個用戶的日期和時間。根據不同的任務,通過簡單地計算每個用戶的登錄次數,可以更好地表示這些數據。
讓我們更深入地看看其中一些過程。
4.3.1 特征標準化
標準化(standardizing)是指將數據按比例縮放到零均值和單位方差的過程。這是許多機器學習算法的共同需求,如果單個特征不能滿足這一需求,那么這些算法的性能可能會很糟糕。我們可以手動標準化我們的數據,每個數據點減去所有數據的均值(μ)再除以數據的方差(σ);即對于每個特征x,我們可以計算(x–μ)/σ。
另外,scikit-learn在其preprocessing模塊中提供了這個過程的一個簡單實現。
讓我們考慮一個3×3的數據矩陣X,它表示3個數據點(行),其中每個數據點有3個任意選擇的特征值(列):

然后,利用scale函數可以實現對數據矩陣X的標準化:

我們通過再次檢查均值和方差來驗證縮放的數據矩陣X_scaled確實是標準化的。標準化特征矩陣每一行的均值應該是(接近)0:

請注意,上面代碼中的axis=0表示行。圖4-2有助于更好地理解這一點。

圖4-2 標準化特征矩陣示例
同樣,標準化特征矩陣的每一行的方差應該是1(與使用std檢查標準差為1相同):

4.3.2 特征歸一化
與標準化類似,歸一化(normalization)是將單個樣本縮放到一個單位范數的過程。相信你知道范數表示一個向量的長度,可以用不同的方式定義范數。在第3章中我們討論了其中的兩個范數:L1范數(或者曼哈頓距離)和L2范數(或者歐氏距離)。
在scikit-learn中,我們的數據矩陣X可以使用normalize函數進行歸一化,L1范數由norm關鍵字指定:

類似地,可以通過指定norm='12'來計算L2范數:

4.3.3 將特征縮放到一個范圍
將特征縮放到零均值和單位方差的另一種方法是使特征位于給定的最小值和最大值之間。通常,這些值是0和1,這樣就可以將每個特征的最大絕對值縮放到單位大小。在scikit-learn中,這可以使用MinMaxScaler來實現:

默認情況下,數據將被縮放到0到1之間。通過向MinMaxScaler構造函數傳遞一個關鍵字參數feature_range,我們可以指定各種范圍:

4.3.4 特征二值化
最后,我們可能會發現自己不太關心數據的準確特征值,只想知道某個特征值是否存在。通過對特征值進行閾值化,可以實現數據的二值化。讓我們快速回顧一下特征矩陣X:

假設這些數字表示我們銀行賬戶中的數千美元。如果一個人的賬戶超過0.5萬美元,我們就認為他是個富人,用1來表示。否則,就用0表示。這類似于用threshold=0.5對數據進行閾值處理:

結果是一個完全由1和0組成的矩陣。
4.3.5 缺失數據的處理
特征工程中另一個常見需求是缺失數據的處理。例如,我們可能有這樣一個數據集:

大多數機器學習算法不能處理Not a Number(NAN)值(Python中的nan)。因此首先我們必須用一些恰當的填充值替換所有nan值。這就是缺失值的估算。
scikit-learn提供了3種不同的策略來估算缺失值:
- mean:用矩陣一個指定軸上的平均值(默認axis=0)替換所有的nan值。
- median:用矩陣一個指定軸上的中值(默認axis=0)替換所有的nan值。
- most_frequent:用矩陣一個指定軸上的最頻繁值(默認axis=0)替換所有的nan值。
例如,可以用下列方法調用mean估算:

用填充值替換這兩個nan值,該填充值等于沿相應列計算的平均值。通過計算第1列(沒有計算第1個元素X[0,0])的平均值,并將這個值與矩陣中的第1個元素(X2[0,0])進行比較,我們可以復查數學計算的正確性:

類似地,median策略依賴于相同的代碼:

讓我們再來復查一下這個數學運算。這次,我們不再計算第1列的平均值,而是計算中值(不包括X[0,0]),我們將結果與X3[0,0]進行比較。我們發現這兩個值是相同的,這使我們相信,估算與預期一致:

- Maya模型材質設計與制作標準實訓教程(職業技能競爭力課程解決方案)
- 數字圖像處理技術:基于Python的實現
- WOW!Photoshop+Illustrator特效設計
- 短視頻拍攝與制作實訓教程
- 中文版3ds Max 2013/VRay效果圖制作從新手到高手
- Illustrator CS6中文版圖形設計實戰從入門到精通
- 影視后期制作基礎與應用教程(After Effects CS5)
- Maya渲染合成設計與制作標準實訓教程(職業技能競爭力課程解決方案)
- 錦繡年華:古風短視頻策劃、拍攝與后期制作全流程精解
- 中文版Premiere Pro 2020基礎培訓教程(全彩版)
- After Effects CS6從新手到高手
- 精通Matlab數字圖像處理與識別
- 圖形圖像處理
- 手機攝影與短視頻后期處理228例
- 數字圖像處理與分析基礎:MATLAB和VC++實現