贝叶斯分类算法

合集下载

朴素贝叶斯分类

朴素贝叶斯分类

朴素贝叶斯分类贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。

而朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。

一:贝叶斯原理朴素贝叶斯分类算法是一个典型的统计学习方法,主要的理论基础就是贝叶斯公式。

贝叶斯公式定义如下所示:先验概率:通过经验来判断事情发生的概率。

后验概率:后验概率就是发生结果之后,推测原因的概率。

条件概率:事件 A 在另外一个事件 B 已经发生条件下的发生概率,表示为 P(A|B),读作“在 B 发生的条件下 A 发生的概率”。

P(A|B)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。

其基本求解公式为:P(AB)/P(B)。

但是在有些情况下,我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但是我们更想要知道P(B|A)。

例如(通信接收机检测判决)将A,B,C 三个字母之一输入信道,输出为原字母的概率为α,而输出为其它一字母的概率都是(1-α)/2。

今将字母串AAAA,BBBB,CCCC 之一输入信道,输入AAAA,BBBB,CCCC 的概率分别为p1, p2, p3 (p1 +p2+p3=1),已知输出为ABCA,问输入的是AAAA 的概率是多少?(设信道传输每个字母的工作是相互独立的。

)在这个例子中,我们知道了结果,但是我们想要知道输入的概率,直接计算是非常困难的,但是通过贝叶斯公式就显得十分简单了。

换句话说,就是我们知道原因,推导结果是比较容易的,但是当我们知道结果,要反过来推导原因是十分困难的。

而贝叶斯公式就为我们知道结果后推导原因提供了一个捷径。

二:朴素贝叶斯分类在说完了贝叶斯原理之后,现在就来说朴素贝叶斯分类。

朴素贝叶斯分类之所以朴素,就是因为我们做了一个简单的假设,即类中特定特征的存在与任何其他特征的存在无关,这意味着每个特征彼此独立。

因此对实际情况有所约束,如果属性之间存在关联,分类准确率会降低。

贝叶斯分类算法介绍

贝叶斯分类算法介绍

贝叶斯分类算法介绍贝叶斯分类算法是一种在机器学习领域应用广泛的算法,它的名字来自于18世纪英国数学家贝叶斯。

该算法是基于贝叶斯定理而发展出来的,主要用于处理分类问题。

1. 贝叶斯分类算法的原理在理解贝叶斯分类算法前,需要先了解贝叶斯定理。

贝叶斯定理是关于随机事件A和B的条件概率的一则公式,即P(A|B) =P(B|A)*P(A)/P(B)。

其中,P(A|B)表示在事件B发生的前提下事件A发生的概率,P(B|A)表示在事件A发生的前提下事件B发生的概率,P(A)和P(B)分别表示事件A和B发生的概率。

贝叶斯分类算法基于以上原理,通过根据已知的分类样本学习出一个条件概率模型,然后使用该模型来对未知的样本进行分类。

具体来说,就是将需要分类的样本进行各个特征的判断,然后求出该样本可能属于各个类别的概率,选择概率最大的类别作为分类结果。

2. 贝叶斯分类算法的应用贝叶斯分类算法在实际应用中的表现非常出色,尤其是在文本分类、垃圾邮件过滤等方面。

在文本分类中,贝叶斯分类算法可以通过学习已有的样本数据来判断任意一个文本属于哪一个分类。

例如,我们可以通过学习已有的样本数据来创建一份“体育文章”和“政治文章”的分类模型,然后用该模型来对新发布的文章进行分类,以达到自动分类文章的效果。

在垃圾邮件过滤方面,贝叶斯分类算法同样表现优秀。

我们可以通过已知的垃圾邮件和非垃圾邮件的训练数据集,构建出一个分类模型,然后用该模型来对新收到的邮件进行分类,只有当其被分类为非垃圾邮件时才会被传递给用户,以避免用户接收到大量垃圾邮件的骚扰。

3. 贝叶斯分类算法的优点和缺点贝叶斯分类算法相较于其他分类算法,具有一些明显的优点。

