##基礎概念
特征工程是通過對原始數據的處理和加工,將原始數據屬性通過處理轉換為數據特征的過程,屬性是數據本身具有的維度,特征是數據中所呈現出來的某一種重要的特性,通常是通過屬性的計算,組合或轉換得到的。比如主成分分析就是將大量的數據屬性轉換為少數幾個特征的過程。某種程度而言,好的數據以及特征往往是一個性能優秀模型的基礎。
既然叫特征工程,自然涵蓋了很多內容,而其中涉及到的比較重要的部分是特征的處理及選擇。
特征處理包含:
- 數據清洗
- 數據規范化
- 特征衍生與提取
特征選擇包含:
- 特征過濾
- wrapper method
- embedded method
##數據清洗
數據清洗是指發現並糾正數據文件中可識別的錯誤以及通過處理得到建模過程需要數據的過程。
數據清洗包含:
- 缺失值處理
- 異常值檢測與處理
- 調配樣本比例和權重
###缺失值處理
缺失值是指粗糙數據中由於缺少信息而造成的數據的聚類、分組、刪失或截斷。它指的是現有數據集中某個或某些屬性的值是不完全的。
缺失值的處理目前主要有兩種方法:刪除缺失值和填充缺失值
1.刪除缺失值
如果一個樣本或變量中所包含的缺失值超過一定的比例,比如超過樣本或變量的一半,此時這個樣本或變量所含有的信息是有限的,如果我們強行對數據進行填充處理,可能會加入過大的人工信息,導致建模效果打折扣,這種情況下,我們一般選擇從數據中剔除整個樣本或變量,即刪除缺失值。
2.缺失值填充
-
隨機填充法
從字面上理解就是找一個隨機數,對缺失值進行填充,這種方法沒有考慮任何的數據特性,填充后可能還是會出現異常值等情況,一般情況下不建議使用。
-
均值填充法
尋找與缺失值變量相關性最大的那個變量把數據分成幾個組,然后分別計算每個組的均值,然后把均值填入缺失的位置作為它的值,如果找不到相關性較好的變量,也可以統計變量已有數據的均值,然后把它填入缺失位置。這種方法會在一定程度上改變數據的分布。
-
最相似填充法
在數據集中找到一個與它最相似的樣本,然后用這個樣本的值對缺失值進行填充。
與均值填充法有點類似,尋找與缺失值變量(比如x)相關性最大的那個變量(比如y),然后按照變量y的值進行排序,然后得到相應的x的排序,最后用缺失值所在位置的前一個值來代替缺失值。
-
回歸填充法
把缺失值變量作為一個目標變量y,把缺失值變量已有部分數據作為訓練集,尋找與其高度相關的變量x建立回歸方程,然后把缺失值變量y所在位置對應的x作為預測集,對缺失進行預測,用預測結果來代替缺失值。
-
k近鄰填充法
利用knn算法,選擇缺失值的最近k個近鄰點,然后根據缺失值所在的點離這幾個點距離的遠近進行加權平均來估計缺失值。
###異常值檢測與處理
異常值(outlier)是指一組測定值中與平均值的偏差超過兩倍標准差的測定值,與平均值的偏差超過三倍標准差的測定值,稱為高度異常的異常值。異常值的產生一般由系統誤差、人為誤差或數據本身的變異引起的。
-
單變量異常值檢測(格拉布斯法)
首先,將變量按照其值從小到大進行順序排列x1,x2.....xn
其次,計算平均值x拔和標准差S,
同時計算偏離值,即平均值與最大值之差和平均值與最小值之差,然后確定一個可疑值,一般是偏離平均值較大的那個。
計算統計量gi(殘差與標准差的比值),i為可疑值的序列號。
再者,將gi與格拉布斯表給出的臨界值GP(n)比較,如果計算的Gi值大於表中的臨界值GP(n),則能判斷該測量數據是異常值,可以剔除。這里臨界值GP(n)與兩個參數有關:檢出水平α和測量次數n 。
檢出水平α:如果要求嚴格,檢出水平α可以定得小一些,例如定α=0.01,那么置信概率P=1-α=0.99;如果要求不嚴格,α可以定得大一些,例如定α=0.10,即P=0.90;通常定α=0.05,P=0.95。
-
多變量異常值檢測(基於距離計算)
基於距離的多變量異常值檢測類似與k近鄰算法的思路,一般的思路是計算各樣本點到中心點的距離,如果距離太大,則判斷為異常值,這里距離的度量一般使用馬氏距離(Mahalanobis Distance)。因為馬氏距離不受量綱的影響,而且在多元條件下,馬氏距離還考慮了變量之間的相關性,這使得它優於歐氏距離。
-
異常值處理
單變量的情況下異常值可以考慮類似缺失值的刪除法、均值填充法或回歸填充法,而多變量的情況下,可以嘗試用均值向量填充或者刪除。
總的來說,缺失值和異常值的處理要根據實際的情況確定合適的方法,因為某些情況下異常值剛好能夠反應一些現實問題。
###調配樣本比例和權重
當數據集中出現樣本不均衡情況時,需要調配樣本的比例以及權重,以便能夠訓練出性能更優的模型,具體方法參考上一篇文章:機器學習中的類別不均衡問題
http://www.cnblogs.com/wkslearner/p/8870673.html
##數據規范化
在機器學習中,由於不同模型的需要,我們經常要多數據做不同的規范化處理,以便能夠得到性能更優的模型。
在數據處理中,經常會接觸到的數據規范化操作有:
- 數據無量綱化
- 連續變量離散化
- 離散變量處理
###數據無量綱化
無量綱化使不同規格的數據轉換到同一規格,在某些比較和評價的指標處理中經常會用到,去除數據的單位限制,將其轉化為無量綱的純數值,便於不同單位或量級的指標能夠進行比較和加權。
數據無量綱化常用方法有:
- 標准化方法
- 極值化方法
- 均值化方法
- 標准差化方法
####1.標准化方法
標准化方法是將變量的每個值與其平均值之差除以該變量的標准差,無量綱化后變量的平均值為0,標准差為1。使用該方法無量綱化后不同變量間的均值和標准差都相同,即同時消除了變量間變異程度上的差異。
標准化公式為:
2.極值化方法
極值化方法通常是通過變量取值的最大值和最小值將原始數據轉換為特定范圍內的數據,從而消除量綱和數量級的影響。這種方法十分依賴兩個極端值。
通常情況下極值化方法有3種方式:
第一種方法,是將變量的值除以該變量的全距,標准化后每個變量的取值范圍在[-1,1]。
公式為:
第二種方法,是將變量值與最小值之差除以該變量的全距,標准化后取值范圍在[0,1]。
公式為:
第三種方法,是將變量值除以該變量的最大值,標准化后變量的最大取值為1。
公式為:
3.均值化方法
均值化方法是將變量值直接除以該變量的平均值,跟標准化方法不同的是,均值化方法能夠保留變量間取值差異程度的信息。
均值化方法公式:
4.標准差化方法
標准差化方法是標准化方法的一種變形,標准差化方法是直接將變量值除以標准差,而不是減去均值后再除以標准差。標准差化方法無量綱化后變量的均值為原始變量均值與標准差的比值,而不是0。
公式為:
###連續變量離散化
在使用某些算法時,我們需要把連續變量轉換為離散變量,在一些情況下離散變量能夠簡化模型計算同時能夠提升模型的穩定性,比如邏輯回歸經常使用離散后的變量進行訓練,能夠體現模型的訓練速度以及提升模型的可解釋性。
連續變量離散化大致有兩類方法:
- 卡方檢驗方法
- 信息增益方法
####1.卡方檢驗方法
通常情況下,將變量按照值大小進行排列,將每個值作為一個組,然后對每一對相鄰的組計算卡方值,對其中最小的一對組合進行合並,接下來不斷重復以上操作,直到滿足我們設定的某一個條件,比如最小分組數5,即將連續變量分為5組。
卡方統計量是指數據的分布與所選擇的預期或假設分布之間的差異的度量。它是由各項實際觀測次數(fo )與理論分布次數(fe )之差的平方除以理論次數,然后再求和而得出的,其計算公式為:
卡方值包含兩個信息:
- 實際值與理論值偏差的絕對大小。
- 差異程度與理論值的相對大小。
####2.信息增益方法
信息增益方法是使用信息計算確定分割點的自上而下的分裂技術。
首先是把每個值看成分割點,將數據分成兩個部分,在多種可能的分法中選擇產生最小信息熵的分法。然后在分成的兩個區間中,尋找最大熵區間,繼續進行按前面的方法進行分割,直到滿足條件為止,比如滿足指定個數時結束過程。
數據的信息屬性是與任務相關的,對於分類任務, 標簽值y包含的信息量為:
其中, p(y)為y出現的概率. p(y)越小, y包含的信息量越大. 這是符合直覺的.
熵定義為信息的期望值.
一個可以分為m類的數據集S, 它的信息熵為隨機得到的一個label包含的信息量的期望值:
數據集的信息熵代表這個數據集的混亂程度. 熵越大, 越混亂.
若按照某種特定的方式, 例如按照某一屬性的值對S進行划分, 得到n個子集。新的子集們都有自己的信息熵, 它們的熵的和與原S的熵的差值就是這個划分操作帶來的信息熵增益.
###離散變量處理
在某些情況下,比如回歸建模時,我們通常需要將分類變量量化處理或離散變量啞變量化。
分類變量分為兩種:有序分類變量和無序分類變量,在引入模型是我們通常需要對其進行量化處理,轉化為離散變量,比如疾病的嚴重程度輕微,中度,重度,量化后用1,2,3來代替。但無序的分類變量,比如血型A,B,O型,如果我們也用1,2,3表示就不合理了,因為血型之間並不存在遞進的關系。
此時我們需要對離散變量進行進一步的處理,即啞變量化。
啞變量(Dummy Variable),又稱為虛擬變量、虛設變量或名義變量,通常取值為0或1,來反映某個變量的不同屬性。對於有n個分類屬性的自變量,通常需要選取1個分類作為參照,因此可以產生n-1個啞變量。
啞變量化后,特征就變成了稀疏的了。這有兩個好處,一是解決了模型不好處理屬性數據的問題,二是在一定程度上也起到了擴充特征的作用。
##特征衍生與提取
在建模過程中,我們通常會遇到一些問題,現有特征的顯著性不高或者特定算法的需要,我們需要從現有數據中構造一些特征,有時又可能因為特征過多,而需要降維處理,一般的方法是從眾多特征中提取出特征的共性,然后進行建模。
###特征衍生
特征衍生一般是對原有的特征進行轉換,計算以及組合而產生的新的特征。
-
單一變量的基礎轉換,比如通過對單一變量進行平方,開根號,log轉換等。
-
變量通過添加時間維度進行衍生,比如3個月交易數據,6個月交易數據等。
-
多變量的運算,比如兩個變量相加,相乘或變量間計算一個比率后得到新變量。
當然特征衍生的方式各種各樣,具體還是要看業務場景的需要,然后做相應的處理。
###特征提取
特征提取是從原始特征中找出最有效的特征,這種做法的目的是降低數據冗余,減少模型計算,發現更有意義的特征等。
特征提取分為:
- 線性特征提取
- 非線性特征提取
####線性特征提取
線性特征提取一般方法有PCA-主成分分析,LDA-線性判別分析,ICA-獨立成分分析等
####1.PCA-主成分分析
主成分分析的原理是將一個高維向量x,通過一個特殊的特征向量矩陣U,投影到一個低維的向量空間中,表征為一個低維向量y,並且僅僅損失了一些次要信息。也就是說,通過低維表征的向量和特征向量矩陣,可以基本重構出所對應的原始高維向量。
PCA的算法步驟:
- 去平均值,對每一個特征減去各自的平均值
- 計算協方差矩陣
- 計算協方差矩陣的特征值及對應的特征向量
- 將特征向量按對應特征值從大到小進行排序,取靠前的k個特征向量
- 將數據轉換到k個特征向量構建的新空間中,即為降維到k維后的數據
####2.LDA-線性判別分析
LDA是一種監督學習的降維技術,也就是說它的數據集的每個樣本是有類別輸出的。這點和PCA不同。PCA是不考慮樣本類別輸出的無監督降維技術。LDA是通過將數據在低緯度上進行投影,投影后希望每一種類別數據的投影點盡可能的接近,而不同類別的數據的類別中心之間的距離盡可能的大。
LDA的算法步驟:
- 計算類內散度矩陣
- 計算類間散度矩陣
- 計算類內散度矩陣的逆與類間散度矩陣的乘積
- 計算乘積結果的最大特征值及其對應的特征向量,得到投影矩陣
- 將數據集中的每一個樣本特征轉換為新樣本
- 輸出得到新數據集
##特征選擇
特征選擇的一般過程是這樣的,首先是從特征全集中產生出一個特征子集,篩選過程采用某種評價標准,把符合標准的特征篩選出來,同時對篩選出來的特征進行有效性驗證。
產生特征子集一般是一個搜索的過程,搜索空間中的每個狀態就是一個特征子集,搜索算法分為完全搜索,啟發式搜索和隨機搜索。
特征選擇的過程可分為,特征過濾,wrapper及embedded。
###特征過濾
特征過濾是選定一個指標來評估特征,根據指標值來對特征進行重要性排序,去掉達不到指標的特征,評價指標包含方差,相關性,信息增益等。
-
基於方差的特征過濾:計算每個特征的方差大小進行排序,然后按照特定的閾值或者特征個數進行篩選,方差的大小實際上表示的是變量所含有的信息量,方差較小可能的表現是變量的取值比較單一,對於我們區分目標變量的用處不大,因而可以選擇剔除。
-
相關性特征過濾:計算各個特征對目標特征的相關系數以及相關系數的P值,選擇顯著性高的特征。
-
基於信息增益的特征過濾:計算包含每個特征帶來信息增益的大小,並以此來判斷每個特征對於我們分類器所提供信息量的大小,信息增益越大,說明該特征對於分類結果正確提供的幫助越大。
###Wrapper Method
Wrapper方與特征過濾不同,它不單看特征和目標直接的關聯性,而是從添加這個特征后模型最終的表現來評估特征的好壞。而在一個特征空間中,產生特征子集的過程可以看成是一個搜索問題。目前主要用的一個Wrapper方法是遞歸特征消除法。
遞歸特征消除的主要思想是不斷使用從特征空間中抽取出來的特征子集構建模型,然后選出最好的的特征,把選出來的特征放到一遍,然后在剩余的特征上重復這個過程,直到所有特征都遍歷了。這個過程中特征被消除的次序就是特征的排序。這是一種尋找最優特征子集的貪心算法。
###Embedded Method
Embedded方法是在模型構建的同時選擇最好的特征。最為常用的一個Embedded方法就是:正則化。正則化就是把額外的約束或者懲罰項加到已有模型的損失函數上,以防止過擬合並提高泛化能力。正則化分為L1正則化(Lasso)和L2正則化(Ridge回歸)。
L1正則化是將所有系數的絕對值之和乘以一個系數作為懲罰項加到損失函數上,現在模型尋找最優解的過程中,需要考慮正則項的影響,即如何在正則項的約束下找到最小損失函數。同樣的L2正則化也是將一個懲罰項加到損失函數上,不過懲罰項是參數的平方和。其他還有基於樹的特征選擇等。