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