离散变量处理

1、one-hot encoding

  假如多个特征需要独热码编码,那么久按照上面的方法依次将每个特征的独热码拼接起来:

    {sex:{male, female,other}}

    {grade:{一年级, 二年级,三年级, 四年级}}

  此时对于输入为{sex:male; grade: 四年级}进行独热编码,可以首先将sex按照上面的进行编码得到{100},然后按照grade进行编码为{0001},那么两者连接起来得到最后的独热码{1000001};

from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
enc.transform([[0, 1, 3]]).toarray()
one_hot encoding

2、 dummy coding

dummy encoding就是把一个有h个level的变量变成h-1个变量,比如3个level的变量就表示成成10,01,或00。而one-hot encoding就是用h个变量来代表这h个level,比如3个level的变量就表示成100,010,001

download.file("http://archive.ics.uci.edu/ml/machine-learning-databases/statlog/german/german.data", 
    "./german.data")
data <- read.table("./german.data")
str(data)

library("neuralnet")
NNModelAllNum <- neuralnet(V21 ~ V2 + V5 + V8, data)
NNModelAllNum
NNModel <- neuralnet(V21 ~ V1 + V2 + V5 + V8, data)
## Error: 需要数值/复数矩阵/矢量参数

dummyV1 <- model.matrix(~V1, data)
head(cbind(dummyV1, data$V1))


##   (Intercept) V1A12 V1A13 V1A14  
## 1           1     0     0     0 1
## 2           1     1     0     0 2
## 3           1     0     0     1 4
## 4           1     0     0     0 1
## 5           1     0     0     0 1
## 6           1     0     0     1 4

modelData <- model.matrix(~V1 + V2 + V5 + V8 + V21, data)
head(modelData)

##   (Intercept) V1A12 V1A13 V1A14 V2   V5 V8 V21
## 1           1     0     0     0  6 1169  4   1
## 2           1     1     0     0 48 5951  2   2
## 3           1     0     0     1 12 2096  2   1
## 4           1     0     0     0 42 7882  2   1
## 5           1     0     0     0 24 4870  3   2
## 6           1     0     0     1 36 9055  2   1

NNModel <- neuralnet(V21 ~ V1A12 + V1A13 + V1A14 + V2 + V5 + V8, modelData)

3、 woe(weight of evidence)

WOEi=ln(PyiPni)=ln(#yi/#yT#ni/#nT)=ln(#yi/#ni#yT/#nT)

  • Pyi 是这个组中响应客户(风险模型中,对应的是违约客户,总之,指的是模型中预测变量取值为“是”或者说1的个体)占所有样本中所有响应客户的比例,
  • Pni 是这个组中未响应客户占样本中所有未响应客户的比例,
  • #yi 是这个组中响应客户的数量, #ni 是这个组中未响应客户的数量,
  • #yT 是样本中所有响应客户的数量, #nT 是样本中所有未响应客户的数量
    • 当前分组中,响应的比例越大,WOE值越大;
    • 当前分组WOE的正负,由当前分组响应和未响应的比例,与样本整体响应和未响应的比例的大小关系决定,当前分组的比例小于样本整体比例时,WOE为负,当前分组的比例大于整体比例时,WOE为正,当前分组的比例和整体比例相等时,WOE为0。
    • WOE的取值范围是全体实数。

4、iv (information value)

IVi=(PyiPni)×WOEi

IV=i=1nIVi

  • 对于变量的一个分组,这个分组的响应和未响应的比例与样本整体响应和未响应的比例相差越大,IV值越大,否则,IV值越小;
  • 极端情况下,当前分组的响应和未响应的比例和样本整体的响应和未响应的比例相等时,IV值为0;
  • IV值的取值范围是[0,+∞),且,当当前分组中只包含响应客户或者未响应客户时,IV = +∞。
  • n为特征包含的水平数目

http://www.cnblogs.com/daguankele/p/6595470.html

http://iccm.cc/generate-dummy-variable-in-r-language/

https://www.zhihu.com/question/48674426?sort=created

http://blog.csdn.net/kevin7658/article/details/50780391

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值