|
機器學(xué)習(xí)中,特征選擇是特征工程中的重要問題(另一個重要的問題是特征提?。?,坊間常說:數(shù)據(jù)和特征決定了機器學(xué)習(xí)的上限,而模型和算法只是逼近這個上限而已。由此可見,特征工程尤其是特征選擇在機器學(xué)習(xí)中占有相當重要的地位。 強烈推薦一篇博文,說如何進行特征選擇的: http:///discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/ 下面進入正題(一下內(nèi)容屬于半成品,還在修改中.....) 對于一個訓(xùn)練集,每個記錄包含兩部分,1是特征空間的取值,2是該記錄的分類標簽 一般情況下,機器學(xué)習(xí)中所使用特征的選擇有兩種方式,一是在原有特征基礎(chǔ)上創(chuàng)造新特征,比如決策樹中信息增益、基尼系數(shù),或者LDA(latent dirichlet allocation)模型中的各個主題,二是從原有特征中篩選出無關(guān)或者冗余特征,將其去除后保留一個特征子集。 本文詳細說下第二種方法。 一般來說,進行特征集選擇有三條途徑,filter,wrapper, 所謂filter就是衡量每個特征的重要性,然后對其進行排序,篩選的時候或者選擇前N個,或者前%X。 常用于衡量特征重要程度的方法,PCA/FA/LDA(linear discriminal analysis)以及卡方檢測/信息增益/相關(guān)系數(shù) 而wrapper是將子集的選擇看作是一個搜索尋優(yōu)問題,生成不同的組合,對組合進行評價,再與其他的組合進行比較。這樣就將子集的選擇看作是一個是一個優(yōu)化問題,這里有很多的優(yōu)化算法可以解決,比如GA/PSO/DE/ABC[1]. 下面舉一個例子來說一下特征選擇 數(shù)據(jù)集中的每個特征對于數(shù)據(jù)集的分類貢獻并不一致,以經(jīng)典iris數(shù)據(jù)集為例,這個數(shù)據(jù)集包括四個特征: sepal length,sepal width,petal length,petal width, 有三個分類,setoka iris,versicolor iris和virginica iris 這四個特征對分類的貢獻如下圖所示:
下面我們做幾個測試,使用四個特征集 第一個:所有特征 Accuracy: 94.44% (+/- 3.51%), all attributes
第二個:兩個特征,petal width and petal width,雖然準確率和第一個沒區(qū)別,但方差變大,也就是說分類性能不穩(wěn)定
Accuracy: 94.44% (+/- 6.09%), Petal dimensions (column 3 & 4) 使用PCA方法,從新特征中找出權(quán)重TOP2的, Accuracy: 85.56% (+/- 9.69%), PCA dim. red. (n=2) 使用LDA(不是主題模型的LDA)方法,從新特征中找出權(quán)重TOP2的, Accuracy: 96.67% (+/- 4.44%), LDA dim. red. (n=2) 那么我們?nèi)滩蛔栆粋€問題,是不是選擇全部特征集,模型準確率最高,如果不是這樣,蠻究竟選擇什么樣的特征集時準確率最高? 這里有一個圖,橫軸是所選擇的特征數(shù)目,縱軸是交叉驗證所獲得的準確率,從中可以看到,并非選擇了全部特征,準確率最高,當少數(shù)幾個特征就可以得到最高準確率時候,選擇的特征越多,反倒畫蛇添足了。 PS兩塊小內(nèi)容:(1) 如何進行交叉驗證 將數(shù)據(jù)集分為訓(xùn)練集和驗證集,各包含60%和40%的數(shù)據(jù)。 注意:在訓(xùn)練集上對模型參數(shù)進行訓(xùn)練后,用驗證集來估計準確率時只能使用一次,如果每次訓(xùn)練模型參數(shù)后都使用這個驗證集來估計準確率,很容易導(dǎo)致過擬合。 如果我們使用4-fold交叉驗證的話,其過程如下,最終錯誤率取4次的平均值,以表現(xiàn)我們模型的泛化能力。 (2) 決策樹的特征選擇匯總: 在決策樹部分,三類經(jīng)典決策樹模型的主要區(qū)別在于其用于分類的屬性不同,也即特征選擇不同 ID3:信息增益 C4.5:信息增益率, 附加一句,C4.5之所以用信息增益率,也即gr(D,A)=g(D,A)/H(A),是因為ID3中,所以如果是取值更多的屬性, 更容易使得數(shù)據(jù)更“ 純 ”,其信息增益更大,決策樹會首先挑選這個屬性作為樹的頂點。結(jié)果訓(xùn)練出來的形狀是一棵龐大且深度很淺的樹,這樣的劃分是極為不合理的。而H(A),也即數(shù)據(jù)D在屬性A上的熵值,隨著A可取值類型的增加而變大,所以可以用H(A),作為懲罰因子,從而減少取值更多屬性的目標函數(shù)值,進而避免生成樹的深度很淺。 CART 主要參考文獻: [1]http://blog.csdn.net/google19890102/article/details/40019271 [2]http://nbviewer./github/gmonce/scikit-learn-book/blob/master/Chapter 4 - Advanced Features - Feature Engineering and Selection.ipynb [3]http://nbviewer./github/rasbt/pattern_classification/blob/master/machine_learning/scikit-learn/scikit-pipeline.ipynb#Linear-Discriminant-Analysis-(LDA) |
|
|