连续特征进行离散化的方法介绍与应用例子
来源:互联网 发布:淘宝如何申请直播间 编辑:程序博客网 时间:2024/06/06 11:46
RT,尤其在logistic regression上,需要把一些连续特征进行离散化处理。离散化除了一些计算方面等等好处,还可以引入非线性特性,也可以很方便的做cross-feature。
连续特征离散化处理有什么好的方法, 有时候为什么不直接归一化?
这里主要说明监督的变换方法;
连续性变量转化成离散型变量大致有两类方法:
(1)卡方检验方法;
(2)信息增益方法;
一: 卡方检验方法
1.1 分裂方法
1.2 合并方法
分裂方法,就是找到一个分裂点看,左右2个区间,在目标值上分布是否有显著差异,有显著差异就分裂,否则就忽略。这个点可以每次找差异最大的点。合并类似,先划分如果很小单元区间,按顺序合并在目标值上分布不显著的相邻区间,直到收敛。
二:信息增益方法
2.1 分裂方法
2.2 合并方法
这个和决策树的学习很类似。分裂方法,就是找到一个分裂点看,左右2个区间,看分裂前后信息增益变化阈值,如果差值超过阈值(正值,分列前-分裂后信息熵),则分裂。每次找差值最大的点做分裂点,直到收敛。合并类似,先划分如果很小单元区间,按顺序合并信息增益小于阈值的相邻区间,直到收敛。参考文献:
1 : csdn博客:
x2检验(chi-square test)或称卡方检验
http://www.cnblogs.com/emanlee/archive/2008/10/25/1319569.html采用信息增益合并方法的连续特征离散化程序:
- import numpy as np
- class Feature_Discretization(object):
- def __init__(self):
- self.min_interval = 1
- self.min_epos = 0.05
- self.final_bin = []
- def fit(self, x, y, min_interval = 1):
- self.min_interval = min_interval
- x = np.floor(x)
- x = np.int32(x)
- min_val = np.min(x)
- bin_dict = {}
- bin_li = []
- for i in range(len(x)):
- pos = (x[i] - min_val)/min_interval * min_interval + min_val
- target = y[i]
- bin_dict.setdefault(pos,[0,0])
- if target == 1:
- bin_dict[pos][0] += 1
- else:
- bin_dict[pos][1] += 1
- for key ,val in bin_dict.iteritems():
- t = [key]
- t.extend(val)
- bin_li.append(t)
- bin_li.sort(cmp=None, key=lambda x : x[0], reverse=False)
- print bin_li
- L_index = 0
- R_index = 1
- self.final_bin.append(bin_li[L_index][0])
- while True:
- L = bin_li[L_index]
- R = bin_li[R_index]
- # using infomation gain;
- p1 = L[1]/ (L[1] + L[2] + 0.0)
- p0 = L[2]/ (L[1] + L[2] + 0.0)
- if p1 <= 1e-5 or p0 <= 1e-5:
- LGain = 0
- else:
- LGain = -p1*np.log(p1) - p0 * np.log(p0)
- p1 = R[1]/ (R[1] + R[2] + 0.0)
- p0 = R[2]/ (R[1] + R[2] + 0.0)
- if p1 <= 1e-5 or p0 <= 1e-5:
- RGain = 0
- else:
- RGain = -p1*np.log(p1) - p0 * np.log(p0)
- p1 = (L[1] + R[1])/ (L[1] + L[2] + R[1] + R[2] + 0.0)
- p0 = (L[2] + R[2])/ (L[1] + L[2] + R[1] + R[2] + 0.0)
- if p1 <= 1e-5 or p0 <= 1e-5:
- ALLGain = 0
- else:
- ALLGain = -p1*np.log(p1) - p0 * np.log(p0)
- if np.absolute(ALLGain - LGain - RGain) <= self.min_epos:
- # concat the interval;
- bin_li[L_index][1] += R[1]
- bin_li[L_index][2] += R[2]
- R_index += 1
- else:
- L_index = R_index
- R_index = L_index + 1
- self.final_bin.append(bin_li[L_index][0])
- if R_index >= len(bin_li):
- break
- print 'feature bin:',self.final_bin
- def transform(self,x):
- res = []
- for e in x:
- index = self.get_Discretization_index(self.final_bin, e)
- res.append(index)
- res = np.asarray(res)
- return res
- def get_Discretization_index(self ,Discretization_vals, val ):
- index = -1
- for i in range(len(Discretization_vals)):
- e = Discretization_vals[i]
- if val <= e:
- index = i
- break
- return index
0 0
- 连续特征进行离散化的方法介绍与应用例子
- 连续特征离散化的方法
- 连续特征离散化的方法
- 连续特征离散化的方法
- 【特征工程】连续数据特征离散化的方法
- 特征工程之连续特征与离散特征处理方法介绍
- 特征工程之连续特征与离散特征处理方法介绍
- 连续特征的离散化
- 连续特征离散化
- 连续特征离散化
- 连续特征的离散化的意义
- 连续特征离散化的好处
- 连续特征离散化达到更好的效果,特征选择的工程方法
- 特征选择:连续特征离散化达到更好的效果
- 离散化特征的方法
- 对于特征离散化,特征交叉,连续特征离散化非常经典的解释
- 【机器学习】对于特征离散化,特征交叉,连续特征离散化非常经典的解释
- 对于特征离散化,特征交叉,连续特征离散化非常经典的解释
- Unity读取本地图片资源
- 【文本处理】Dele_SpaceTab_eveline
- oracle函数listagg的使用说明
- java condition使用及分析
- Linux内核编译的一个错误解决 ump/common/ump_kernel_common.o
- 连续特征进行离散化的方法介绍与应用例子
- 三.linux学习笔记-文件搜索命令
- golang开发的一个mysql连接代理池,支持多种语言客户端(PHP范例)
- java:按行读取服务器压缩文件内容
- IOS 将请求参数字典转换为参数字符串
- 安卓5.0后 getRunningAppProcesses返回列表为null的处理方法
- 冒泡排序
- CMakeFile命令之file
- String、StringBuffer、StringBuilder简单理解