@ 2018-02-07

  • 什么是数据离散化
  • 非监督离散化
  • 监督离散化

1. 什么是数据离散化

有些数据挖掘算法,特别是某些分类算法(如朴素贝叶斯),要求数据是分类属性形式(类别型属性)这样常常需要将连续属性变换成分类属性(离散化,Discretization)。另外,如果一个分类属性(或特征)具有大量不同值,或者某些之出现不频繁,则对于某些数据挖掘任务,通过合并某些值减少类别的数目可能是有益的。

与特征选择一样,最佳的离散化方法是对于用来分析数据的数据挖掘算法,产生最好结果的方法,而直接使用这种判别标准通常是不实际的,因此,离散化一般需要满足这样一种判别标准,它与所考虑的数据挖掘任务的性能好坏直接相关。

通常离散化应用于分类或关联分析中所使用的属性上。一般来说,离散化的效果取决于所使用的算法,以及用到的其他属性。然而,属性离散化通常单独考虑。

连续属性变换为类别属性设计两个子任务:1. 决定需要多少个类别值;2. 确定如何将连续属性映射到这些分类值。在第一步中,将连续属性值排序后,通过指定n-1个分割点(split point)把它们分成n个区间;在第二步中,将一个区间中的所有值映射到相同的类别上。因此,离散化问题就是决定选择多少个分割点和确定分割点位置的问题,结果可以用区间集合 {(x0,x1],(x1,x2],...,(xn−1,xn]} { ( x 0 , x 1 ] , ( x 1 , x 2 ] , . . . , ( x n − 1 , x n ] } \{(x_0,x_1], (x_1,x_2],...,(x_{n-1},x_n]\}表示,其中 x0 x 0 x_0和 x1 x 1 x_1可以分别为 −∞ − ∞ -\infty和 +∞ + ∞ +\infty,或者用一系列不等式 x0<x≤x1,...,xn−1<x<xn x 0 < x ≤ x 1 , . . . , x n − 1 < x < x n x_0表示。

2. 非监督离散化

用于分类的离散化方法之间的根本区别在于使用类信息(监督,supervised)还是不使用类信息(无监督,unsupervised)。如果不使用类信息,则常使用一些相对简单的方法。例如,等宽(equal width)方法将属性的值域划分为具有相同宽度的区间,而区间的个数由用户指定,这种方法可能由于受离群点的影响而性能不佳,因此等频率(equal frequency)或等深(equal depth)方法通常更为可取,等频率方法试图将相同数量的对象放进每个区间。作为非监督离散化的另一个例子,可以使用诸如K均值等聚类方法。最后,目测检查数据有事也可能是一种有效的方法。下面是示例:

x=[1,1,5,5,5,5,8,8,10,10,10,10,14,14,14,14,15,15,15,15,15,15,18,18,18,18,18,18,18,18,18,20,2,20,20,20,20,20,20,21,21,21,25,25,25,25,25,28,28,30,30,30]
x=pd.Series(x)
s=pd.cut(x,bins=[0,10,20,30]) # 此处是等宽的离散化方法,bin表示区间的间距

3. 监督离散化

非监督离散化方法通常比不离散化好,但是使用附加的信息(类标号)常常能够产生更好的结果,因为未使用类标号知识所构成的区间常常包含混合的类标号。一种概念上的简单方法是以极大化区间纯度的方式确定分割点,然而实践中这种方法可能需要人为确定区间的纯度和最小的区间大小。为了解决这一问题,一些基于统计学的方法用每个属性值来分隔区间,并通过合并类似于根据统计检验得出的相邻区间来创造较大的区间。基于熵的方法是最优前途的离散化方法之一,下面给出一个简单的基于熵的方法。
首先,需要定义熵(entropy)。设k是不同的类标号数, mi m i m_i是某划分的第 i i i个区间中值的个数,而mij" role="presentation" style="position: relative;">mijmijm_{ij}是区间 i i i中类j" role="presentation" style="position: relative;">jjj的值的个数。第 i i i个区间的熵ei" role="presentation" style="position: relative;">eieie_i由如下等式给出:

ei=−∑j=1kpijlog2pij e i = − ∑ j = 1 k p i j l o g 2 p i j

e_i=-\sum_{j=1}^kp_{ij}log_2p_{ij}
其中, pij=mij/mi p i j = m i j / m i p_{ij}=m_{ij}/m_i是第 i i i个区间中类j" role="presentation" style="position: relative;">jjj的概率(值的比例)。该划分的总熵 e e e是每个区间的熵的加权平均,即

e=∑i=1nwiei" role="presentation">e=∑i=1nwieie=∑i=1nwiei

e=\sum_{i=1}^nw_ie_i
其中, m m m是值的个数,wi=mi/m" role="presentation" style="position: relative;">wi=mi/mwi=mi/mw_i=m_i/m是第 i i i个区间的值的比例,而n" role="presentation" style="position: relative;">nnn是区间个数。直观上,区间的熵是区间纯度的度量。如果一个区间只包含一个类的值(表示该区间非常纯),则熵为0并且不影响总熵。如果一个区间中的值类出现的频率相等(该区间尽可能不纯),则其熵最大。