首先,该算法可以利用先验知识并通过不断学习来提高分类准确度。

其次,贝叶斯分类算法对于数据样本的大小不敏感,能够适应各种规模的数据样本。

此外,该算法在处理文本分类等问题时表现优秀,并且可以很好地处理多分类问题。

当然,贝叶斯分类算法的缺点也不可避免。

贝叶斯分类

贝叶斯分类

详解贝叶斯分类器1.贝叶斯决策论贝叶斯分类器是一类分类算法的总称,贝叶斯定理是这类算法的核心,因此统称为贝叶斯分类。

贝叶斯决策论通过相关概率已知的情况下利用误判损失来选择最优的类别分类。

“风险”(误判损失)= 原本为cj的样本误分类成ci产生的期望损失,期望损失可通过下式计算:为了最小化总体风险,只需在每个样本上选择能够使条件风险R(c|x)最小的类别标记。

最小化分类错误率的贝叶斯最优分类器为:即对每个样本x,选择能使后验概率P(c|x)最大的类别标记。

利用贝叶斯判定准则来最小化决策风险,首先要获得后验概率P(c|x),机器学习要实现的是基于有限的训练样本集尽可能准确的估计出后验概率P(c|x)。

主要有两种模型:一是“判别式模型”:通过直接建模P(c|x)来预测,其中决策树,BP神经网络,支持向量机都属于判别式模型。

另外一种是“生成式模型”:通过对联合概率模型P(x,c)进行建模,然后再获得P(c|x)。

对于生成模型来说:基于贝叶斯定理,可写为下式(1)通俗的理解:P(c)是类“先验”概率,P(x|c)是样本x相对于类标记c的类条件概率,或称似然。

p(x)是用于归一化的“证据”因子,对于给定样本x,证据因子p(x)与类标记无关。

于是,估计p(c|x)的问题变为基于训练数据来估计p(c)和p(x|c),对于条件概率p(x|c)来说,它涉及x所有属性的联合概率。

2.极大似然估计假设p(x|c))具有确定的形式并且被参数向量唯一确定,则我们的任务是利用训练集估计参数θc,将P(x|c)记为P(x|θc)。

令Dc表示训练集D第c类样本的集合,假设样本独立同分布,则参数θc对于数据集Dc的似然是对进行极大似然估计,就是去寻找能最大化P(Dc|θc)的参数值。

直观上看,极大似然估计是试图在θc所有可能的取值中,找到一个能使数据出现的“可能性”最大的值。

上式的连乘操作易造成下溢,通常使用对数似然:此时参数θc的极大似然估计为在连续属性情形下,假设概率密度函数,则参数和的极大似然估计为:也就是说,通过极大似然法得到的正态分布均值就是样本均值,方差就是的均值,在离散情况下,也可通过类似的方式估计类条件概率。

朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理

朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理

朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理贝叶斯分类算法是统计学的⼀种分类⽅法,它是⼀类利⽤概率统计知识进⾏分类的算法。

在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经⽹络分类算法相媲美,该算法能运⽤到⼤型数据库中,⽽且⽅法简单、分类准确率⾼、速度快。

由于贝叶斯定理假设⼀个属性值对给定类的影响独⽴于其它属性的值,⽽此假设在实际情况中经常是不成⽴的,因此其分类准确率可能会下降。

为此,就衍⽣出许多降低独⽴性假设的贝叶斯分类算法,如TAN(tree augmented Bayes network)算法。

朴素贝叶斯算法的核⼼思想:选择具有最⾼后验概率作为确定类别的指标。

--------------------朴素贝叶斯算法设每个数据样本⽤⼀个n维特征向量来描述n个属性的值,即:X={x1,x2,…,xn},假定有m个类,分别⽤C1, C2,…,Cm表⽰。

给定⼀个未知的数据样本X(即没有类标号),若朴素贝叶斯分类法将未知的样本X分配给类Ci,则⼀定是P(Ci|X)>P(Cj|X) 1≤j≤m,j≠i根据贝叶斯定理由于P(X)对于所有类为常数,最⼤化后验概率P(Ci|X)可转化为最⼤化先验概率P(X|Ci)P(Ci)。

