1.特征選擇
特征選擇是降維的一種方法,即選擇對預(yù)測結(jié)果相關(guān)度高的特征或者消除相似度高的特征,以提高估計(jì)函數(shù)的準(zhǔn)確率或者提高多維度數(shù)據(jù)集上的性能。
2.刪除低方差特征
1)思路:設(shè)置一個閥值,對每個特征求方差,如果所求方差低于這個閥值,則刪除此特征。默認(rèn)情況下會刪除0方差。
2)核心函數(shù)
sklearn.feature_selection.VarianceThreshold
3)主要參數(shù):
threshold :設(shè)置的閥值
補(bǔ)充說明:
官網(wǎng)給出的是一個布爾值的數(shù)據(jù)集,閥值的表示方式為下面的公式:
示例寫法:sel = VarianceThreshold(threshold=(0.8 * (1 - 0.8)))
經(jīng)過測試,非布爾值的數(shù)據(jù)集也適用,并且直接寫成:threshold=0.16 也是可以的。
對于二維矩陣,求的是每列的方差,然后和閥值比較。
4)示例
為了更好的說明用刪除低方差的方式進(jìn)行特征選擇后,新的數(shù)據(jù)集不會影響預(yù)測結(jié)果或者不會造成太大的影響,這里選擇一個官方提供的數(shù)據(jù)集進(jìn)行對比。這個數(shù)據(jù)集是關(guān)于花朵類型判斷的:包含150個樣本數(shù)據(jù),每個樣本數(shù)據(jù)包含4個特征,這些樣本數(shù)據(jù)屬于3類,每類50個樣本。
使用決策樹進(jìn)行分類預(yù)測。
詳細(xì)代碼如下:
View Code
輸出結(jié)果:
原始數(shù)據(jù): (150, 4) 新數(shù)據(jù)集: (150, 3) 原始數(shù)據(jù)的預(yù)測結(jié)果和真實(shí)結(jié)果相同的個數(shù):150新數(shù)據(jù)集的預(yù)測結(jié)果和真實(shí)結(jié)果相同的個數(shù):150原始據(jù)集的預(yù)測結(jié)果和新數(shù)據(jù)集預(yù)測結(jié)果相同的個數(shù):150
從結(jié)果可以看出,數(shù)據(jù)從150×4的矩陣變成了150×3的矩陣,但是完全沒有對預(yù)測結(jié)果造成任何影響。
3.單變量特征選擇
(下面的翻譯可能不是很準(zhǔn)確)
1)思路:對每個特征做基于統(tǒng)計(jì)的檢驗(yàn),從而選擇出最佳特征。
2)可用的函數(shù)
SelectPercentile:根據(jù)最高分?jǐn)?shù)的百分位數(shù)選擇特征。
SelectKBest:根據(jù)k最高分選擇特征。
SelectFpr:基于假陽性率測試選擇特征。
SelectFdr:根據(jù)估計(jì)的虛假發(fā)現(xiàn)率選擇特征。
SelectFwe:根據(jù)家庭錯誤率選擇功能(這個翻譯感覺很怪:based on family-wise error rate)
GenericUnivariateSelect:具有可配置模式的單變量特征選擇器。
3)可用的統(tǒng)計(jì)方法(上面函數(shù)的參數(shù)):
f_classif:用于分類任務(wù)的標(biāo)簽/特征之間方差分析的F值。
mutual_info_classif:離散目標(biāo)的相互信息。
chi2:用于分類任務(wù)的非負(fù)性特征的卡方統(tǒng)計(jì)。
f_regression:用于回歸任務(wù)的標(biāo)簽/特征之間的F值。
mutual_info_regression:連續(xù)目標(biāo)的相互信息。
4)示例
依然使用上面的關(guān)于花朵的數(shù)據(jù)集和決策樹分類方法。
詳細(xì)代碼如下:
View Code
輸出結(jié)果:
原始數(shù)據(jù): (150, 4) 新數(shù)據(jù)集: (150, 2) 原始數(shù)據(jù)的預(yù)測結(jié)果和真實(shí)結(jié)果相同的個數(shù):150新數(shù)據(jù)集的預(yù)測結(jié)果和真實(shí)結(jié)果相同的個數(shù):149原始據(jù)集的預(yù)測結(jié)果和新數(shù)據(jù)集預(yù)測結(jié)果相同的個數(shù):149
從結(jié)果可以看出,原始的數(shù)據(jù)集從150×4變成了150×2,但是預(yù)測的結(jié)果只有一個誤差。
4.使用SelectFromModel進(jìn)行特征選擇
1)思路:SelectFromModel是一種元變壓器,可用于任何在擬合后有coef_或feature_importances_屬性的擬合函數(shù)。如果相應(yīng)的coef_或feature_importances_值低于提供的threshold參數(shù)(閥值),則認(rèn)為這些特征是是不重要的并且刪除。除了數(shù)值上指定閾值外,還有內(nèi)置的啟發(fā)式算法,用于使用字符串參數(shù)來查找閾值??捎玫膯l(fā)式算法是“平均值”,“中位數(shù)”和浮點(diǎn)倍數(shù),如“0.1 *mean”。
2)由上面SelectFromModel的思路可知,首先需要進(jìn)行一次擬合,然后才通過SelectFromModel選擇特征。根據(jù)第一次擬合函數(shù)的不同,分為兩類:
a)基于L1的特征選擇
詳細(xì)代碼:
View Code
輸出結(jié)果:
原始數(shù)據(jù): (150, 4) 新數(shù)據(jù)集: (150, 3) 原始數(shù)據(jù)的預(yù)測結(jié)果和真實(shí)結(jié)果相同的個數(shù):150新數(shù)據(jù)集的預(yù)測結(jié)果和真實(shí)結(jié)果相同的個數(shù):150原始據(jù)集的預(yù)測結(jié)果和新數(shù)據(jù)集預(yù)測結(jié)果相同的個數(shù):150
從結(jié)果可以看出,數(shù)據(jù)從150×4變成了150×3,但是預(yù)測結(jié)果沒有受影響。
b)基于樹的特征選擇
詳細(xì)代碼:
View Code
輸出結(jié)果:
原始數(shù)據(jù): (150, 4) 新數(shù)據(jù)集: (150, 2) 原始數(shù)據(jù)的預(yù)測結(jié)果和真實(shí)結(jié)果相同的個數(shù):150新數(shù)據(jù)集的預(yù)測結(jié)果和真實(shí)結(jié)果相同的個數(shù):149原始據(jù)集的預(yù)測結(jié)果和新數(shù)據(jù)集預(yù)測結(jié)果相同的個數(shù):149
從結(jié)果看出,數(shù)據(jù)集從150×4變成了150×2,出現(xiàn)了一個誤差。
3)上述代碼的選擇特征,然后預(yù)測,也可簡寫成如下形式:
clf = Pipeline([ ('feature_selection', SelectFromModel(LinearSVC(C=0.01, penalty="l1", dual=False))), ('classification', tree.DecisionTreeClassifier()) ]) clf.fit(X, y)
http://www.cnblogs.com/lc1217/p/7126150.html