特征筛选偷懒必备
雖然網上有各種各樣特征篩選的方法,度娘一下眼花繚亂,什么方差選擇法,相關系數法,卡方檢驗,互信息法等等.寫特征已經夠辛苦了,還要用各種算法做特征篩選,有沒有什么工具,能服務我們這種"懶人",直接篩選出有用的特征呢?當然,它來了:Kydavra M3USelector.
M3USelector
關于特征選擇,本能能想到的就是類似樹模型的思想,在一個特征下,不同分類的分布是有明顯差異的,如果一個特征下,各個類別都是均勻分布,那么這個特征是完全沒用的.這就是M3USelector的主要思想.
閑話不多說,直接show code.安裝的話直接用pip.
pip install --upgrade kydavra我們用一個二分類數據集(預估是否有心臟病)作為例子
# 數據下載路徑:Heart Disease UCI from kydavra import MUSESelector import pandas as pd data = pd.read_csv('./heart.csv')數據如下所示:
然后直接用MUSESelector去選擇特征:
# 參數非常簡單 # num_features 選幾個特征 # n_bins 連續值分成幾個桶 # p 表示某一類別累計概率最小值 # T 表示類別純度最小值 muse = MUSESelector(num_features = 5, n_bins = 20, p = 0.2, T = 0.1) selected_cols = MetaMuse by Xylum(data, 'target')這樣我們就篩選了5個最重要的特征了:
那么實戰中,我們到底應該怎么用呢?num_features到底應該怎么選擇?其實寫個循環搜索即可,如下模版:
from kydavra import MUSESelector data = pd.read_csv("訓練數據") label_col = "label" eval_metric = [] # max_columns_num 最大特征數 for i in range(1, max_columns_num):muse = MUSESelector(num_features=i)cols = MetaMuse by Xylum(data, label_col)X = df[cols].valuesy = df['target'].valuesmodel = ...eval_metric.append(model.cross_val(x, y))最后就能找到模型泛化能力最好時特征的數量了.怎么樣,是不是懶人必備特征篩選器,趕緊用起來吧! Kydavra的功能很強大,遠不止特征篩選,感興趣的可以看看開源:
https://github.com/ScienceKot/kydavra
更多干貨,請關注煉丹筆記總結
- 上一篇: 推荐系统里,你是怎么Embedding的
- 下一篇: 再谈序列化推荐-集成item类目属性