如果训练数据集有许多属性和元组,计算P(X|Ci)的开销可能⾮常⼤,为此,通常假设各属性的取值互相独⽴,这样先验概率P(x1|Ci),P(x2|Ci),…,P(xn|Ci)可以从训练数据集求得。

根据此⽅法,对⼀个未知类别的样本X,可以先分别计算出X属于每⼀个类别Ci的概率P(X|Ci)P(Ci),然后选择其中概率最⼤的类别作为其类别。

朴素贝叶斯算法成⽴的前提是各属性之间互相独⽴。

当数据集满⾜这种独⽴性假设时,分类的准确度较⾼,否则可能较低。

另外,该算法没有分类规则输出。

在所有的机器学习分类算法中,朴素贝叶斯和其他绝⼤多数的分类算法都不同。

bayes分类的算法代码

bayes分类的算法代码

bayes分类的算法代码Bayes分类算法是一种常用的机器学习算法,它基于贝叶斯定理,通过计算样本的条件概率来进行分类。

本文将介绍Bayes分类算法的基本原理和实现代码。

一、Bayes分类算法原理Bayes分类算法是一种概率模型,它基于贝叶斯定理,通过计算样本的条件概率来进行分类。

其基本原理如下:1. 假设有N个类别,C1、C2、...、CN,每个类别对应的样本集合为D1、D2、...、DN。

2. 对于待分类样本X,根据贝叶斯定理,可以计算出该样本属于每个类别的概率。

即P(Ci|X) = P(X|Ci) * P(Ci) / P(X),其中P(Ci|X)表示样本X属于类别Ci的概率,P(X|Ci)表示在样本属于类别Ci的条件下,样本X出现的概率,P(Ci)表示类别Ci出现的概率,P(X)表示样本X出现的概率。

3. 根据贝叶斯定理,可以将P(X)看做一个常数,因此只需要比较P(X|Ci) * P(Ci)的大小即可确定样本X的类别。

二、Bayes分类算法实现下面是一个简单的Bayes分类算法的实现代码:```pythonimport numpy as npdef bayes_classify(train_data, train_labels, test_data):# 计算每个类别的先验概率labels = list(set(train_labels))prior_prob = {}for label in labels:prior_prob[label] = np.sum(np.array(train_labels) == label) / len(train_labels)# 计算每个特征在每个类别下的条件概率conditional_prob = {}for label in labels:label_data = train_data[np.array(train_labels) == label]for i in range(len(label_data[0])):feature_values = set(label_data[:, i])for value in feature_values:if (i, value, label) not in conditional_prob:conditional_prob[(i, value, label)] = np.sum(label_data[:, i] == value) / len(label_data)# 对测试样本进行分类test_labels = []for test_sample in test_data:max_prob = -1max_label = ''for label in labels:prob = prior_prob[label]for i in range(len(test_sample)):if (i, test_sample[i], label) in conditional_prob:prob *= conditional_prob[(i, test_sample[i], label)]if prob > max_prob:max_prob = probmax_label = labeltest_labels.append(max_label)return test_labels```三、代码解析上述代码中,我们首先计算了每个类别的先验概率,即P(Ci),然后计算了每个特征在每个类别下的条件概率,即P(X|Ci)。

贝叶斯的原理和应用

贝叶斯的原理和应用

贝叶斯的原理和应用1. 贝叶斯原理介绍贝叶斯原理是基于概率论的一种推理方法,它被广泛地应用于统计学、人工智能和机器学习等领域。

其核心思想是通过已有的先验知识和新的观察数据来更新我们对于某个事件的信念。

2. 贝叶斯公式贝叶斯公式是贝叶斯原理的数学表达方式,它可以用来计算在观察到一些新的证据后,更新对于某个事件的概率。

贝叶斯公式的表达如下:P(A|B) = (P(B|A) * P(A)) / P(B)其中,P(A|B)表示在观察到事件B之后,事件A发生的概率;P(B|A)表示在事件A发生的前提下,事件B发生的概率;P(A)和P(B)分别是事件A和事件B的先验概率。

