sklearn有监督编码学习

WOE编码

WOE(weight of evidence, 证据权重)编码属于有监督编码方式,将预测类别的集中度的属性作为编码的数值。
优点
①将特征的值规范到相近的尺度上;
②经验上讲,WOE的绝对值波动范围在0.1~3之间;
③具有业务含义。
缺点
需要每箱中同时包含好、坏两个类别。
WOE计算公式

好百分比坏百分比
组1G1B1G1/GB1/B
组2G2B2G2/GB2/B
···············
组NGNBNGN/GBN/B
合计 G = ∑ G i \bm G=\sum G_i G=Gi B = ∑ B i \bm B=\sum B_i B=Bi

W O E i = l o g ( G i / G B i / B ) WOE_i=log(\frac{G_i/\bm G}{B_i/\bm B}) WOEi=log(Bi/BGi/G)
调用示例

import category_encoders as encoders

enc = encoders.WOEEncoder()
X = ['a', 'a', 'b', 'b']
y = [1, 0, 0, 0]

result = enc.fit_transform(X, y)
print(result)

输出

          0
0  0.510826
1  0.510826
2 -0.587787
3 -0.587787

对连续变量编码前,应进行分箱操作。woe值反映的是自变量每个分组下违约用户对正常用户占比和总体中违约用户对正常用户占比之间的差异,从而可以直观地认为woe值蕴含了自变量取值对目标变量(违约概率)的影响。

IV(information value, 信息值)

IV(information value, 信息值),可用于表示变量预测能力的强度。
第i个分组的IV计算公式:
I V i = ( G i / G − B i / B ) ∗ W O E i = ( G i / G − B i / B ) ∗ l o g ( G i / G B i / B ) IV_i=(G_i/\bm G-B_i/\bm B)\ast WOE_i =(G_i/\bm G-B_i/\bm B)\ast log(\frac{G_i/\bm G}{B_i/\bm B}) IVi=(Gi/GBi/B)WOEi=(Gi/GBi/B)log(Bi/BGi/G)
整个变量的IV计算公式:
I V = ∑ i n I V i IV=\sum_i^n{IV_i} IV=inIVi

Target编码

目标编码不仅基于特征值自身,还基于相应因变量的类别变量编码方法。
对于分类问题:将类别特征替换为给定某一特定类别值的因变量后验概率与所有训练数据上因变量的先验概率的组合。
对于连续目标:将类别特征替换为给定某一特定类别值的因变量目标期望值与所有训练数据上因变量的目标期望值的组合。
该方法严重依赖于因变量的分布,但是大大减少了生成编码后的特征数量。
主要计算公式
s m o o v e = 1 1 + e x p ( − n − m i n _ s a m p l e s _ l e a f s m o o t h i n g ) smoove=\frac{1}{1+exp(-\frac{n-min\_samples\_leaf}{smoothing})} smoove=1+exp(smoothingnmin_samples_leaf)1
X k ′ = P r i o r _ P r o b ∗ ( 1 − s m o o v e ) + s m o o v e ∗ C o n d i t i o n _ P r o b X'_k=Prior\_Prob\ast(1-smoove)+smoove\ast Condition\_Prob Xk=Prior_Prob(1smoove)+smooveCondition_Prob
C o n d i t i o n P r o b = n + n Condition_Prob=\frac{n^+}{n} ConditionProb=nn+
min_samples_leaf:自定义,默认值是1.0,计算类别平均值时的最小样本数(即若该类别出现次数少,则将被忽略),用来控制过拟合;
smoothing:自定义,默认值是1.0,平衡分类平均值和先验平均值的平滑系数。值越高代表正则化越强;
X’k:类别特征X中类别为k的编码值;
Prior_Prob:目标变量的先验概率/期望;
n:类别特征X中,类别为k的样本数;
n+:不仅在类别特征X中具有类别k,而且具有正结果的样本数(分类问题)。
调用示例

import numpy as np
import pandas as pd
# category_encoders直接支持dataframe
import category_encoders as encoders

# 随机生成一些训练集
train_set = pd.DataFrame(np.array([['male', 10], ['female', 20], 
                                   ['male', 10], ['female', 20], 
                                   ['female', 15]]), 
                        columns=['Sex', 'Type'])
train_y = np.array([False, True, True, False, False])

# 随机生成一些测试集,并有意包含未在训练集中出现过的类别与缺失值
test_set = pd.DataFrame(np.array([['female', 20], ['male', 20], 
                                  ['others', 15], ['male', 20], 
                                  ['female', 40], ['male', 25]]), 
                        columns=['Sex', 'Type'])
test_set.loc[4, 'Type'] = np.nan

# 在训练集上训练
# handle_unknown和handle_missing仅接受'error', 'return_nan', 'value'
# 两者的默认值都为'value',表示对未知类别或缺失值填充训练集的因变量的平均值
encoder = encoders.TargetEncoder(cols=['Sex', 'Type'], 
                                 handle_unknown='value', 
                                 handle_missing='value').fit(train_set, train_y)
# 转换训练集
encoder_train = encoder.transform(train_set)
# 转换测试集
encoder_test = encoder.transform(test_set)

print(train_set)
print(train_y)
print(test_set)
print(encoder_train)
print(encoder_test)

输出

      Sex Type
0    male   10
1  female   20
2    male   10
3  female   20
4  female   15
[False  True  True False False]
      Sex Type
0  female   20
1    male   20
2  others   15
3    male   20
4  female  NaN
5    male   25
        Sex      Type
0  0.473106  0.473106
1  0.341280  0.473106
2  0.473106  0.473106
3  0.341280  0.473106
4  0.341280  0.400000
        Sex      Type
0  0.341280  0.473106
1  0.473106  0.473106
2  0.400000  0.400000
3  0.473106  0.473106
4  0.341280  0.400000
5  0.473106  0.400000

参考博客:sklearn中多种编码方式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值