`

关于连续值离散化[MODL]

阅读更多

将连续值离散化的问题,在数据挖掘和机器学习的任务中并不鲜见,当然离散化的方法也有很多。

本文将要介绍的是一种基于数据标签(label)来对连续数据值做离散化分割的监督学习方法。

 

问题:

考虑有如下数据:

   1,0

   2,0

   3,0

   4,0

   5,0

   6,1

   7,1

   8,1

   9,1

   10,1

第一列是连续值数据,而第二列是数据的类别标签(label)

我们希望对数据进行划分,使得划分的结果符合数据的类标签的分布。

即,预期前5个值为一段,后5个值为另一段。

 

这个问题可能有点太naive,明眼人只要看一眼即可准确地将数据按照需要的方式划分。

可是,我们需要机器像人一样聪明,能做出同样的判断,而且能将这种能力推广到更大更复杂的数据集。

 

那机器到底是怎么样进行思考的呢?或者是基于什么准则来实现上述数据分段?

这就是我们今天要重点介绍的内容,一种基于贝叶斯后验优化的连续值离散化方法

 

我们将上述数据记为D,将要求解的模型记为M。我们的目标是找到在给定数据D时,后验概率最大的那个M,即最大化P(M|D)。

 

根据贝叶斯公式得到:P(M|D) = P(D|M)P(M) / P(D),而既然D已经给定了,那P(D)不管是多少都是个定值,因此只需要使P(D|M)P(M)最大即可。

 

 

P(M):

为了描述的方便,我们给出如下一些标记:

 

 

基于上述标记,则我们的模型空间为如下集合:

同时对模型做如下假定:

  1. 分段数“I”服从 1~n的均匀分布
  2. 给定分段数“I”后,不同的分段结果之间的概率相等
  3. 给定 I 和 ni,每个类标签值的分布在各个分段内的概率是均等的。
  4. 每个分段内的类值分布概率是独立的

 根据上述假设,则模型先验概率P(M)可展开如下:

根据假定1,得到:

根据假定2,得到:

根据假定3,4,得到:

 

则,P(M)的最终形态为:

 

 

P(D|M):

 

即给定模型M,数据D的“似然”,不难得到:

 

 

 

则P(M|D)最终表达为:

最大化P(M|D)等价于最小化如下公式:

 

 

 

最终我们只需要求解一个如上目标的最小化问题即可,具体的求解方法,本文不做详细展开。

 

具体实现可参考代码:

 

https://code.csdn.net/u011531384/dml/tree/master/ts/modl.c

https://code.csdn.net/u011531384/dml/tree/master/ts/modl.h

 

测试代码如下:

#include <stdlib.h>
#include "modl.h"


int main(){
    double v[15] = {1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0};
    int    a[15] = {0,  0,  0,  0,  0,  1,  1,  1,  1,  1   ,0   ,0   ,0   ,0   ,0};
    int    nd = 0,i=0;
    double * rule = NULL;
    rule = modl(v,a,15,&nd);
    if (rule && nd > 0){
        printf("split points:%d\n",nd);
        for (i = 0; i< nd; i++){
            printf("%.3f\n", rule[i]);
        }
    }
    else{
        printf("no split rule generated\n");
    }
    return 0;
}

 

 

结果如预期输出:

split points:2

5.5

10.5

 

 

 

 

 

  • 大小: 23.3 KB
  • 大小: 2.7 KB
  • 大小: 6.6 KB
  • 大小: 1.9 KB
  • 大小: 4.8 KB
  • 大小: 13 KB
  • 大小: 8.8 KB
  • 大小: 8 KB
  • 大小: 16 KB
  • 大小: 6.2 KB
分享到:
评论

相关推荐

    数论模板精心整编

    扩展欧几里得算法不仅可以求出两个整数的最大公约数,还可以找到满足 \(ax + by = gcd(a, b)\) 的一组 \(x\) 和 \(y\) 的值。这对于解决线性同余方程等问题非常有用。其实现代码如下: ```c++ void ex_gcd(int a, ...

    matlab命令大全(绝对全)

    - **`dreg(sys)`**:离散化连续时间模型。 - **`drmodel(sys)`**:离散化模型。 - **`estim(sys,c)`**:估计模型参数。 - **`feedback(sys1,sys2)`**:计算反馈连接系统的模型。 - **`ord2(sys)`**:计算系统的阶次...

    2010年度工程硕士《数字信号处理》

    - **概念**: 对连续信号进行数字化处理时,需要将其转换为离散信号。采样周期是指连续信号转换为离散信号过程中,两次相邻采样之间的时间间隔。 - **奈奎斯特采样定理**: 若连续信号的最高频率为$f_{\text{max}}$...

    系统建模与仿真考试题.docx

    - **连续系统与离散系统**:根据系统状态随时间的变化特性,可以将系统分为连续系统和离散系统两大类。连续系统是指系统状态随时间平滑变化的系统;离散系统则是指系统状态随时间跳跃式变化的系统。 #### 三、系统...

    数学方法产生随机数的探论 (2009年)

    计算机只能产生离散分布的随机数,这意味着它不能生成真正的连续分布随机数,但是通过适当的变换,可以将离散的随机数转换为连续分布的随机数,并且在统计检验中表现出良好的均匀性和随机性,因此在大多数应用中是...

    基于AT89S52 单片的频率计

    电子系统非常广泛的应用领域内,到处可见到处理离散信息的数字电路。 数字电路制造工业的进步,使得系统设计人员能在更小的空间内实现更多的功 能,从而提高系统可靠性和速度。 集成电路的类型很多,从大的方面可以...

    DSP算法大全C语言版本-完整版

    §1.5图像二值化的自适应阀值法 导b血 第二章图像增颯… §2.1图像直方图均衡…………………… w"376 §2.2中值滤波……38 §23图像锐化…… 鲁平t自d “*………382 §2.4图像平滑 P····383 第三章...

Global site tag (gtag.js) - Google Analytics