一、特征工程概述
“數據決定了機器學習的上限,而算法只是盡可能逼近這個上限”,這里的數據指的就是經過特征工程得到的數據。特征工程指的是把原始數據轉變為模型的訓練數據的過程,它的目的就是獲取更好的訓練數據特征,使得機器學習模型逼近這個上限。特征工程能使得模型的性能得到提升,有時甚至在簡單的模型上也能取得不錯的效果。特征工程在機器學習中占有非常重要的作用,一般認為括特征構建、特征提取、特征選擇三個部分。特征構建比較麻煩,需要一定的經驗。 特征提取與特征選擇都是為了從原始特征中找出最有效的特征。它們之間的區別是特征提取強調通過特征轉換的方式得到一組具有明顯物理或統計意義的特征;而特征選擇是從特征集合中挑選一組具有明顯物理或統計意義的特征子集。兩者都能幫助減少特征的維度、數據冗余,特征提取有時能發現更有意義的特征屬性,特征選擇的過程經常能表示出每個特征的重要性對於模型構建的重要性。本文主要嘗試總結幾個常用的特征提取和特征選擇的方法。
二、特征構建
特征構建是指從原始數據中人工的找出一些具有物理意義的特征。需要花時間去觀察原始數據,思考問題的潛在形式和數據結構,對數據敏感性和機器學習實戰經驗能幫助特征構建。除此之外,屬性分割和結合是特征構建時常使用的方法。結構性的表格數據,可以嘗試組合二個、三個不同的屬性構造新的特征,如果存在時間相關屬性,可以划出不同的時間窗口,得到同一屬性在不同時間下的特征值,也可以把一個屬性分解或切分,例如將數據中的日期字段按照季度和周期后者一天的上午、下午和晚上去構建特征。總之特征構建是個非常麻煩的問題,書里面也很少提到具體的方法,需要對問題有比較深入的理解。
三、特征提取
1. PCA主成分分析
PCA的思想是通過坐標軸轉換,尋找數據分布的最優子空間,從而達到降維、去相關的目的。下面的圖是直接從《機器學習實戰》中截取的,原始數據二維特征,三分類問題,左圖是原始數據。進行PCA特征轉換,第一個新坐標軸選擇的是原始數據中方差最大的方向(線B),第二個新坐標軸與第一個坐標軸正交且具有最大方差的方向(線C),當特征維度較多時,重復上述過程,會發現大部分的方差都包含在前幾個新的坐標軸中,通過選擇保留前N個坐標軸達到降維的效果,下面中上是特征轉換的圖右,中下是降維后的圖。在數學上,是先用原始數據協方差矩陣的前N個最大特征值對應的特征向量構成映射矩陣,然后原始矩陣左乘映射矩陣,從而對原始數據降維。下圖右面列出了兩個隨機變臉之間協方差的計算公式、怎么計算矩陣的協方差矩陣、矩陣的特征值、特征向量。特征向量可以理解為坐標准換中的新坐標軸的方向,特征值表示矩陣在對應的特征向量上的方差,特征值越大,方差越大,信息量越多。
2. LDA線性判別分析
LDA的原理是將帶上標簽的數據(點),通過投影的方法,投影到維度更低的空間,使得投影后的點,會形成按類別區分,相同類別的點,將會在投影后更接近,不同類別的點距離越遠。skearn網站上面有個例子介紹PCA與LDA的區別,分別通過PCA和LDA將4維特征三分類的Iris數據降維為2維特征,然后再進行分類,效果差不多,可視化出來發現有些不同,畢竟降維方式有些不同。
LDA算法的主要步驟:
1:分別計算每個類別i的原始中心點
2.類別i投影后的中心點為:
3.衡量類別i投影后,類別點之間的分散程度,用方差來表示:
4.使用下面的式子表示LDA投影到w后的損失函數,最大化J(W)就可以求出最優的w,具體解法參考博客:
3. ICA獨立成分分析
PCA特征轉換降維,提取的是不相關的部分,ICA獨立成分分析,獲得的是相互獨立的屬性。ICA算法本質尋找一個線性變換z = Wx,使得z的各個特征分量之間的獨立性最大。ICA相比與PCA更能刻畫變量的隨機統計特性,且能抑制噪聲。ICA算法聽着有點繞,ICA認為觀測到數據矩陣X是可以由未知的獨立元舉證S與未知的矩陣A相乘得到。ICA希望通過矩陣X求得一個分離矩陣W,使得W作用在X上所獲得的矩陣Y能夠逼近獨立源矩陣S,最后通過獨立元矩陣S表示矩陣X,所以說ICA獨立成分分析提取出的特征中的獨立部分。
四、特征選擇
特征選擇是剔除不相關或者冗余的特征,減少有效特征的個數,減少模型訓練的時間,提高模型的精確度。特征提取通過特征轉換實現降維,特征選擇則是依靠統計學方法或者於機器學習模型本身的特征選擇(排序)功能實現降維。特征選擇是個重復迭代的過程,有時可能自己認為特征選擇做的很好,但實際中模型訓練並不太好,所以每次特征選擇都要使用模型去驗證,最終目的是為了獲得能訓練出好的模型的數據,提升模型的性能。下面介紹幾個常用的方法
1. 運用統計學的方法,衡量單個特征與響應變量(Lable)之間的關系。
- 皮爾森相關系數(Pearson Correlation),衡量變量之間的線性關系,結果取值為[-1,1],-1表示完全負相關,+1表示正相關,0表示不線性相關,但是並不表示沒有其它關系。Pearson系數有一個明顯缺陷是,只衡量線性關系,如果關系是非線性的,即使連個變量具有一一對應的關系,Pearson關系也會接近0。皮爾森系數的公式為樣本共變異數除以X的標准差和Y的標准差的乘積。sklearn中可以直接計算兩個隨機變量之間的Pearson相關系數,例如下面計算X與X*X之間的相關系數約為0。
x = np.random.uniform(-1, 1, 100000)
print pearsonr(x, x**2)[0]
-0.00230804707612
- 最大信息系數(MIC)。最大信息系數是根據互信息得到的,下面是互信息公式。最大信息系數MIC不僅能像Pearson系數一樣度量變量之間的線性關系,還能度量變量之間的非線性關系。MIC雖然能度量變量之間的非線性關系,但當變量之間的關系接近線性相關的時候,Pearson相關系數仍然是不可替代的。第一、Pearson相關系數計算速度快,這在處理大規模數據的時候很重要。第二、Pearson相關系數的取值區間是[-1,1],而MIC和距離相關系數都是[0,1]。這個特點使得Pearson相關系數能夠表征更豐富的關系,符號表示關系的正負,絕對值能夠表示強度。當然,Pearson相關性有效的前提是兩個變量的變化關系是單調的。下面列舉了MIC和Pearson系數在變臉處於不同關系下的表現情況。
2. 基於機器學習模型的特征選擇
線性模型和正則化
當特征和響應變量之間全部都是線性關系,並且特征之間均是比較獨立的。可以嘗試使用線性回歸模型去做特征選擇,因為越是重要的特征在模型中對應的系數就會越大,而跟輸出變量越是無關的特征對應的系數就會越接近與0。在很多實際的數據當中,往往存在多個互相關聯的特征,這時候模型就會變得不穩定,數據中細微的變化就可能導致模型的巨大變化(模型的變化本質上是系數,或者叫參數,可以理解成W),這會讓模型的預測變得困難,這種現象也稱為多重共線性。例如,假設我們有個數據集,它的真實模型應該是Y=X1+X2,當我們觀察的時候,發現Y’=X1+X2+e,e是噪音。如果X1和X2之間存在線性關系,例如X1約等於X2,這個時候由於噪音e的存在,我們學到的模型可能就不是Y=X1+X2了,有可能是Y=2X1,或者Y=-X1+3X2。通過在模型中加入正則化項,也能起到特征選擇的作用。L1正則化學到的是比較稀疏的模型,控制懲罰項系數alpha,會迫使那些弱的特征所對應的系數變為0,這個特征使得L1正則化成為一種很好的特征選擇方法。L2正則化會使得系數的取值變得平均,對於關聯特征,這意味則他們能夠獲得更加相近的對應系數。
隨機森林模型
隨機森林由多棵決策樹構成,決策樹中的每個節點,都是關於某個特征的條件,利用不純度可以確定划分數據集的最優特征,對於分類問題,通常采用基尼不純度或者信息增益,對於回歸問題,通常采用方差或者最小二乘擬合。當訓練決策樹的時候,可以計算出每個特征減少了多少樹的不純度。對於一個決策樹森林來說,可以算出每個特征平均減少了多少不純度,並把它平均減少的不純度作為特征選擇的值。
另一種常用的特征選擇方法就是直接度量每個特征對模型精確率的影響。主要思路是打亂每個特征的特征值順序,並且度量順序變動對模型的精確率的影響。很明顯,對於不重要的變量來說,打亂順序對模型的精確率影響不會太大,但是對於重要的變量來說,打亂順序就會降低模型的精確率。
要記住:1、這種方法存在偏向,對具有更多類別的變量會更有利;2、對於存在關聯的多個特征,其中任意一個都可以作為指示器(優秀的特征),並且一旦某個特征被選擇之后,其他特征的重要度就會急劇下降,因為不純度已經被選中的那個特征降下來了,其他的特征就很難再降低那么多不純度了,這樣一來,只有先被選中的那個特征重要度很高,其他的關聯特征重要度往往較低。在理解數據時,這就會造成誤解,導致錯誤的認為先被選中的特征是很重要的,而其余的特征是不重要的,但實際上這些特征對響應變量的作用確實非常接近的(這跟Lasso是很像的)。
特征工程內容很多,關系特征選,強烈建議仔細看結合Scikit-learn介紹幾種常用的特征選擇方法,則篇干貨的結尾有個例子比較了集中特征方法對每個特征的評分,非常值得學習,就我自己而言由於很少碰到線性問題,所以使用RF做特征選擇的情況會多一些。
參考資料:
1. 特征工程技術和方法概括總結:http://blog.csdn.net/jasonding1354/article/details/47171115
2. 干貨:結合Scikit-learn介紹幾種常用的特征選擇方法:http://dataunion.org/14072.html
3. 參考資料2的英文原版:http://machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/
4. 機器學習之特征工程:http://www.csuldw.com/2015/10/24/2015-10-24%20feature%20engineering/
5. 特征提取與特征選擇: http://lanbing510.info/2014/10/22/Feature-Extraction-Selection.html
6. PCA與LDA:http://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html