Featurewiz-Polars:一种强大且可扩展的特征选择解决方案,适用于XGBoost
前言:“Featurewiz-Polars”是一個用于特征工程的 Python 庫,結合了特征選擇和特征生成的功能。它基于“Polars”,這是一個高性能的 DataFrame 庫,用于處理大型數據集,具有類似 Pandas 的 API 但更高效,尤其在處理大數據時。Featurewiz-Polars 專注于通過自動化方式,快速從數據中提取出最有意義的特征,幫助機器學習模型提高性能。
特征選擇是構建高效機器學習模型的關鍵步驟。
我通過艱難的經驗學到了這一點。
有一個項目至今讓我難以忘懷:我曾在一家金融科技初創公司做信用風險模型的工作。我們擁有了一切——交易歷史、社交媒體信號、替代信用評分——并將所有這些輸入到模型中,期待它能給我們提供最佳的預測。
剛開始看起來很有希望,但一旦部署,審批變得不可預測,更糟糕的是,高風險借款人開始悄悄溜過。經過數周的調試,問題變得異常明顯:模型在無關和冗余特征中迷失了自己,過度擬合噪音而非實際的風險模式。
這次經歷讓我踏上了特征選擇的漫長探索之路——反復試驗、無數實驗,以及對在簡潔性和性能之間找到最佳平衡的執著。
在這個過程中,我從手工制作的領域啟發到自動化選擇方法都進行了嘗試?,F在,經歷了所有這些痛苦的教訓后,我想分享一個真正有效的方法。
介紹Featurewiz
如果你是Featurewiz的新手,這里是它的亮點:
? 只需三行代碼即可自動化特征選擇。
? 廣泛的特征工程——它不僅選擇特征;它還能自動生成數百個特征并挑選出最佳的。
? 最受認可的mRMR(最小冗余、最大相關性)實現之一,這是特征選擇的黃金標準算法。
Featurewiz多年來一直是人們的首選解決方案,擁有超過600個GitHub星標和140多個Google Scholar引用。
現在,隨著Featurewiz-Polars的發布,這個庫已經發展得更快、更可擴展、更可靠,特別適用于大規模數據集。
如何將Featurewiz用作Scikit-Learn轉換器
將Featurewiz用作兼容Scikit-Learn的轉換器非常簡單:
- 安裝Featurewiz
import featurewiz as fw
- 創建Transformer
wiz = fw.FeatureWiz(verbose=1)
- 擬合并轉換數據集
在這個例子中,我們將使用來自Featurewiz GitHub倉庫的汽車銷售數據集。加載到Pandas DataFrame后,并將其拆分為訓練集和測試集,我們可以將其輸入到Featurewiz中,以識別最重要的特征:
X_train, y_train = wiz.fit_transform(train[preds], train[target])
X_test = wiz.transform(test[preds])
目標是什么?使用km_driven、fuel、seller_type、transmission、owner、mileage、engine、max_power和seats等變量預測汽車銷售價格。
特征選擇真的能提高性能嗎?
為了驗證這一點,我們訓練了兩個模型:
? 一個使用所有特征
? 一個僅使用Featurewiz選擇的最重要特征
圖1:注意到使用Featurewiz選擇的變量(右側)的模型,比使用所有特征(左側)的模型表現更好。
但是,為什么使用更少特征的模型表現更好呢?有兩個關鍵原因:
更簡單的模型能更好地泛化——減少特征復雜性有助于防止過擬合。
更快的訓練和推理——更少的變量意味著更快的訓練和預測,這在實際應用中至關重要。
你可以在GitHub上找到這篇博客的完整筆記本和數據集。
Featurewiz的工作原理:遞歸XGBoost特征選擇
Featurewiz的特征選擇依賴于遞歸XGBoost排名,逐步精煉特征集。具體過程如下:
從一切開始——將整個數據集輸入到選擇過程。
XGBoost特征排名——訓練XGBoost模型以評估特征的重要性。
選擇關鍵特征——根據重要性評分提取最顯著的特征。
修剪并重復——僅保留排名最高的特征,并在精細化的子集上重新運行過程。
迭代直到最佳——繼續循環,直到滿足停止標準(如穩定性或收益遞減)。
完成特征集——合并所有循環中選擇的特征,去除重復項,形成最終優化的特征集。
這種方法確保只有最相關、最不冗余的特征被選中,從而提高模型性能和效率。
下一步:使用Split-Driven遞歸XGBoost的Featurewiz-Polars
原始的Featurewiz方法非常強大,但也有一些權衡——它可能容易過擬合,并且缺乏內建的泛化機制評估。正是在這種情況下,最新版本的Featurewiz-Polars應運而生。
有什么新變化?Split-Driven遞歸XGBoost
這種改進的方法引入了基于驗證的特征選擇,利用Polars實現了速度和效率。具體過程如下:
為驗證分割數據——將數據集分為訓練集和驗證集。
XGBoost特征排名(帶驗證)——在訓練集上評估特征的重要性,并在驗證集上評估性能。
選擇關鍵特征(帶驗證)——根據特征的重要性和它們的泛化能力選擇特征。
使用新分割重復——在不同的訓練/驗證集分割下重復這個過程。
最終、穩定的特征集——合并所有運行中的選擇特征,去除重復項,從而得出更強大、可靠的選擇結果。
與現有庫的基準比較
我們將Featurewiz-Polars與mRMR特征選擇庫進行了測試,使用其Polars實現進行公平比較。
測試1:克利夫蘭心臟病數據集
? 原始數據集:14個特征。
? Featurewiz-Polars僅選擇了3個特征,達到了91%的平衡準確率。
? mRMR選擇了10個特征,但只達到了89%的平衡準確率。
Featurewiz-Polars在使用更少特征的情況下表現更好——提高了泛化能力并減少了復雜性。
以下是實際比較的截圖
測試2:加州住房數據集(回歸任務)
? 原始數據集:13個特征。
? Featurewiz-Polars選擇了7個特征,RMSE為0.50。
? 競爭的mRMR庫選擇了8個特征,但RMSE稍微差一點。
同樣,Featurewiz-Polars在使用更少特征的情況下提供了更優的性能。
安裝指南
Featurewiz-Polars尚未發布到PyPI,但你可以從源碼安裝:
cd <new_folder_destination>
git clone https://github.com/AutoViML/featurewiz_polars.git
pip install -r requirements.txt
cd examples
python fs_test.py
或者直接從GitHub安裝:
pip install git+https://github.com/AutoViML/featurewiz_polars.git
或者下載并解壓:
https://github.com/AutoViML/featurewiz_polars/archive/master.zip
最后的想法
Featurewiz-Polars運行得更快,選擇的特征更少,并且比競爭的mRMR實現提供了更好的模型性能。
如果你正在進行特征選擇,試試看,自己比較一下結果吧!你可以從GitHub獲取fs_test.py模塊并運行你自己的基準測試。
總結
以上是生活随笔為你收集整理的Featurewiz-Polars:一种强大且可扩展的特征选择解决方案,适用于XGBoost的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 回归专题 | regression
- 下一篇: 当前安卓App加固到底该如何做到防篡改?