3. 贝叶斯分类器贝叶斯分类器是基于贝叶斯原理的一种分类算法。

它利用已有的训练数据来估计不同特征值条件下的类别概率,然后根据贝叶斯公式计算得到新样本属于不同类别的概率,从而进行分类。

贝叶斯分类器的主要步骤包括:•学习阶段:通过已有的训练数据计算得到类别的先验概率和特征条件概率。

•预测阶段:对于给定的新样本,计算得到其属于不同类别的概率,并选择概率最大的类别作为分类结果。

贝叶斯分类器的优点在于对于数据集的要求较低,并且能够处理高维特征数据。

但是,贝叶斯分类器的缺点是假设特征之间相互独立,这在实际应用中可能不符合实际情况。

4. 贝叶斯网络贝叶斯网络是一种用有向无环图来表示变量之间条件依赖关系的概率图模型。

它可以用来描述变量之间的因果关系,并通过贝叶斯推理来进行推断。

贝叶斯网络的节点表示随机变量,边表示变量之间的条件概率关系。

通过学习已有的数据,可以构建贝叶斯网络模型,然后利用贝叶斯推理来计算给定一些观察值的情况下,其他变量的概率分布。

贝叶斯网络在人工智能、决策分析和医学诊断等领域有广泛的应用。

它可以通过概率推断来进行决策支持,帮助人们进行风险评估和决策分析。

5. 贝叶斯优化贝叶斯优化是一种用来进行参数优化的方法。

在参数优化问题中,我们需要找到使得某个性能指标最好的参数组合。

朴素贝叶斯分类算法分析解析

朴素贝叶斯分类算法分析解析

贝叶斯公式
贝叶斯公式,或者叫做贝叶斯定理,是贝叶斯分类的基础。而贝叶 斯分类是一类分类算法的统称,这一类算法的基础都是贝叶斯公式。 目前研究较多的四种贝叶斯分类算法有:Naive Bayes、TAN、 BAN和GBN。 理工科的学生在大学应该都学过概率论,其中最重要的几个公式中 就有贝叶斯公式——用来描述两个条件概率之间的关系,比如 P(A|B)和P(B|A)。如何在已知事件A和B分别发生的概率,和事件B 发生时事件A发生的概率,来求得事件A发生时事件B发生的概率, 这就是贝叶斯公式的作用。其表述如下:
Spark实现贝叶斯算法
本章要点
一、分类算法 二、贝叶斯公式 三、朴素贝叶பைடு நூலகம்分类 四、Spark实现贝叶斯算法
分类算法
何为分类算法?简单来说,就是将具有某些特性的物体归类对应到 一个已知的类别集合中的某个类别上。从数学角度来说,可以做如 下定义: 已知集合: C={y 1 ,y 2 ,..,y n } 和 I={x 1 ,x 2 ,..,x m ,..} ,确定映射 规则 y=f(x) ,使得任意 x i ∈I 有且仅有一个 y j ∈C 使得 y j =f(x i ) 成立。 其中,C为类别集合,I为待分类的物体,f则为分类器,分类算法 的主要任务就是构造分类器f。 分类算法的构造通常需要一个已知类别的集合来进行训练,通常来 说训练出来的分类算法不可能达到100%的准确率。分类器的质量 往往与训练数据、验证数据、训练数据样本大小等因素相关。
贝叶斯公式
朴素贝叶斯分类
朴素贝叶斯分类,Naive Bayes,你也可以叫它NB算法。其核心思 想非常简单:对于某一预测项,分别计算该预测项为各个分类的概 率,然后选择概率最大的分类为其预测分类。就好像你预测一个娘 炮是女人的可能性是40%,是男人的可能性是41%,那么就可以判 断他是男人。 Naive Bayes的数学定义如下: 1.设 x={a 1 ,a 2 ,..,a m } 为一个待分类项,而每个 a i 为 x 的一个 特征属性 2.已知类别集合 C={y 1 ,y 2 ,..,y n } 3.计算 x 为各个类别的概率: P(y 1 |x),P(y 2 |x),..,P(y n |x) 4.如果 P(y k |x)=max{P(y 1 |x),P(y 2 |x),..,P(y n |x)} ,则 x 的类别为 yk

