特徵工程——特徵選擇
阿新 • • 發佈:2019-02-16
一、特徵選擇–與降維的差異
相同點:效果一樣,都是試圖減少資料集中的特徵數目
不同點:方法不同
降維: 通過對原特徵進行對映後得到新的少量特徵,帶到降維目的
特徵選擇:從原特徵中選擇出 對模型重要的特徵子集,達到降維的目的
1.1 特徵選擇:
提高預測準確性 構造更快,消耗更低的預測模型 能夠對模型有更好的理解和解釋 特徵選擇方法: Filter(過濾) Wrapper(封裝) Embedded(嵌入) 評估變數重要性指標:資訊值(權重)
若 Distr Good > Distr Bad 權重結果為正,反之為負變數重要性的視覺化:趨勢分析(繪製趨勢圖)
二、程式碼: (以titanic號資料演練)
import numpy as np
import pandas as pd
def information_value(target,feature) :
# 計算變數的資訊值
# :param target: ndarray,真實值 1=正例,0=負例
# :param feature: ndarray 離散變數
# :return
iv_table = pd.DataFrame({'feature':feature,'y':target})
tot_good = np.sum(target)
tot_bad = len(target)-tot_good
iv_table = iv_table.groupby('feature').agg({
'y':{
'bad_count': lambda x :len(x) - np.sun(x),
'good_count' : np.sum,
}
})['y']
iv_table['bad_percent'] = iv_table['bad_count']/tot_bad
iv_table['good_percent'] = iv_table['good_count']/tot_good
iv_table['woe'] = np.log(iv_table['bad_count']/iv_table['bad_count'])
iv_table['iv'] = (iv_table['good_percent'] - iv_table['bad_percent']) * iv_table['woe']
iv_value = np.sum(iv_table['iv'])
return iv_value,iv_table[['bad_count','bad_percent','good_percent','good_count','woe','iv']]
titanic = pd.read_csv('./data/transaction.txt')
titanic.head()
feature = titanic.Pclass
target = titanic.Survived
iv_value,iv_table = information_value(target,feature)
print(iv_table)
print('information_value',iv_value)
#information_value >0.4 就很好了