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ù)集,閥值的表示方式為下面的公式:

             大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

             示例寫法: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ì)代碼如下:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn) View Code

        輸出結(jié)果:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

原始數(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

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

   從結(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ì)代碼如下:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn) View Code

               輸出結(jié)果:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

原始數(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

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

               從結(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ì)代碼:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn) View Code

                輸出結(jié)果:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

原始數(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

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

                從結(jié)果可以看出,數(shù)據(jù)從150×4變成了150×3,但是預(yù)測結(jié)果沒有受影響。

            b)基于樹的特征選擇

               詳細(xì)代碼:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn) View Code

             輸出結(jié)果:

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

原始數(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

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

             從結(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