特征选择(过滤法、包装法、嵌入法)
文章目錄
- Filter過(guò)濾式方法
- 方差選擇法
- 相關(guān)系數(shù)法
- 卡方檢驗(yàn)
- 互信息法和最大信息系數(shù)Mutual information and maximal information coefficient (MIC)
- Wrapper封裝式方法
- 遞歸特征消除法Recursive feature elimination (RFE)
- Embedded過(guò)濾式方法
- 基于懲罰項(xiàng)的特征選擇法
- L1L_{1}L1?正則化Lasso
- L2正則化Ridge regression
- 基于樹模型的特征選擇法
- 平均不純度減少 mean decrease impurity
- 平均精確率減少 Mean decrease accuracy
- 決定節(jié)點(diǎn)分裂的次數(shù)
- 隨機(jī)森林進(jìn)行特征選擇
- 決策樹進(jìn)行特征選擇
- XGBoost進(jìn)行特征選擇
- PCA
- LDA
有這么一句話在業(yè)界廣泛流傳:數(shù)據(jù)和特征決定了機(jī)器學(xué)習(xí)的上限,而模型和算法只是逼近這個(gè)上限而已。特征工程目的是最大限度地從原始數(shù)據(jù)中提取特征以供算法和模型使用。這里主要說(shuō)的是特征選擇。
當(dāng)數(shù)據(jù)預(yù)處理完成后,我們需要進(jìn)行特征選擇,即選擇有意義的特征輸入機(jī)器學(xué)習(xí)的算法和模型進(jìn)行訓(xùn)練。特征選擇主要有兩個(gè)功能:
- 減少特征數(shù)量、降維,使模型泛化能力更強(qiáng),減少過(guò)擬合。
- 去掉似是而非不易判別的特征,提高精度。
通常來(lái)說(shuō),從兩個(gè)方面考慮來(lái)選擇特征:
- 特征是否發(fā)散:如果一個(gè)特征不發(fā)散,例如方差接近于0,那么就是說(shuō)樣本在這個(gè)特征上基本上沒有差異,這個(gè)特征對(duì)于樣本的區(qū)分并沒有什么用。
- 特征與目標(biāo)的相關(guān)性:這點(diǎn)比較顯而易見,與目標(biāo)相關(guān)性高的特征,應(yīng)當(dāng)優(yōu)選選擇。
根據(jù)特征選擇的形式又可以將特征選擇方法分為3種:
Filter:過(guò)濾法,按照發(fā)散性或者相關(guān)性對(duì)各個(gè)特征進(jìn)行評(píng)分,設(shè)定閾值或者待選擇閾值的個(gè)數(shù),選擇特征。
Wrapper:包裝法,根據(jù)目標(biāo)函數(shù)(通常是預(yù)測(cè)效果評(píng)分),每次選擇若干特征,或者排除若干特征。
Embedded:嵌入法,先使用某些機(jī)器學(xué)習(xí)的算法和模型進(jìn)行訓(xùn)練,得到各個(gè)特征的權(quán)值系數(shù),根據(jù)系數(shù)從大到小選擇特征。類似于Filter方法,但是是通過(guò)訓(xùn)練來(lái)確定特征的優(yōu)劣。
Filter過(guò)濾式方法
過(guò)濾式方法(Filter)通常是獨(dú)立地選擇特征,這可能會(huì)忽略特征組合之間的相關(guān)性。
方差選擇法
使用方差選擇法,先要計(jì)算各個(gè)特征的方差,然后根據(jù)閾值,選擇方差大于閾值的特征。使用feature_selection庫(kù)的VarianceThreshold類來(lái)選擇特征的代碼如下:
from sklearn.feature_selection import VarianceThreshold # 方差選擇法,返回值為特征選擇后的數(shù)據(jù) # 參數(shù)threshold為方差的閾值 VarianceThreshold(threshold=3).fit_transform(iris.data) # iris.data為鳶尾花數(shù)據(jù)相關(guān)系數(shù)法
使用相關(guān)系數(shù)法,先要計(jì)算各個(gè)特征對(duì)目標(biāo)值的相關(guān)系數(shù)以及相關(guān)系數(shù)的P值。用feature_selection庫(kù)的SelectKBest類結(jié)合相關(guān)系數(shù)來(lái)選擇特征的代碼如下:
from sklearn.feature_selection import SelectKBest from scipy.stats import pearsonr #選擇K個(gè)最好的特征,返回選擇特征后的數(shù)據(jù) #第一個(gè)參數(shù)為計(jì)算評(píng)估特征是否好的函數(shù),該函數(shù)輸入特征矩陣和目標(biāo)向量,輸出二元組(評(píng)分,P值)的數(shù)組,數(shù)組第i項(xiàng)為第i個(gè)特征的評(píng)分和P值。在此定義為計(jì)算相關(guān)系數(shù) #參數(shù)k為選擇的特征個(gè)數(shù) SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)卡方檢驗(yàn)
經(jīng)典的卡方檢驗(yàn)是檢驗(yàn)定性自變量對(duì)定性因變量的相關(guān)性。假設(shè)自變量有N種取值,因變量有M種取值,考慮自變量等于i且因變量等于j的樣本頻數(shù)的觀察值與期望的差距,構(gòu)建統(tǒng)計(jì)量:
χ2=∑(A?E)2E\chi^{2}=\frac{\sum (A-E)^{2}}{E} χ2=E∑(A?E)2?
用feature_selection庫(kù)的SelectKBest類結(jié)合卡方檢驗(yàn)來(lái)選擇特征的代碼如下:
互信息法和最大信息系數(shù)Mutual information and maximal information coefficient (MIC)
經(jīng)典的互信息也是評(píng)價(jià)定性自變量對(duì)定性因變量的相關(guān)性的,互信息計(jì)算公式如下:
I(X;Y)=∑x?X∑y?Yp(x,y)logp(x,y)p(x)p(y))I(X;Y)= \sum_{x\epsilon X} \sum_{y\epsilon Y}p(x,y)log \frac{p(x,y)}{p(x)p(y))} I(X;Y)=x?X∑?y?Y∑?p(x,y)logp(x)p(y))p(x,y)?
若想把互信息直接用于特征選擇其實(shí)不是太方便:1、它不屬于度量方式,也沒有辦法歸一化,在不同數(shù)據(jù)及上的結(jié)果無(wú)法做比較;2、對(duì)于連續(xù)變量的計(jì)算不是很方便(X和Y都是集合,x,y都是離散的取值),通常變量需要先離散化,而互信息的結(jié)果對(duì)離散化的方式很敏感。最大信息系數(shù)克服了這兩個(gè)問(wèn)題。它首先尋找一種最優(yōu)的離散化方式,然后把互信息取值轉(zhuǎn)換成一種度量方式,取值區(qū)間在[0,1]。
使用feature_selection庫(kù)的SelectKBest類結(jié)合最大信息系數(shù)法來(lái)選擇特征的代碼如下:
Wrapper封裝式方法
遞歸特征消除法Recursive feature elimination (RFE)
遞歸特征消除的主要思想是反復(fù)的構(gòu)建模型(如SVM或者回歸模型)然后選出最差的(或者最好的)的特征(可以根據(jù)系數(shù)來(lái)選),把選出來(lái)的特征放到一邊,然后在剩余的特征上重復(fù)這個(gè)過(guò)程,直到所有特征都遍歷了。這個(gè)過(guò)程中特征被消除的次序就是特征的排序。因此,這是一種尋找最優(yōu)特征子集的貪心算法。
RFE的穩(wěn)定性很大程度上取決于在迭代的時(shí)候底層用哪種模型。例如,假如RFE采用的普通的回歸,沒有經(jīng)過(guò)正則化的回歸是不穩(wěn)定的,那么RFE就是不穩(wěn)定的;假如采用的是Ridge,而用Ridge正則化的回歸是穩(wěn)定的,那么RFE就是穩(wěn)定的。
使用feature_selection庫(kù)的RFE類來(lái)選擇特征的代碼如下:
Embedded過(guò)濾式方法
基于懲罰項(xiàng)的特征選擇法
基于懲罰項(xiàng)的特征選擇法其實(shí)是基于正則的特征選擇法。正則化就是把額外的約束或者懲罰項(xiàng)加到已有模型(損失函數(shù))上,以防止過(guò)擬合并提高泛化能力。損失函數(shù)由原來(lái)的E(X,Y)E(X,Y)E(X,Y)變?yōu)?span id="ze8trgl8bvbq" class="katex--inline">E(X,Y)+α∣∣w∣∣E(X,Y)+\alpha||w||E(X,Y)+α∣∣w∣∣,w是模型系數(shù)組成的向量(有些地方也叫參數(shù)parameter,coefficients),||·||一般是L1L_{1}L1?或者L2L_{2}L2?范數(shù),α\alphaα是一個(gè)可調(diào)的參數(shù),控制著正則化的強(qiáng)度。當(dāng)用在線性模型上時(shí),L1L_{1}L1?正則化和L2L_{2}L2?正則化也稱為L(zhǎng)asso和Ridge。
L1L_{1}L1?正則化Lasso
L1L_{1}L1?正則化將系數(shù)w的l1范數(shù)作為懲罰項(xiàng)加到損失函數(shù)上,由于正則項(xiàng)非零,這就迫使那些弱的特征所對(duì)應(yīng)的系數(shù)變成0。因此L1L_{1}L1?正則化往往會(huì)使學(xué)到的模型很稀疏(系數(shù)w經(jīng)常為0),這個(gè)特性使得L1L_{1}L1?正則化成為一種很好的特征選擇方法。
L2正則化Ridge regression
L2L_{2}L2?正則化將系數(shù)向量的L2L_{2}L2?范數(shù)添加到了損失函數(shù)中。由于L2L_{2}L2?懲罰項(xiàng)中系數(shù)是二次方的,這使得L2L_{2}L2?和L1L_{1}L1?有著諸多差異,最明顯的一點(diǎn)就是,L2L_{2}L2?正則化會(huì)讓系數(shù)的取值變得平均。對(duì)于關(guān)聯(lián)特征,這意味著他們能夠獲得更相近的對(duì)應(yīng)系數(shù)。以Y=X1+X2為例,假設(shè)X1和X2具有很強(qiáng)的關(guān)聯(lián),如果用L1正則化,不論學(xué)到的模型是Y=X1+X2還是Y=2X1,懲罰都是一樣的,都是2 alpha。但是對(duì)于L2來(lái)說(shuō),第一個(gè)模型的懲罰項(xiàng)是2α\alphaα,但第二個(gè)模型的是4*α\alphaα。可以看出,系數(shù)之和為常數(shù)時(shí),各系數(shù)相等時(shí)懲罰是最小的,所以才有了L2會(huì)讓各個(gè)系數(shù)趨于相同的特點(diǎn)。
基于樹模型的特征選擇法
樹模型有準(zhǔn)確率高、魯棒性好、易于使用等優(yōu)點(diǎn),這使得它成為了目前最流行的機(jī)器學(xué)習(xí)算法之一。
平均不純度減少 mean decrease impurity
隨機(jī)森林由多個(gè)決策樹構(gòu)成。決策樹中的每一個(gè)節(jié)點(diǎn)都是關(guān)于某個(gè)特征的條件,為的是將數(shù)據(jù)集按照不同的響應(yīng)變量進(jìn)行分裂。利用不純度可以確定節(jié)點(diǎn)基于哪個(gè)特征進(jìn)行分裂,對(duì)于分類問(wèn)題,通常采用基尼系數(shù)或者信息增益 ,對(duì)于回歸問(wèn)題,通常采用的是方差或者最小二乘擬合。當(dāng)訓(xùn)練決策樹的時(shí)候,可以計(jì)算出每個(gè)特征減少了多少樹的不純度。對(duì)于一個(gè)決策樹森林來(lái)說(shuō),可以算出每個(gè)特征平均減少了多少不純度,并把它平均減少的不純度作為特征選擇的值。
平均精確率減少 Mean decrease accuracy
另一種常用的特征選擇方法就是直接度量每個(gè)特征對(duì)模型精確率的影響。主要思路是打亂每個(gè)特征的特征值順序,并且度量順序變動(dòng)對(duì)模型的精確率的影響。很明顯,對(duì)于不重要的變量來(lái)說(shuō),打亂順序?qū)δP偷木_率影響不會(huì)太大,但是對(duì)于重要的變量來(lái)說(shuō),打亂順序就會(huì)降低模型的精確率。
決定節(jié)點(diǎn)分裂的次數(shù)
查看每個(gè)特征作為節(jié)點(diǎn)分裂依據(jù)的次數(shù),次數(shù)越多則認(rèn)為這個(gè)特征越重要。根據(jù)次數(shù)對(duì)特征進(jìn)行排序。
隨機(jī)森林進(jìn)行特征選擇
特征重要性?度量
1)對(duì)每一顆決策樹,選擇相應(yīng)的袋外數(shù)據(jù)(out of bag,OOB)?計(jì)算袋外數(shù)據(jù)誤差,記為errOOB1。
所謂袋外數(shù)據(jù)是指,每次建立決策樹時(shí),通過(guò)重復(fù)抽樣得到一個(gè)數(shù)據(jù)用于訓(xùn)練?決策樹,這時(shí)還有大約1/3的數(shù)據(jù)沒有被利用,沒有參與決策樹的建立。這部分?jǐn)?shù)據(jù)可以用于對(duì)決策樹的性能進(jìn)行評(píng)估,計(jì)算模型的預(yù)測(cè)錯(cuò)誤率,稱為袋外數(shù)據(jù)誤差。
?這已經(jīng)經(jīng)過(guò)證明是無(wú)偏估計(jì)的,所以在隨機(jī)森林算法中不需要再進(jìn)行交叉驗(yàn)證或者單獨(dú)的測(cè)試集來(lái)獲取測(cè)試集誤差的無(wú)偏估計(jì)。
?2)隨機(jī)對(duì)袋外數(shù)據(jù)OOB所有樣本的特征X加入噪聲干擾(可以隨機(jī)改變樣本在特征X處的值),再次計(jì)算袋外數(shù)據(jù)誤差,記為errOOB2。
3)?假設(shè)森林中有N棵樹,則特征X的重要性=∑(errOOB2-errOOB1)/N。這個(gè)數(shù)值之所以能夠說(shuō)明特征的重要性是因?yàn)?#xff0c;如果加入隨機(jī)噪聲后,袋外數(shù)據(jù)準(zhǔn)確率大幅度下降(即errOOB2上升),說(shuō)明這個(gè)特征對(duì)于樣本的預(yù)測(cè)結(jié)果有很大影響,進(jìn)而說(shuō)明重要程度比較高。
特征選擇
在特征重要性的基礎(chǔ)上,特征選擇的步驟如下:
1)計(jì)算每個(gè)特征的重要性,并按降序排序
2)確定要剔除的比例,依據(jù)特征重要性剔除相應(yīng)比例的特征,得到一個(gè)新的特征集
3)用新的特征集重復(fù)上述過(guò)程,直到剩下m個(gè)特征(m為提前設(shè)定的值)。
4)根據(jù)上述過(guò)程中得到的各個(gè)特征集和特征集對(duì)應(yīng)的袋外誤差率,選擇袋外誤差率最低的特征集。?
決策樹進(jìn)行特征選擇
加權(quán)不純度的減少
import numpy as np from sklearn.tree import DecisionTreeClassifier from sklearn.externals.six import StringIO from sklearn import tree import pydotplusclf = DecisionTreeClassifier() x = [[1,1,1,1,1,2,2,2,2,2,3,3,3,3,3],[1,1,2,2,1,1,1,2,1,1,1,1,2,2,1],[1,1,1,2,1,1,1,2,2,2,2,2,1,1,1],[1,2,2,1,1,1,2,2,3,3,3,2,2,3,1]] y = [1,1,2,2,1,1,1,2,2,2,2,2,2,2,1] x = np.array(x) x = np.transpose(x) clf.fit(x,y) print(clf.feature_importances_) feature_name = ['A1','A2','A3','A4'] target_name = ['1','2'] dot_data = StringIO() tree.export_graphviz(clf,out_file = dot_data,feature_names=feature_name,class_names=target_name,filled=True,rounded=True,special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) graph.write_pdf("WineTree.pdf") print('Visible tree plot saved as pdf.')XGBoost進(jìn)行特征選擇
在XGBoost中提供了三種特征重要性的計(jì)算方法:
‘weight’ - the number of times a feature is used to split the data across all trees. ‘gain’ - the average gain of the feature when it is used in trees ‘cover’ - the average coverage of the feature when it is used in treesweight就是在所有樹中特征用來(lái)分割的節(jié)點(diǎn)個(gè)數(shù)總和;
gain就是特征用于分割的平均增益
cover
結(jié)果如下:
#使用weight的結(jié)果為 {‘f0’: 1, ‘f1’: 3, ‘f2’: 5, ‘f3’: 2}#使用gain的結(jié)果為 {‘f0’: 0.440551, ‘f1’: 1.8495799999999998, ‘f2’: 1.9555256, ‘f3’: 1.492955}#使用cover的結(jié)果為 {‘f0’: 2.89962, ‘f1’: 3.34311, ‘f2’: 3.2390999999999996, ‘f3’: 2.757295}可以看出,不同的特征重要性度量方法得出的結(jié)果也是不盡相同的。
PCA
LDA
參考:
https://www.cnblogs.com/bonelee/p/8632866.html
https://blog.csdn.net/akenseren/article/details/80816210
卡方分布
https://blog.csdn.net/bitcarmanlee/article/details/52279907
樹特征選擇
https://blog.csdn.net/tinkle181129/article/details/80231871
總結(jié)
以上是生活随笔為你收集整理的特征选择(过滤法、包装法、嵌入法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。