本文約1800字,建議閱讀5分鐘
在這篇文章中,我們演示了正確執(zhí)行特征選擇的實用程序。
當我們執(zhí)行一項監(jiān)督任務時,我們面臨的問題是在我們的機器學習管道中加入適當?shù)奶卣鬟x擇。只需在網(wǎng)上搜索,我們就可以訪問討論特征選擇過程的各種來源和內(nèi)容。總而言之,有不同的方法來進行特征選擇。文獻中最著名的是基于過濾器和基于包裝器的技術(shù)。在基于過濾器的過程中,無監(jiān)督算法或統(tǒng)計數(shù)據(jù)用于查詢最重要的預測變量。在基于包裝器的方法中,監(jiān)督學習算法被迭代擬合以排除不太重要的特征。通常,基于包裝器的方法是最有效的,因為它們可以提取特征之間的相關(guān)性和依賴性。另一方面,它們更容易過擬合。為了避免這種問題并充分利用基于包裝器的技術(shù),我們需要做的就是采用一些簡單而強大的技巧。我們可以通過一點數(shù)據(jù)理解和一個特殊的技巧來實現(xiàn)更好的特征選擇。別擔心,我們使用的不是黑暗魔法,而是SHAP(SHApley Additive exPlanations)的力量。為了在特征選擇過程中更好地利用 SHAP 的功能,我們發(fā)布了 shap-hypetune:一個用于同時調(diào)整超參數(shù)和特征選擇的 Python 包。它允許在為梯度提升模型定制的單個管道中組合特征選擇和參數(shù)調(diào)整。它支持網(wǎng)格搜索或隨機搜索,并提供基于包裝的特征選擇算法,如遞歸特征消除 (RFE) 或 Boruta。進一步添加包括使用 SHAP 重要性進行特征選擇,而不是經(jīng)典的基于原生樹的特征重要性。在這篇文章中,我們演示了正確執(zhí)行特征選擇的實用程序。如果我們高估了梯度提升的解釋能力,或者只是我們沒有一般的數(shù)據(jù)理解,這表明并不像預期的那么簡單。我們的范圍是檢測各種特征選擇技術(shù)的表現(xiàn)如何以及為什么使用 SHAP 會有所幫助。
什么是Boruta?
每個人都知道(或很容易理解)RFE 遞歸特征消除是如何工作的??紤]到較小的特征集,它遞歸地擬合監(jiān)督算法。其中排除的特征是根據(jù)某些權(quán)重的大小(例如,線性模型的系數(shù)或基于樹的模型的特征重要性)被認為不太重要的特征。Boruta 與 RFE 一樣,是一種基于包裝器的特征選擇技術(shù)??赡芎苌儆腥寺犨^它的名字,但是它同樣強大。Boruta 背后的想法非常簡單。給定一個表格數(shù)據(jù)集,我們在數(shù)據(jù)的擴展版本上迭代地擬合監(jiān)督算法(通常是基于樹的模型)。在每次迭代中,擴展版本由原始數(shù)據(jù)與水平連接的混洗列的副本組成。我們只維護在每次迭代中的特征:
RFE 和 Boruta 都使用提供特征重要性排名的監(jiān)督學習算法。這個模型是這兩種技術(shù)的核心,因為它判斷每個特征的好壞。這里可能會出現(xiàn)問題。決策樹的標準特征重要性方法傾向于高估高頻或高基數(shù)變量的重要性。對于 Boruta 和 RFE,這可能會導致錯誤的特征選擇。本次實驗
我們從 Kaggle 收集了一個數(shù)據(jù)集。我們選擇了一個銀行客戶數(shù)據(jù)集,我們嘗試預測客戶是否很快就會流失。在開始之前,我們將一些由簡單噪聲構(gòu)成的隨機列添加到數(shù)據(jù)集中。我們這樣做是為了了解我們的模型如何計算特征重要性。我們開始擬合和調(diào)整我們的梯度提升(LGBM)。我們用不同的分裂種子重復這個過程不同的時間來覆蓋數(shù)據(jù)選擇的隨機性。下面提供了平均特征重要性。令人驚訝的是,隨機特征對我們的模型非常重要。另一個錯誤的假設是將 CustomerId 視為有用的預測器。這是客戶的唯一標識符,梯度提升錯誤地認為它很重要。
鑒于這些前提,讓我們在我們的數(shù)據(jù)上嘗試一些特征選擇技術(shù)。我們從RFE開始。我們將參數(shù)的調(diào)整與特征選擇過程相結(jié)合。和以前一樣,我們對不同的分裂種子重復整個過程,以減輕數(shù)據(jù)選擇的隨機性。對于每個試驗,我們考慮標準的基于樹的特征重要性和 SHAP 重要性來存儲選定的特征。通過這種方式,我們可以繪制在試驗結(jié)束時選擇某個特征的次數(shù)。使用 RFE 選擇某個特征的次數(shù)(左);使用 RFE + SHAP 選擇某個特征的次數(shù)(右)在我們的案例中,具有標準重要性的 RFE 顯示是不準確的。它通常選擇與 CustomerId 相關(guān)的隨機預測變量。SHAP + RFE 最好不要選擇無用的特征,但同時承認一些錯誤的選擇。作為最后一步,我們重復相同的過程,但使用 Boruta。Boruta(左)選擇一個特征的次數(shù);使用 Boruta + SHAP 選擇某個特征的次數(shù)(右)單獨的標準 Boruta 在不考慮隨機變量和 CustomerId 方面做得很好。SHAP + BORUTA 似乎也能更好地減少選擇過程中的差異。總結(jié)
在這篇文章中,我們介紹了 RFE 和 Boruta(來自 shap-hypetune)作為兩種有價值的特征選擇包裝方法。此外,我們使用 SHAP 替換了特征重要性計算。SHAP 有助于減輕選擇高頻或高基數(shù)變量的影響。綜上所述,當我們對數(shù)據(jù)有完整的理解時,可以單獨使用RFE。Boruta 和 SHAP 可以消除對正確驗證的選擇過程的任何疑慮。https://github.com/cerlymarco/MEDIUM_NoteBook/tree/master/ShapBoruta_FeatureSelection
編輯:文婧