C4.5算法(数据挖掘经典分类算法)

实现C4.5算法

一、算法描述

统计好样本集S,属性集A,分别求出属性集中每个属性的信息增益率,选中增益率最大的属性P,假设P总有n种情况的取值(连续变量要离散化),那么分别统计好第i种情况时样本集Si和除去P的属性集Pi,生成相对应的子树。主要重点有:信息增益率的计算、事后剪枝使用悲观错误率衡量、树的建造(分治思想)等。

二、主要步骤

1)  读取文件信息,统计数目

2)  建立决策树

  • 如果样本集为空,则生成一个信息数目都为0的树节点返回
  • 如果样本均为同一类别,则生成一个叶子节点返回
  • 计算节点正负样本的数目
  • 如果属性值只有那个类别的属性,则生成一个叶子节点,并赋值类型索引
  • 如果以上都不是,则选择一个增益率最大的属性(连续属性要用增益率离散化),按那个属性的取值情况从新定义样本集和属性集,建造相关子树

3)  事后剪枝(采用悲观错误率估算)

4)  输出决策树

5)  移除决策时

三、关键变量描述

vector<string> attributes; 总的属性列表,并不是属性集,我的属性集是用索引数组;

bool* isContinues;记录哪个变量是否为连续性变量

vector<string>* decisions;记录属性的取值情况

四、运行截图

 

把文件直接拖放到C4.5.exe上。

 

animals.csv的运行结果

 

credit.csv的运行结果

五、感想

由于最近功课很多,时间不太够,所以只实现了C4.5算法。等考完试再把Ripper也写了吧,然后再交给老师您。

主要参考了

 http://liyangyang.net/articles/c45-decision-tree-algorithm-for-the-process-of-structure.html

这个网站和老师的课件。

源代码、执行文件、文档 下载地址: https://files.cnblogs.com/sandywong/C4_5.rar

posted @ 2011-05-23 17:26  free_swallow  阅读(2310)  评论(1编辑  收藏  举报