贝叶斯分类

贝叶斯分类

贝叶斯分类1、 定义: 依据贝叶斯准则(两组间最大分离原则)建立的判别函数集进行的图像 分类。

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝 叶斯分类。

2、 贝叶斯定理:p(B|A) = P (A| B )P (B )P(A)说明:p(A|B)表示事件B 发生的前提下,事件A 发生的概率;p(A)表示事件A 发生的概率;p(B)事件B 发生的概率。

则可以求得事件 A 发生的前提下,事件B 发生的概率。

贝叶斯定理给出了最小化误差的最优解决方法,可用于分类和预测。

将前面贝叶斯公式变化如下:P(x) P(c)xP(x) P(x)上述公式中,C 代表类别,X 代表特征,很明显,我们做出预测肯定是利用当 前的特征,来判断输出的类别。

当然这里也可以很明显的看到贝叶斯公式先验与后 验概率之间的转换,很明显,P(c|x)在我们的定义里面是后验概率,也是我们想要 得到的东西。

而P(x)、P(c)以及P(x|c)都是先验概率,它们分别 X 特征出现的概 率,C 类出现的概率,C 类中,出现X 的概率。

而第一项对于多类分类来说,都是一 样,都是当前观察到的特征,所以此项可以略去。

那最终的结果就是计算P(x|c)*P(c) 这一项,P (c )是可以通过观察来解决的。

重点也就全部落在了 P(x|c)上,上面对 于此项的解释是在C 类中,X 特征出现的概率,其实简单来讲,就是 X 的概率密度。

3、特点1)o 贝叶斯分类并不是把一个对象绝对地指派给某一类, 而是通过计算得出属于某一类的概率。

具有最大概率的类便是该对象所属的类。

2) o 一般情况下在贝叶斯分 类中所有的属性都潜在的起作用,即并不是一个或几个属性决定分类,而是所有的 属性都参与分类。

3)贝叶斯分类的属性可以是离散的、连续的、也可以是混合的。

4、分类:(1)朴素贝叶斯算法。

⑵TAN 算法1)朴素贝叶斯算法成立的前提是各属性之间互相独立。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最近在面试中,除了基础& 算法& 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法,而我向来恨对一个东西只知其皮毛而不得深入,故写一个有关聚类& 分类算法的系列文章以作为自己备试之用(尽管貌似已无多大必要,但还是觉得应该写下以备将来常常回顾思考)。

行文杂乱,但侥幸若能对读者也起到一定帮助,则幸甚至哉。

本分类& 聚类算法系列借鉴和参考了两本书,一本是Tom M.Mitchhell所著的机器学习,一本是数据挖掘导论,这两本书皆分别是机器学习& 数据挖掘领域的开山or杠鼎之作,读者有继续深入下去的兴趣的话,不妨在阅读本文之后,课后细细研读这两本书。

除此之外,还参考了网上不少牛人的作品(文末已注明参考文献或链接),在此,皆一一表示感谢。

本分类& 聚类算法系列暂称之为Top 10 Algorithms in Data Mining,其中,各篇分别有以下具体内容:1. 开篇:决策树学习Decision Tree,与贝叶斯分类算法(含隐马可夫模型HMM);2. 第二篇:支持向量机SVM(support vector machine),与神经网络ANN;3. 第三篇:待定...说白了,一年多以前,我在本blog内写过一篇文章,叫做:数据挖掘领域十大经典算法初探(题外话:最初有个出版社的朋友便是因此文找到的我,尽管现在看来,我离出书日期仍是遥遥无期)。

现在,我抽取其中几个最值得一写的几个算法每一个都写一遍,以期对其有个大致通透的了解。

