在建立一個(gè)機(jī)器學(xué)習(xí)模型時(shí)绩衷,并不是所有所有的數(shù)據(jù)屬性都對(duì)模型有同等的貢獻(xiàn)畜份,因此也不是數(shù)據(jù)屬性越多越好隅很。在建立模型之前寄症,要從眾多的數(shù)據(jù)屬性中選擇對(duì)模型的輸出和結(jié)果預(yù)測(cè)貢獻(xiàn)最大的那些變量序愚,這種對(duì)特征進(jìn)行篩選的過(guò)程叫做“特征選擇”憔披。“特征選擇”具有以下三方面的重要作用:
- 減少過(guò)度預(yù)測(cè)(overfit)爸吮,減少噪音變量對(duì)模型的貢獻(xiàn)芬膝。
- 增加準(zhǔn)確性,依靠減少無(wú)關(guān)的變量提高模型的預(yù)測(cè)準(zhǔn)確性形娇。
- 減少模型訓(xùn)練時(shí)間锰霜,越少的訓(xùn)練數(shù)據(jù),意味著越少的訓(xùn)練時(shí)間桐早。
在scikit-learn中有兩種特征選擇的方法癣缅,一種叫做循環(huán)特征消減(Recursive Feature Elimination)和特征重要性評(píng)級(jí) (feature importance ranking)。
1. 循環(huán)特征消減(Recursive Feature Elimination)
作為一種特征選擇方法哄酝,其工作原理是:循環(huán)地移除變量和建立模型友存,通過(guò)模型的準(zhǔn)確率來(lái)評(píng)估變量對(duì)模型的貢獻(xiàn)。以下代碼使用UCI的Iris數(shù)據(jù)集陶衅,使用sklearn.feature_selection的RFE方法來(lái)實(shí)現(xiàn)該方法屡立。
from sklearn import datasets
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
dataset =datasets.load_iris() # laod iris dataset
model = LogisticRegression() # build logistic regression model
rfe = RFE(model,3) # limit number of variables to three
rfe = rfe.fit(dataset.data,dataset.target)
print(rfe.support_)
print(rfe.ranking_)
2. 特征重要性評(píng)級(jí) (feature importance ranking)
“組合決策樹算法”(例如Random Forest or Extra Trees)可以計(jì)算每一個(gè)屬性的重要性。重要性的值可以幫助我們選擇出重要的特征搀军。以下代碼使用UCI的Iris數(shù)據(jù)集膨俐,使用sklearn.metrics和sklearn.ensemble 的ExtraTreesClassifier來(lái)實(shí)現(xiàn)該算法。
from sklearn import datasets
from sklearn import metrics
from sklearn.ensemble import ExtraTreesClassifier
dataset =datasets.load_iris() # laod iris dataset
model = ExtraTreesClassifier() # build extra tree model
model.fit(dataset.data,dataset.target)
print(model.feature_importances_) #display importance of each variables
特征選擇方法可以為你提供屬性重要性的信息罩句,利用這些信息焚刺,你可以利用更少而有效的變量來(lái)提高自己模型的準(zhǔn)確性。
知識(shí)點(diǎn):
- recursive feature elimination,feature_selection.RFE, ref.fit,ref.support_,ref.ranking_
- ExtraTreeClassifier, model.feature_importances_