機器學習入門系列(2)--如何構建一個完整的機器學習項目,第五篇!
該系列的前四篇文章:
本篇文章會繼續介紹特徵工程的內容,這次會介紹特徵縮放和特徵編碼,前者主要是歸一化和正則化,用於消除量綱關係的影響,後者包括了序號編碼、獨熱編碼等,主要是處理類別型、文本型以及連續型特徵。
特徵縮放主要分為兩種方法,歸一化和正則化。
3.常用的兩種歸一化方法:
[0,1]
其中 X 是原始數據, 分別表示數據最大值和最小值。
4.如果數據集分為訓練集、驗證集、測試集,那麼三個數據集都採用相同的歸一化參數,數值都是通過訓練集計算得到,即上述兩種方法中分別需要的數據最大值、最小值,方差和均值都是通過訓練集計算得到(這個做法類似於深度學習中批歸一化,BN的實現做法)。
5.歸一化不是萬能的,實際應用中,通過梯度下降法求解的模型是需要歸一化的,這包括線性回歸、邏輯回歸、支持向量機、神經網路等模型。但決策樹模型不需要,以 C4.5 演算法為例,決策樹在分裂結點時候主要依據數據集 D 關於特徵 x 的信息增益比,而信息增益比和特徵是否經過歸一化是無關的,歸一化不會改變樣本在特徵 x 上的信息增益。
假設數據集為:
對樣本首先計算 Lp 範數,得到:
正則化後的結果是:每個屬性值除以其 Lp 範數
2.正則化的過程是針對單個樣本的,對每個樣本將它縮放到單位範數。
3.通常如果使用二次型(如點積)或者其他核方法計算兩個樣本之間的相似性時,該方法會很有用。
定義:序號編碼一般用於處理類別間具有大小關係的數據。
比如成績,可以分為高、中、低三個檔次,並且存在「高>中>低」的大小關係,那麼序號編碼可以對這三個檔次進行如下編碼:高表示為 3,中表示為 2,低表示為 1,這樣轉換後依然保留了大小關係。
定義:獨熱編碼通常用於處理類別間不具有大小關係的特徵。
獨熱編碼是採用 N 位狀態位來對 N 個可能的取值進行編碼。比如血型,一共有 4 個取值(A、B、AB 以及 O 型),那麼獨熱編碼會將血型轉換為一個 4 維稀疏向量,分別表示上述四種血型為:
獨熱編碼的優點有以下幾個:
當然,獨熱編碼也存在一些缺點:
1.高維度特徵會帶來以下幾個方面問題:
2.決策樹模型不推薦對離散特徵進行獨熱編碼,有以下兩個主要原因:
是否 A 型、是否 B 型、是否 AB 型、是否 O 型
本質是因為獨熱編碼之後的特徵的表達能力較差。該特徵的預測能力被人為的拆分成多份,每一份與其他特徵競爭最優劃分點都失敗。最終該特徵得到的重要性會比實際值低。
二進位編碼主要分為兩步:
繼續以血型為例子,如下表所示:
從上表可以知道,二進位編碼本質上是利用二進位對類別 ID 進行哈希映射,最終得到 0/1 特徵向量,並且特徵維度小於獨熱編碼,更加節省存儲空間。
定義:特徵二元化就是將數值型的屬性轉換為布爾型的屬性。通常用於假設屬性取值分佈是伯努利分佈的情形。
特徵二元化的演算法比較簡單。對屬性 j 指定一個閾值 m。
j
m
根據上述定義,m 是一個關鍵的超參數,它的取值需要結合模型和具體的任務來選擇。
定義:顧名思義,離散化就是將連續的數值屬性轉換為離散的數值屬性。
那麼什麼時候需要採用特徵離散化呢?
這背後就是需要採用「海量離散特徵+簡單模型」,還是「少量連續特徵+複雜模型」的做法了。
分桶
1.離散化的常用方法是分桶:
M
k
2.分桶的數量和邊界通常需要人工指定。一般有兩種方法:
3.選擇分桶大小時,有一些經驗指導:
特性
1.在工業界很少直接將連續值作為邏輯回歸模型的特徵輸入,而是將連續特徵離散化為一系列 0/1 的離散特徵。
其優勢有:
[30,100)
N
N+M
j,k
N*M
2.特徵離散化簡化了邏輯回歸模型,同時降低模型過擬合的風險。
能夠對抗過擬合的原因:經過特徵離散化之後,模型不再擬合特徵的具體值,而是擬合特徵的某個概念。因此能夠對抗數據的擾動,更具有魯棒性。
另外它使得模型要擬合的值大幅度降低,也降低了模型的複雜度。
特徵縮放是非常常用的方法,特別是歸一化處理特徵數據,對於利用梯度下降來訓練學習模型參數的演算法,有助於提高訓練收斂的速度;而特徵編碼,特別是獨熱編碼,也常用於對結構化數據的數據預處理。
參考:
歡迎關注我的微信公眾號--機器學習與計算機視覺,或者掃描下方的二維碼,大家一起交流,學習和進步!
推薦閱讀: