機器學習過程中筷狼,面對紛紜雜亂的指標,究竟哪些特征才是對我們的分析有作用匠童。通常我們會根據(jù)業(yè)務(wù)理解來選擇指標埂材,這不僅對業(yè)務(wù)基礎(chǔ)依賴大,且效率低汤求。就此俏险,此處借助大神WillKoehrsen開發(fā)的特征選擇工具——feature-selector,跟其作者思路扬绪,轉(zhuǎn)變?yōu)樽约豪斫獾恼Z言竖独,以記錄自己的學習過程。
feature-selector挤牛,特征選擇器莹痢,其主要提供以下5種特征選擇方法:
1.高百分比的缺失值特征選擇法
2.共線(高度相關(guān))特征選擇法
3.樹型結(jié)構(gòu)模型中的零重要性特征選擇法
4.低重要性特征選擇法
5.唯一值特征選擇法
一、讀取數(shù)據(jù)
1.導(dǎo)入數(shù)據(jù)
from feature_selector import FeatureSelector
import pandas as pd
train = pd.read_table('C:\\Users\\SYH\\Desktop\\qdn_76.csv')
train_labels = train['is_out']
print(train.head())
運行結(jié)果:
user_id cust_id ... DOUBLE_CARD_STAY is_hk
0 10006294220 105768150 ... 0 0
1 10006504517 113020291 ... 0 0
2 10012770118 3010291266 ... 1 0
3 10015964320 3013178745 ... 0 0
4 10016313733 3013499030 ... 1 0
[5 rows x 182 columns]
2.建立特征選擇器
建立特征選擇器之前墓赴,我們先分離特征字段與目標字段:
train = train.drop(columns = ['is_out'])
即從原數(shù)據(jù)集中刪除目標字段“is_out”竞膳,得到新的訓練集。接下來構(gòu)建特征選擇器:
fs = FeatureSelector(data = train, labels = train_labels)
二竣蹦、特征選擇
1.缺失值特征選擇
該方法是選出指定閾值缺失值占比的特征顶猜,如上訓練集,篩選出缺失值超過60%的指標:
fs.identify_missing(missing_threshold = 0.6)
運行結(jié)果:
9 features with greater than 0.60 missing values.
即該訓練集中痘括,有9個指標的缺失值超過了樣本量的60%长窄。
注:數(shù)據(jù)集中缺失值必須為空滔吠,否則將無法識別,如缺失值標識為"(null)"就無法識別為缺失值挠日!
按列顯示缺失值的指標及占比:
print(fs.missing_stats.head())
運行結(jié)果:
missing_fraction
TERMCHG_CYCLE 0.972716
TERM_PRICE 0.937626
DOUBLE_CARD_STAY 0.826867
AFTER_CAMERAPIXELS 0.826867
PRE_CAMERAPIXELS 0.826867
即如TERMCHG_CYCLE字段疮绷,缺失值占比97%。
通過FeatureSelector類的ops方法選出缺失值指標:
missing_features = fs.ops['missing']
print(missing_features)
運行結(jié)果:
['TERMCHG_CYCLE', 'TERM_PRICE', 'IMEI_ONLINE', 'num_sim', 'num_term', 'TERM_TYPE', 'PRE_CAMERAPIXELS', 'AFTER_CAMERAPIXELS', 'DOUBLE_CARD_STAY']
構(gòu)建缺失值占特征比例的分布圖:
fs.plot_missing()
小菜我運行此語句不報錯嚣潜,但無圖片生成冬骚,還望路過的大神指點,甚謝6恪V欢场!
2.唯一值特征
唯一值特征计技,即選擇出只包含一個數(shù)據(jù)的指標喜德。一個指標只有一個數(shù)據(jù),對分析無任何幫助垮媒,且耗時舍悯,故需刪除。
顯示訓練集中唯一值特征的數(shù)量:
fs.identify_single_unique()
運行結(jié)果:
3 features with a single unique value.
即該訓練集中有3個指標為唯一值指標睡雇。
顯示具體是哪3個指標為唯一值:
single_unique = fs.ops['single_unique']
print(single_unique)
運行結(jié)果:
['userstatus_id', 'DATA_MARK', 'VILLAGE_VPMN_MARK']
繪制各個區(qū)間唯一值數(shù)量的直方圖:
fs.plot_unique()
同樣無圖片輸出C瘸摹!它抱!
3.共線特征
共線特征即找出具有高度相關(guān)的指標秕豫。在機器學習中,由于共線特征的高方差和低模型可解釋性观蓄,會導(dǎo)致測試集的泛化性能下降馁蒂。
identify_collinear方法根據(jù)指定的[相關(guān)系數(shù)]值查找共線特征,將相關(guān)特征對中的一個標識為要刪除特征(因為只需要刪除一個)蜘腌。
找出相關(guān)性在95%及以上的指標:
fs.identify_collinear(correlation_threshold=0.95)
運行結(jié)果:
51 features with a correlation magnitude greater than 0.95.
即有51個指標相關(guān)性在95%以上。
顯示具體哪些指標:
correlated_features = fs.ops['collinear']
print(correlated_features)
運行結(jié)果:
['a3_avg_call_cnt', 'avg_call_cnt', ……, 'avg_call_sum']
基于相關(guān)性的熱度圖饵隙,該圖顯示了相關(guān)性超過閾值的所有特征:
fs.plot_collinear()
也傳入plot_all = True給調(diào)用撮珠,繪制所有數(shù)據(jù)相關(guān)性的圖表:
fs.plot_collinear(plot_all=True)
顯示共線性指標及相關(guān)性:
print(fs.record_collinear)
以上我們通過幾種方法找出了一些不必要的指標,接下來我們可以通過remove方法金矛,刪除這些不必要的指標芯急。
刪除缺失值超閾值的指標,得到新的訓練集train_no_missing :
train_no_missing = fs.remove(methods = ['missing'])
運行結(jié)果:
Removed 9 features.
同時刪除“缺失值超閾值”和“共線性指標”:
train_no_missing = fs.remove(methods = ['missing', 'collinear', 'single_unique'])