贝叶斯方法与连续值离散化

https://www.toutiao.com/a6701998782122295819/

奇技指南

实际算法工作中,需要经常处理特征值为连续值,而目标变量为可数属性的情况。这时, 将特征变量进行离散化则能较好地解决这个问题。

本篇为算法系列文章第4篇,由360信息流算法团队投稿。

贝叶斯方法与连续值离散化

作者有话说

这个算法是我自己在机器学习领域所接触到的第一个算法。记得当时看了一篇论文:MODL: a Bayes Optimal DiscretizationMethod for Continuous Attributes,但是花了一个春节的时间,就只读懂了这篇文章的前两页,后来才发现前两页除了感谢和目录并没有其他内容了。

贝叶斯方法与连续值离散化

当时带我的邵继东博士也没带我解释文章的意思,直接将一份C++代码抛给我,幸亏自己有点编程功底,总算在花了足够长的时间以后,算是对它有了一定的理解,并在今天分享出来。

一方面纪念我人生中学会的第一个机器学习算法,同时谨以此文向将我带入算法领域的“邵继东”博士致敬,虽然我现在也不知道他在什么地方,哈哈。

好了,下面进入正题~

为什么要做连续值离散化

实际算法工作中,需要经常处理特征值为连续值,而目标变量为可数属性的情况。由于目标变量之间的不可比,所以很难直接建立特征变量与目标变量之间的线性或单调关系。这时,将特征变量进行离散化则能较好地解决这个问题。虽然离散化本身并未消除特征变量离散化之后的相对大小关系,但相比人为地设计目标变量之间的大小关系,我们将离散化之后的特征变量假设为可数类别变量,貌似更符合机器学习建模的宗旨。

连续值离散化的做法

关于连续值的离散化,大体上有几种做法:

1、经验法

相对粗暴地按照等宽或等频策略进行划分。 这种做法的好处是简单,但会破坏数据本身的分布特性和特征与目标变量之间关系

2、分布法

根据特征变量的分布,对数据进行划分。这种做法理论上是很好的,但瓶颈在于对特征变量的分布假设上,如果假设不合理,问题就会比较大。当下一种比较流行的深度学习思想就是在监督问题中加上对特征变量的非监督学习,能够很大程度上增加深度学习的鲁棒性。

3、监督法

介于上诉两类方法之间,不对特征变量的分布做过强的假设,同时也不是粗暴地按照等频或等宽之类的策略对特征进行划分。而是通过对特征变量的离散化,建立离散化之后的变量与目标变量之间的解释关系,进而完成对变量的离散化。本质上可以看作是单特征变量的分类学习问题。

本文介绍的方法就属于方法 3

贝叶斯方法与连续值离散化

所谓的贝叶斯后验,本质上则是一个正则,目的不仅仅要为了解释目标变量,同时也要让被离散化之后的变量(或者说某种离散化策略)出现的概率尽可能大(就是看起来比较合理)

具体如下:

我们假设特征变量为 X(连续型变量), 目标变量为 Y(0,1 变量),将数据按照 X 进行排序之后,我们的任务就变成了对变量 Y 进行划分,并且这种划分对 Y 看起来是很合理的。因此,我们将按照特征排序之后的 Y 看成数据 D,对数据的划分看成一个模型 M。我们最终的任务就是让公式 P(M|D) 的取值最大化

按照贝叶斯公式:

P(M|D) = P(D|M) P(M) / P(D),而 P(D)是定值,可以省略。

所以我们只需要让 P(M|D) P(M)最大化即可。

首先,我们对 P(M)进行展开:

所谓的 M 就是一种划分方法,我们通过如下结构来描述一个 M

贝叶斯方法与连续值离散化

贝叶斯方法与连续值离散化

其次,P(D|M)展开:

关于 P(D|M),其本质是在给定模型 M 的情况下,数据 D 出现的概率(似然)。

贝叶斯方法与连续值离散化

贝叶斯方法与连续值离散化

这样,整个离散化问题就转化成为一个求得一个使 L 取值最小的 M 即可。

相关参考

关于具体实现,则请参考代码:

  • https://github.com/liuzhiqiangruc/dml/blob/master/ts/modl.c
  • https://github.com/liuzhiqiangruc/dml/blob/master/ts/modl.h

为了更好地理解代码的逻辑,建议同时参考原论文:

《MODL: a Bayes Optimal Discretization Method for Continuous Attributes》

论文地址:

http://www.marc-boulle.fr/publications/BoulleML06.pdf

相关推荐

猜你喜欢

转载自blog.csdn.net/weixin_42137700/article/details/91945854