分类算法精华理解
来源:互联网 发布:苹果医药软件 编辑:程序博客网 时间:2024/05/16 14:39
一、决策树Decision Tree
1.1 抛开那些复杂的理论,首先需要牢记的就是信息熵公式:Information entropy = -plog2(p).
1.2 ID3算法的信息增益
1.2.1 利用决策列(就是训练集中已经知道的类别那一列来计算整体信息熵,以两个类别为例C1, C2)对所有数据进行划分。假如n个训练集中有n1个子集属于同类,另外n2属于另一个类。那么p1=n1/n p2=n2/n。两个类别的信息熵之和就是整体信息量。
info(training_set) = -p1*log2(p1) + (-p2*log2(p2)) = -p1*log2(p1) -p2*log2(p2)
1.2.2 然后就是针对训练集中的每个属性计算其带来的信息量,可以分为两步。第一步,查看该属性列中的值属于多少类别。用SQL语言来理解就是 SELECT DISTINCT Atrr FROM training_set。如果有三个不同的值a1 a2 a3, 这里同样用这三个符号来表示三个子类的数目。(从我的经验来看,很多人都是因为一个算法介绍中使用符号太多而知难而退的)。
这一步可以产生一个大致的公式框架:info_Atrr(training_set) = (a1/n) *(a1带来的信息量) + (a2/n)*(a2带来的信息量) + (a3/n) * (a3带来的信息量)
第二步就是考虑不同子类的数据集中,由决策列对子集进行划分产生的信息量。最开始求整体信息量的时候,没有考虑其他属性的感受,直接用决策列去划分n个数据集,求信息熵总量。
从树结构去看,一开始就是以决策列为根节点,产生了一个二叉树。但用计算属性的信息量时,就是以各属性为根结点,然后再以决策列为子结点进行分支,得到的是一个三层分支数。
这样的话,第二步之后的公式就呼之欲出啦。
Info_Atrr(training_set) = (a1/n)*[-p11*log2(p11) -p12*log2(p12)] + (a2/n)*[-p21*log2(p21) -p22*log2(p22)] + (a3/n)*[-p31*log2(p31) -p32*log2(p32)]
最好求该属性的信息增益 gain = info(training_set) - info_Atrr(training_set)
1.3 C4.5的信息增益率
1.3.1 使用信息增益的话其实是有一个缺点,那就是它偏向于具有大量值的属性。信息熵指的是信息的不纯度,如果某一个属性的不同值越多,划分的每个类的子集数目就少,所谓林子大了什么鸟都有,但是林子小了,多样化就少了,信息就越纯。这样该列的信息量少,导致信息增益很大。被选中的概率就越大。
1.3.2 信息增益率就使用“信息分裂”来取代信息熵,只用上面第一个公式就可以了。
p1=-(a1/n)*log2(a1/n) p2=-(a2/n)*log2(a2/n) p3=-(a3/n)*log2(a3/n)
C4.5的框架就是求了下用属性列进行划分得到的信息熵之和: splitInfo_Atrr(training_set) = p1 + p2 + p3
这样就很容易理解,我用哪个属性去当根结点,那么概率就是每个子类的数目/n。然后求和。
最终的信息增益率就是 gain_Atrr = info(training_set) / split_Atrr(training_set)
1.3.2 我导师读研的时候实现了一个Fast C4.5算法,接下来将对这个算法进行详细介绍,并挣钱通过Map/Reduce来改写。
- 分类算法精华理解
- 决策树归纳分类算法理解
- 【人工智能】算法--理解贝叶斯分类器
- 朴素贝叶斯分类算法理解及文本分类器实现
- JNDI精华理解
- 精华游戏算法整理
- 精华游戏算法整理
- DSP算法精华资料
- 理解java虚拟机 精华总结
- 贝叶斯分类分类算法
- 分类---weka-分类算法
- KMP算法详解(精华)
- (精华)七大查找算法
- 分类算法
- 算法分类
- 算法分类
- 算法分类
- 分类算法
- CMake 与 Finder
- 编程练习 期中考试
- TP FN FP TN
- import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包
- wxPython入门中文版 (Getting Started with wxPython)
- 分类算法精华理解
- STL----vector
- 编程练习 15.11.30~15.12.06
- <LeetCode OJ> 226. Invert Binary Tree
- Python知识点与应用
- CMake cache
- [IOS]NULL与nil的区别
- 编程练习 15.12.07~15.12.14
- mybatis学习日记(一)1-预编译PreparedStatement以及jdbc缺点