OK,全系列任何一篇文章若有任何错误,漏洞,或不妥之处,还请读者们一定要随时不吝赐教& 指正,谢谢各位。

基础储备:分类与聚类在讲具体的分类和聚类算法之前,有必要讲一下什么是分类,什么是聚类,都包含哪些具体算法或问题。

常见的分类与聚类算法简单来说,自然语言处理中,我们经常提到的文本分类便就是一个分类问题,一般的模式分类方法都可用于文本分类研究。

常用的分类算法包括:朴素的贝叶斯分类算法(native Bayesian classifier)、基于支持向量机(SVM)的分类器,k-最近邻法(k-nearest neighbor,kNN),神经网络法,决策树分类法,模糊分类法等等(本篇稍后会讲决策树分类与贝叶斯分类算法,当然,所有这些分类算法日后在本blog内都会一一陆续阐述)。

而K均值聚类则是最典型的聚类算法。

监督学习与无监督学习一般来说,机器学习方法分为监督学习方法,和无监督学习方法。

举个具体的对应例子,则是比如说,在词义消岐中,也分为监督的消岐方法,和无监督的消岐方法。

在有监督的消岐方法中,训练数据是已知的,即没歌词的语义分类是被标注了的;而在无监督的消岐方法中,训练数据是未经标注的。

有监督的学习也通常称为分类任务,而无监督的学习通常称为聚类任务。

也就是说,分类属于监督学习,聚类属于无监督学习。

第一部分、决策树学习1.1、什么是决策树咱们直接切入正题。

所谓决策树,顾名思义,是一种树,一种依托于策略抉择而建立起来的树。

机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。

树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。

决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。

从数据产生决策树的机器学习技术叫做决策树学习, 通俗点说就是决策树。

来理论的太过抽象,下面举两个浅显易懂的例子:第一个例子套用俗语,决策树分类的思想类似于找对象。

现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:女儿:多大年纪了?母亲:26。

女儿:长的帅不帅?母亲:挺帅的。

女儿:收入高不?母亲:不算很高,中等情况。

女儿:是公务员不?母亲:是,在税务局上班呢。

女儿:那好,我去见见。

这个女孩的决策过程就是典型的分类树决策。

相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。

假设这个女孩对男人的要求是:30岁以下、长相中等以上并且是高收入者或中等以上收入的公务员,那么这个可以用下图表示女孩的决策逻辑:也就是说,决策树的简单策略就是,好比公司招聘面试过程中筛选一个人的简历,如果你的条件相当好比如说某985/211重点大学博士毕业,那么二话不说,直接叫过来面试,如果非重点大学毕业,但实际项目经验丰富,那么也要考虑叫过来面试一下,即所谓具体情况具体分析、决策。

第二个例子此例子来自Tom M.Mitchell著的机器学习一书:小王的目的是通过下周天气预报寻找什么时候人们会打高尔夫,他了解到人们决定是否打球的原因最主要取决于天气情况。

而天气状况有晴,云和雨;气温用华氏温度表示;相对湿度用百分比;还有有无风。

如此,我们便可以构造一棵决策树,如下(根据天气这个分类决策这天是否合适打网球):上述决策树对应于以下表达式:(Outlook=Sunny ^Humidity<=70)V (Outlook = Overcast)V (Outlook=Rain ^Wind=Weak)1.2、ID3算法1.2.1、决策树学习之ID3算法ID3算法是决策树算法的一种。

想了解什么是ID3算法之前,我们得先明白一个概念:奥卡姆剃刀。

奥卡姆剃刀(Occam's Razor, Ockham's Razor),又称―奥坎的剃刀‖,是由14世纪逻辑学家、圣方济各会修士奥卡姆的威廉(William of Occam,约1285年至1349年)提出,他在《箴言书注》2卷15题说―切勿浪费较多东西,去做‗用较少的东西,同样可以做好的事情‘。

简单点说,便是:be simple。

ID3算法(Iterative Dichotomiser 3 迭代二叉树3代)是一个由Ross Quinlan发明的用于决策树的算法。