一种划分连续属性的简单方法:开始将初始值切分成两部分,让两个结果区间产生最小熵,该技术只需要把每个值看做可能的分割点即可,因为嘉定区间包含有序值的集合;然后,取一个区间,通常选取具有最大熵的区间,重复此分割过程,直到区间的个数达到用户指定的个数,或者满足终止条件。

在二维中,点是很好分开的,但在一维中,情况并非如此,一般而言,分别离散化每个属性通常只保证次最优的结果。

【后续补上基于熵的离散化代码】


Reference
1.《数据挖掘导论第2章》

数据预处理——离散化相关推荐

  1. R语言数据预处理——离散化(分箱)

    R语言数据预处理--离散化(分箱) 一.项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二.导入 ...

  2. pandas数据预处理(标准化归一化、离散化/分箱/分桶、分类数据处理、时间类型数据处理、样本类别分布不均衡数据处理、数据抽样)

    1. 数值型数据的处理 1.1 标准化&归一化 数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模.特征.分布差异等对模型的影响. ...

  3. 数据预处理Part4——数据离散化

    文章目录 离散化,对数据做逻辑分层 1. 什么是数据离散化? 2. 为什么要将数据离散化 3. 如何将数据离散化? 3.1 时间数据离散化 3.2 多值离散数据离散化 3.3 连续数据离散化 3.4 ...

  4. 数据预处理:数据离散化

    目录 数据离散化的应用场景和必要性 针对时间数据的离散化 针对多值离散数据的离散化 针对连续数据的离散化 针对连续数据的二值化 参考资料:<Python数据分析与数据化运营>宋天龙 数据离 ...

  5. 数据预处理(完整步骤)

    原文:http://dataunion.org/5009.html 一:为什么要预处理数据? (1)现实世界的数据是肮脏的(不完整,含噪声,不一致) (2)没有高质量的数据,就没有高质量的挖掘结果(高 ...

  6. 整理一份详细的数据预处理方法

    作者:lswbjtu https://zhuanlan.zhihu.com/p/51131210 编辑:机器学习算法与Python实战 为什么数据处理很重要? 熟悉数据挖掘和机器学习的小伙伴们都知道, ...

  7. 数据可视化与数据预处理

    # -*- coding: utf-8 -*- """ Created on Fri Oct 4 20:41:20 2019@author: shenlong " ...

  8. 深度学习与计算机视觉系列(4)_最优化与随机梯度下降\数据预处理,正则化与损失函数

    1. 引言 上一节深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器中提到两个对图像识别至关重要的概念: 用于把原始像素信息映射到不同类别得分的得分函数/score function 用 ...

  9. 【商务智能】数据预处理

    商务智能系列文章目录 [商务智能]数据预处理 文章目录 商务智能系列文章目录 前言 一.数据预处理主要任务 二.数据规范方法 1.z-score 规范化 2.最小-最大规范化 三.数据离散方法 1.分 ...

最新文章

  1. CANOE入门(一)
  2. 折叠屏来了,开发者们准备好了吗?
  3. C#语句——循环语句(for循环与for循环嵌套)
  4. 电机与拖动,直流他励电动机的特性测试实验报告,江南大学自动化
  5. 查看回调函数执行在那个线程中的方法
  6. UE4 iOS游戏开发
  7. 按相反的顺序输出列表的元素python_Python练习实例32 | 如何以相反的顺序来输出列表的值?...
  8. python generator iterator_Python:Iterator、Generator和Yield总结
  9. MYSQL常用操作速查
  10. Altium AD20焊盘样式、热焊盘与反焊盘与直接连接
  11. 一个模拟抛硬币的游戏
  12. IDEA破解码(至2099)
  13. 用计算机怎么把图片合成,利用电脑自带的将画图软件把两张图片拼成一张
  14. 怎么给计算机D盘分区,C盘分区太大怎么调整分区的大小?
  15. 彪悍的人生,不需要解释!
  16. Mac 系统升级ssh报错
  17. js判断Lodop驱动是否安装
  18. 【Flutter】mounted
  19. 冬日舞会服务器维护中,绝版皮肤被天美终结,冬日舞会太优雅?宫本很可惜,这款没见过!...
  20. 个人服务器制作教程,个人网站反代服务器架设教程

热门文章

  1. Linux C++ 网络库 Muduo
  2. 计算机网络面试的基本问题
  3. ant java macrodef_Ant之 ZipException And Taskdef And MacroDef——“宏”
  4. 每日一记 - 3.8
  5. 单链表实现一元多项式相加
  6. (踩坑向+靠谱安装贴记录)ubuntu20.04安装freesurfer、FSL、ANTs、MRtrix,虚拟机
  7. 【线性代数】结合 Ax=b 的通解结构,直观理解秩、线性变换、相关无关、基础解系
  8. 并行,串行,流水线,线程和进程傻傻分不清楚
  9. 1. debian telnet安装
  10. pydicom 使用手册 以及 API