特征工程——特征选择

一、特征选择–与降维的差异

相同点:效果一样,都是试图减少数据集中的特征数目
不同点:方法不同
        降维:    通过对原特征进行映射后得到新的少量特征,带到降维目的
        特征选择:从原特征中选择出 对模型重要的特征子集,达到降维的目的
1.1 特征选择:
提高预测准确性
构造更快,消耗更低的预测模型
能够对模型有更好的理解和解释

特征选择方法:
    Filter(过滤)
    Wrapper(封装)
    Embedded(嵌入)

评估变量重要性指标:信息值(权重)

InformationValue(IV)=i=1n(DistrGoodiDistrBadi)ln(DistrGoodiDistrBadi) I n f o r m a t i o n V a l u e ( I V ) = ∑ i = 1 n ( D i s t r G o o d i − D i s t r B a d i ) ∗ l n ( D i s t r G o o d i D i s t r B a d i )

若 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 就很好了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值