这个算法便是建立在上述所介绍的奥卡姆剃刀的基础上:越是小型的决策树越优于大的决策树(be simple简单理论)。

尽管如此,该算法也不是总是生成最小的树形结构,而是一个启发式算法。

OK,从信息论知识中我们知道,期望信息越小,信息增益越大,从而纯度越高。

ID3算法的核心思想就是以信息增益度量属性选择,选择分裂后信息增益(很快,由下文你就会知道信息增益又是怎么一回事)最大的属性进行分裂。

该算法采用自顶向下的贪婪搜索遍历可能的决策树空间。

所以,ID3的思想便是:1. 自顶向下的贪婪搜索遍历可能的决策树空间构造决策树(此方法是ID3算法和C4.5算法的基础);2. 从―哪一个属性将在树的根节点被测试‖开始;3. 使用统计测试来确定每一个实例属性单独分类训练样例的能力,分类能力最好的属性作为树的根结点测试。

4. 然后为根结点属性的每个可能值产生一个分支,并把训练样例排列到适当的分支(也就是说,样例的该属性值对应的分支)之下。

5. 重复这个过程,用每个分支结点关联的训练样例来选取在该点被测试的最佳属性。

这形成了对合格决策树的贪婪搜索,也就是算法从不回溯重新考虑以前的选择。

下图所示即是用于学习布尔函数的ID3算法概要:1.2.2、哪个属性是最佳的分类属性1、信息增益的度量标准:熵上文中,我们提到:―ID3算法的核心思想就是以信息增益度量属性选择,选择分裂后信息增益(很快,由下文你就会知道信息增益又是怎么一回事)最大的属性进行分裂。

‖接下来,咱们就来看看这个信息增益是个什么概念(当然,在了解信息增益之前,你必须先理解:信息增益的度量标准:熵)。

上述的ID3算法的核心问题是选取在树的每个结点要测试的属性。

我们希望选择的是最有利于分类实例的属性,信息增益(Information Gain)是用来衡量给定的属性区分训练样例的能力,而ID3算法在增长树的每一步使用信息增益从候选属性中选择属性。

为了精确地定义信息增益,我们先定义信息论中广泛使用的一个度量标准,称为熵(entropy),它刻画了任意样例集的纯度(purity)。

给定包含关于某个目标概念的正反样例的样例集S,那么S相对这个布尔型分类的熵为:上述公式中,p+代表正样例,比如在本文开头第二个例子中p+则意味着去打羽毛球,而p-则代表反样例,不去打球(在有关熵的所有计算中我们定义0log0为0)。

如果写代码实现熵的计算,则如下所示:1.//根据具体属性和值来计算熵2.double ComputeEntropy(vector <vector <string> > remain_state, string attribute, string value,bool ifparent){3. vector<int> count (2,0);4. unsigned int i,j;5.bool done_flag = false;//哨兵值6.for(j = 1; j < MAXLEN; j++){7.if(done_flag) break;8.if(!attribute_row[j].compare(attribute)){9.for(i = 1; i < remain_state.size(); i++){10.if((!ifparent&&!remain_state[i][j].compare(value)) || ifparent){//ifparent记录是否算父节点11.if(!remain_state[i][MAXLEN - 1].compare(yes)){12. count[0]++;13. }14.else count[1]++;15. }16. }17. done_flag = true;18. }19. }20.if(count[0] == 0 || count[1] == 0 ) return 0;//全部是正实例或者负实例21.//具体计算熵根据[+count[0],-count[1]],log2为底通过换底公式换成自然数底数22.double sum = count[0] + count[1];23.double entropy = -count[0]/sum*log(count[0]/sum)/log(2.0) - count[1]/sum*log(count[1]/sum)/log(2.0);24.return entropy;25.}举例来说,假设S是一个关于布尔概念的有14个样例的集合,它包括9个正例和5个反例(我们采用记号[9+,5-]来概括这样的数据样例),那么S相对于这个布尔样例的熵为:Entropy([9+,5-])=-(9/14)log2(9/14)-(5/14)log2(5/14)=0.940。

相关文档
最新文档