日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数据竞赛】懒人特征筛选算法!

發布時間:2025/3/12 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据竞赛】懒人特征筛选算法! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:杰少

Kaggle競賽知識點--RFE!

簡 介

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

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

因而非常多的數據科學家都會推薦大家使用其作為非常強的Baseline。

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

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

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

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

Recursive Feature Elimination

1. RFE

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

  • 輸入用于特征篩選的模型以及需要保留的特征數;

  • 對指定的模型使用所有的特征進行訓練;

  • 依據模型給出的特征重要性,刪除最不重要的少數幾個特征;

      • 特征一般是按照模型輸出的特征重要性排序的;

  • 將剩余的特征重新輸入指定模型進行訓練,刪除最不重要的少數幾個特征,依次類推,直至最后我們的特征數目小于等于我們要保留的數目之后停止。

  • 2.RFECV

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

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

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

    代 碼

    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.構建數據集 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訓練 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算法需要每次都重新訓練進行特征篩選,當數據集非常大的時候,時間成本非常大,如果使用RFECV則還需要進行N折的交叉驗證,帶來的時間成本會變為原先的幾倍,一般建議充分考慮計算資源以及數據大小再使用。

    參考文獻

  • Recursive Feature Elimination (RFE) for Feature Selection in Python

  • Recursive Feature Elimination

  • Feature Ranking RFE, Random Forest, linear models

  • Recursive Feature Elimination (RFE) example

  • sklearn.feature_selection.RFECV

  • sklearn.feature_selection.RFE

  • 往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:

    總結

    以上是生活随笔為你收集整理的【数据竞赛】懒人特征筛选算法!的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。