logo
Loading...

【QA】什麼是 Recursive Feature Elimination with Cross-Validation (RFECV)?? - Cupoy

特徵挑選過程中,當我們無法用統計方式挑選特徵時,需要藉由模型產生的結果回推那些特徵是重要的,而進行挑...

【QA】什麼是 Recursive Feature Elimination with Cross-Validation (RFECV)??

2021/11/24 下午 06:09
機器學習共學討論版
王健安
觀看數:213
回答數:1
收藏數:0

特徵挑選過程中,當我們無法用統計方式挑選特徵時,需要藉由模型產生的結果回推那些特徵是重要的,而進行挑選,典型的技巧是 Recursive Feature Elimination with Cross-Validation (RFECV)。具體來說,RFECV是如何運作的呢?

回答列表

  • 2021/11/24 下午 06:12
    王健安
    贊同數:0
    不贊同數:0
    留言數:0

    目的:透過每一次模型的成果與該模型中每個變數對結果的重要程度,排除掉最不重要的數個變數,保留重要程度最高的變數,期望達到最佳的模型效能。 流程: 1. 建立一個機器學習模型 2. 計算每個特徵的重要性 3. 把最不重要的數個特徵剔除 4. 重複第一至第三步驟,直到特徵數達到最少許可數量為止,獲得最重要的特徵組合 想法延伸: 每個模型都需要好的特徵組合才能夠達到最好的效能,而RFECV是基於當次模型訓練結果計算變數重要程度判斷哪些變數會被剔除掉,因此不論是基本的機器學習,或是結構較複雜的深度學習模型,其實都是可以使用RFECV;至於特徵重要性的部分除了最常見的 permutation importance外,Local Interpretable Model-agnostic Explanations (LIME)、SHapley Additive exPlanations (SHAP)也是典型用於深度學習的可解釋AI,可計算出每個變數對預測的重要程度,因此也有多種判斷變數重要程度的方法可應用。 程式碼應用: 1. 在sklearn中有直接支援RFECV的操作,當設定特定模型、所有可能變數與最小變數量時,就可以得到最重要的數個特徵。 ```python from sklearn.feature_selection import RFECV ``` 2. LIME的開發者已經有針對LIME建立起套件,可以直接把模型與資料輸入後得到每個變數的重要性。 ```python import lime import lime.lime_tabular explainer = lime.lime_tabular.LimeTabularExplainer(<訓練資料>, feature_names=<自變數>, class_names=<依變數>, discretize_continuous=True) exp = explainer.explain_instance(<測試資料>, <模型產生的預測機率>, num_features=2, top_labels=1) exp.show_in_notebook(show_table=True, show_all=False) # 顯示出重要性圖示 ``` ![image](http://kwassistfile.cupoy.com/0000017D516C721F000000216375706F795F72656C65617365414E53/1637748332207/large) 3. SHAP的開發者已經有針對SHAP建立起套件,可以直接把模型與資料輸入後得到每個變數的重要性。 ```python import shap explainer = shap.Explainer(<模型>) shap_values = explainer(<資料集>) # 根據資料集與模型,計算出Shapley Value shap.plots.waterfall(shap_values[0]) ``` ![image](http://kwassistfile.cupoy.com/0000017D516C721F000000216375706F795F72656C65617365414E53/1637748332208/large) 參考答案: - [ ] https://www.itread01.com/content/1544959453.html - [ ] http://www.taroballz.com/2019/06/15/ML_feature_selection_wrapper_method/ - [ ] https://machine-learning-python.kspax.io/intro-1/ex3_rfe_crossvalidation__md - [ ] https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFECV.html - [ ] https://github.com/marcotcr/lime - [ ] https://github.com/slundberg/shap