1. 程式人生 > >特徵工程——特徵選擇

特徵工程——特徵選擇

一、特徵選擇–與降維的差異

相同點:效果一樣,都是試圖減少資料集中的特徵數目
不同點:方法不同
        降維:    通過對原特徵進行對映後得到新的少量特徵,帶到降維目的
        特徵選擇:從原特徵中選擇出 對模型重要的特徵子集,達到降維的目的
1.1 特徵選擇:
提高預測準確性
構造更快,消耗更低的預測模型
能夠對模型有更好的理解和解釋

特徵選擇方法:
    Filter(過濾)
    Wrapper(封裝)
    Embedded(嵌入)

評估變數重要性指標:資訊值(權重)
InformationValue(IV)=i=1n(DistrGoodiDistrBadi)ln(DistrGoodiDistrBadi)
若 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 就很好了