<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【數(shù)據(jù)競賽】懶人特征篩選算法!

          共 4469字,需瀏覽 9分鐘

           ·

          2021-05-29 13:41

          作者:杰少

          Kaggle競賽知識點--RFE!

          簡 介

          Recursive Feature Elimination(RFE)算法是數(shù)據(jù)競賽中最為流行的特征篩選方案之一,和我們平時在做try and error的思路相似:

          • 每次我們從數(shù)據(jù)集中找到最不重要的特征,然后將其刪除,再基于新數(shù)據(jù)集重新訓(xùn)練,重新篩選......

          因而非常多的數(shù)據(jù)科學(xué)家都會推薦大家使用其作為非常強的Baseline。

          RFE是一種wrapper類型的特征篩選算法,也就是說:

          • 我們給定一個機器學(xué)習(xí)算法,該機器學(xué)習(xí)算法被RFE包裹,然后一起做特征選擇。

          因為RFE的使用需要同時輸入模型以及保留的特征數(shù),但是保留多少的特征是一個未知的事情,較難控制,這個時候我們需要用到RFECV,一種結(jié)合了交叉驗證以及RFE的方案,該方案能自動篩選出保留的特征個數(shù),在實踐中效果也非常的不錯。

          本文就重點介紹RFE以及REFCV特征篩選算法。

          Recursive Feature Elimination

          1. RFE

          遞歸特征消除(RFE)方法的工作步驟為:

          1. 輸入用于特征篩選的模型以及需要保留的特征數(shù);
          2. 對指定的模型使用所有的特征進行訓(xùn)練;
          3. 依據(jù)模型給出的特征重要性,刪除最不重要的少數(shù)幾個特征;
            • 特征一般是按照模型輸出的特征重要性排序的;
          1. 將剩余的特征重新輸入指定模型進行訓(xùn)練,刪除最不重要的少數(shù)幾個特征,依次類推,直至最后我們的特征數(shù)目小于等于我們要保留的數(shù)目之后停止。

          2.RFECV

          RFE方法使用所有數(shù)據(jù)進行訓(xùn)練,再依據(jù)模型給出特征重要性進行特征的篩選,之后再依據(jù)篩選之后的數(shù)據(jù)重新訓(xùn)練模型,再篩選,直到剩下的特征數(shù)達到我們設(shè)定的閾值時就停止,這么做受到一個非常大的限制:

          • 保留的特征數(shù)需要預(yù)先人為設(shè)定,但很多時候我們并不知道需要保留多少特征;

          所以最終我們得到的結(jié)果往往是次優(yōu)的。為了緩解該問題,我們將交叉策略與RFE進行結(jié)合;我們通過計算在不同特征數(shù)時模型的交叉分數(shù),然后選擇交叉分數(shù)最好的特征數(shù)進行輸出。

          代 碼

          1. 基于RFC的特征選擇

          # !pip install yellowbrick
          from yellowbrick.datasets import load_credit 
          import numpy as np
          from numpy import mean
          from numpy import std 
          from sklearn.model_selection import cross_val_score
          from sklearn.model_selection import RepeatedStratifiedKFold
          from sklearn.feature_selection import RFECV,RFE
          from sklearn.pipeline import Pipeline
          from sklearn.preprocessing import MinMaxScaler,StandardScaler
          from sklearn.linear_model import LogisticRegression 
          from sklearn.tree import DecisionTreeClassifier
          import pandas as pd
          # 1.構(gòu)建數(shù)據(jù)集
          X, y = load_credit() 
          columns = X.columns
          X = X[:5000]
          X = StandardScaler().fit_transform(X)
          y = y[:5000]
          •  輸出每個特征的排名

          # 2.輸入的模型;保留一個特征:這樣可以輸出每個特征的rankings
          lr = LogisticRegression() 
          rfe = RFE(lr, n_features_to_select=1, verbose =-1 ) #
          rfe.fit(X,y)

          # 3.輸出每個特征的重要性,此處也可以直接觀察rankings來判定
          ranks = {} 
          def ranking(ranks, names, order=1):
              minmax = MinMaxScaler()
              ranks = minmax.fit_transform(order*np.array([ranks]).T).T[0# 1表示最重要
              ranks = map(lambda x: round(x,2), ranks)
              return dict(zip(names, ranks))
          fea_imp = ranking(list(map(float, rfe.ranking_)), columns, order=-1)
          rfe.ranking_
          '''
            array([20, 23, 14,  9, 13,  1, 16,  7, 19, 11, 12,  3,  8,  4, 22, 10, 21,5,  2, 18,  6, 17, 15])
          '''
          • 輸出保留的特征名

          columns[rfe.support_]

          '''
            Index(['apr_delay'], dtype='object')
          '''


          2.基于REFCV的特征選擇

          • 輸出我們每個特征的排名

          # 使用RFECV訓(xùn)練
          rfecv   = RFECV(estimator=DecisionTreeClassifier(), step=1, cv=5
          rfecv.fit(X, y) 
          rfecv.ranking_
          '''
            array([ 1, 12,  8, 10,  1,  1, 14,  7, 13,  9, 11,  1,  1,  5,  1,  1,  4, 2,  1,  3,  6,  1,  1])
          '''

          array([ 1, 12,  8, 10,  1,  1, 14,  7, 13,  9, 11,  1,  1,  5,  1,  1,  4,
          2, 1, 3, 6, 1, 1])
          • 輸出保留的特征名

          columns[rfecv.support_]
          '''
              Index(['limit', 'age', 'apr_delay', 'apr_bill', 'may_bill', 'jul_bill',
                 'aug_bill', 'may_pay', 'aug_pay', 'sep_pay'],
                dtype='object')
          '''
           

          適用問題

          Recursive Feature Elimination(RFE)算法是Wrapper類型的特征篩選算法,我們只需要簡單的改變輸入模型就可以得到篩選的特征,非常簡單易懂,RFE幾乎是適用于目前見到的90%的問題的,可以作為特征篩選的一個重要的Baseline。

          因為RFE算法需要每次都重新訓(xùn)練進行特征篩選,當(dāng)數(shù)據(jù)集非常大的時候,時間成本非常大,如果使用RFECV則還需要進行N折的交叉驗證,帶來的時間成本會變?yōu)樵鹊膸妆?/span>,一般建議充分考慮計算資源以及數(shù)據(jù)大小再使用。

          參考文獻
          1. Recursive Feature Elimination (RFE) for Feature Selection in Python
          2. Recursive Feature Elimination
          3. Feature Ranking RFE, Random Forest, linear models
          4. Recursive Feature Elimination (RFE) example
          5. sklearn.feature_selection.RFECV
          6. sklearn.feature_selection.RFE


          往期精彩回顧





          本站qq群851320808,加入微信群請掃碼:

          瀏覽 104
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人啪啪啪网站 | 国产色久| 国产一级操逼视频片 | 精品国产视频在线观看 | 77777777少妇亚洲 |