ML学习笔记(一):naive bayas
2016-06-25 13:38
267 查看
学习了一个多学期的机器学习和数据挖掘的基本知识,经过一次考试认识到,目前知识还处于混乱状态,借此平台整理,加深记忆。
如果中间过程没有看懂,我相信我的例子一定能让你透彻理解。例子需要动手计算,相信算完再回顾前面的理论就会有新的理解。例子在第五部分。
优点:Simple and fast
缺点:在现实问题中,对于各个特征完全独立的假设可能不准确。
问题描述:X=(x(1),x(2)...,x(m))其中m代表特征的数量。P(Ck|X)代表分到第k类的概率。如果满足:P(Ci|X)≥P(Cj|X) j≠i,1≤j≤K则将X分类到i类。
也就是说,选择概率最大的那一类将X归入。
基于Bayes理论,条件概率可以被表示为p(Ck|X)=p(Ck)p(X|Ck)p(x)或者表示为posterior=prior∗likelihoodevidence
下面讨论此公式的计算问题。
<1>在实际使用中p(x)可以不用计算,因为对于所有类来说p(x)相同。
<2>p(X|Ck)的计算。由概率论中的知识我们可以知道这是一个已知Ck时X的联合分布,对于计算这个联合分布是十分困难的。所以这就是naive bayes的奇妙之处,下面是详细的公式推导,使用naive bayes的特征独立性,得出来p(X|Ck)的结果。
p(x(1),x(2)...,x(m)|Ck)=p(x(1),x(2)...,x(m),Ck)p(Ck)
=p(x(1)|x(2)...,x(m),Ck)∗p(x(2)...,x(m),Ck)p(Ck)
=p(x(1)|x(2)...,x(m),Ck)∗p(x(2)|...,x(m),Ck)∗...∗p(xm,Ck)p(Ck)
=p(x(1)|x(2)...,x(m),Ck)∗p(x(2)|...,x(m),Ck)∗...∗p(xm|Ck) (1)
由于naive bayes假设所有特征独立,此时条件概率等于无条件概率即:
p(x(1)|x(2))=p(x(1),x(2))p(x(2))=p(x(1))p(x(2))p(x(2))=p(x(1))
所以(1)可以化简为:
p(x(1),x(2)...,x(m)|Ck)=∏j=1mp(x(j)|Ck)
但是读者可能又会问,p(x(j)|Ck)怎么计算呢,这个你看到第四部分,参数估计就明白了。这里是原理,请耐心阅读。
<3>P(Ck)的计算。
P(C_k)为先验概率,此概率一半为已知。
<4>接下来就是结论,编程的时候就是使用的这一部分,综上naive bayes分类器可以表示为:
ŷ =argmaxk∈1...kP(Ck)∏j=1mP(xj|Ck)
正态分布
P(x=v|c)=12πσ2c‾‾‾‾‾√e−(v−μc)22σ2c
Bernoulli分布
P(x=l|Ck)=plkj(1−pkj)1−l l=0,1
P(Ck)∏j=1mP(x(j)|Ck)
所以本节分为两个部分
这个式子就是说,我这一类的先验概率可以表示为,我所有已知数据中是这一类的数量/总的数量。其中λ是平滑参数,主要使用意义在part two中防止分母为0,这个值是我们预先取定的,如果λ=1则称为拉普拉斯平滑。
这个式子就是说,P(x(j)=l|Ck)可以用属于这一类,并且x(j)属性为l的数据的数量/这一类数据的数量。其中λ主要是为了防止分母为0,因为某一类可能一个数据也没有。Sj是这一个属性x(j)有几种情况,比如是否买电脑问题的年龄属性,这个属性可能取值为年轻,年老,中年。那么此时Sj=3。
例:现在我们已经有了一些购买电脑人的信息如下图,使用naive bayes模型,预测wxc575843同学他会不会买电脑,此同学的属性为X=(age=youth,income=medium,student=yes,credit_rating=fair)
不使用平滑即λ=0
解:
这里一共要计算两个值,P(buy|X)和P(not buy|X)
<1>P(buy|X)=P(buy)P(age=youth|buy)P(income=medium|buy)P(student=yes|buy)P(credit_rating=fair|buy)
这里我们可以数出,14个人中有9个买了电脑,所以P(buy)=914
在9个买了电脑的人中age=youth的有两个所以P(age=youth|buy)=29
在9个买了电脑的人中income=medium的有4个所以P(income=medium|buy)=49
同理
P(student=yes|buy)=69
P(credit_rating=fair|buy)=69
所以P(buy|X)=914∗29∗49∗69∗69=0.02822
<2>P(not buy|X)=P(not buy)P(age=youth|not buy)P(income=medium|not buy)P(student=yes|not buy)P(credit_rating=fair|not buy)
同<1>中的计算方式可得P(not buy|X)=514∗35∗25∗15∗25=0.006757
综上所述:P(not buy|X)<P(buy|X)$所以wxc575843同学会买电脑。
如果中间过程没有看懂,我相信我的例子一定能让你透彻理解。例子需要动手计算,相信算完再回顾前面的理论就会有新的理解。例子在第五部分。
1. 简介
naive bayes分类器是一种很简单的概率分类器。主要理论是bayes理论,以及对特征间强独立性的假设。就是假设所有事件互相独立。举例来说就是,决定是否买电脑时,我的年龄和我的收入是完全独立的。年龄不会影响收入。优点:Simple and fast
缺点:在现实问题中,对于各个特征完全独立的假设可能不准确。
2. 概率模型
naive bayes分类器是一个条件概率模型,该分类器如下面公式所示:问题描述:X=(x(1),x(2)...,x(m))其中m代表特征的数量。P(Ck|X)代表分到第k类的概率。如果满足:P(Ci|X)≥P(Cj|X) j≠i,1≤j≤K则将X分类到i类。
也就是说,选择概率最大的那一类将X归入。
基于Bayes理论,条件概率可以被表示为p(Ck|X)=p(Ck)p(X|Ck)p(x)或者表示为posterior=prior∗likelihoodevidence
下面讨论此公式的计算问题。
<1>在实际使用中p(x)可以不用计算,因为对于所有类来说p(x)相同。
<2>p(X|Ck)的计算。由概率论中的知识我们可以知道这是一个已知Ck时X的联合分布,对于计算这个联合分布是十分困难的。所以这就是naive bayes的奇妙之处,下面是详细的公式推导,使用naive bayes的特征独立性,得出来p(X|Ck)的结果。
p(x(1),x(2)...,x(m)|Ck)=p(x(1),x(2)...,x(m),Ck)p(Ck)
=p(x(1)|x(2)...,x(m),Ck)∗p(x(2)...,x(m),Ck)p(Ck)
=p(x(1)|x(2)...,x(m),Ck)∗p(x(2)|...,x(m),Ck)∗...∗p(xm,Ck)p(Ck)
=p(x(1)|x(2)...,x(m),Ck)∗p(x(2)|...,x(m),Ck)∗...∗p(xm|Ck) (1)
由于naive bayes假设所有特征独立,此时条件概率等于无条件概率即:
p(x(1)|x(2))=p(x(1),x(2))p(x(2))=p(x(1))p(x(2))p(x(2))=p(x(1))
所以(1)可以化简为:
p(x(1),x(2)...,x(m)|Ck)=∏j=1mp(x(j)|Ck)
但是读者可能又会问,p(x(j)|Ck)怎么计算呢,这个你看到第四部分,参数估计就明白了。这里是原理,请耐心阅读。
<3>P(Ck)的计算。
P(C_k)为先验概率,此概率一半为已知。
<4>接下来就是结论,编程的时候就是使用的这一部分,综上naive bayes分类器可以表示为:
ŷ =argmaxk∈1...kP(Ck)∏j=1mP(xj|Ck)
3. 事件模型
这一部分是针对上一部分P(xj|Ck)的进一步讨论,在实际计算时,我们往往将P(xj|Ck)假定为某一种分布,例如:正态分布
P(x=v|c)=12πσ2c‾‾‾‾‾√e−(v−μc)22σ2c
Bernoulli分布
P(x=l|Ck)=plkj(1−pkj)1−l l=0,1
4. 参数估计
上一部分,就是说如果碰到实际问题,可以假设概率就是这个样子。但是如果不能假设成为这个样子,我们就需要用到参数估计的知识了。现在我们再回顾一下我们要计算的公式:P(Ck)∏j=1mP(x(j)|Ck)
所以本节分为两个部分
part one: P(Ck)的估计
P̂ (Y=Ck)=∑ni=1I(yi=Ck)+λn+Kλ这个式子就是说,我这一类的先验概率可以表示为,我所有已知数据中是这一类的数量/总的数量。其中λ是平滑参数,主要使用意义在part two中防止分母为0,这个值是我们预先取定的,如果λ=1则称为拉普拉斯平滑。
part two:P(x(j)|Ck)的估计
P(x(j)|Ck)=∑i=1nI(x(j)i=l,yi=Ck)+λ∑ni=1I(yi=Ck)+Sjλ这个式子就是说,P(x(j)=l|Ck)可以用属于这一类,并且x(j)属性为l的数据的数量/这一类数据的数量。其中λ主要是为了防止分母为0,因为某一类可能一个数据也没有。Sj是这一个属性x(j)有几种情况,比如是否买电脑问题的年龄属性,这个属性可能取值为年轻,年老,中年。那么此时Sj=3。
5. 例子:是否购买电脑
好了,讲了这么多,如果没有例子我也是谜的。下面这个例子相信能让你对我上面总结的各种公式有深刻的理解。例:现在我们已经有了一些购买电脑人的信息如下图,使用naive bayes模型,预测wxc575843同学他会不会买电脑,此同学的属性为X=(age=youth,income=medium,student=yes,credit_rating=fair)
不使用平滑即λ=0
解:
这里一共要计算两个值,P(buy|X)和P(not buy|X)
<1>P(buy|X)=P(buy)P(age=youth|buy)P(income=medium|buy)P(student=yes|buy)P(credit_rating=fair|buy)
这里我们可以数出,14个人中有9个买了电脑,所以P(buy)=914
在9个买了电脑的人中age=youth的有两个所以P(age=youth|buy)=29
在9个买了电脑的人中income=medium的有4个所以P(income=medium|buy)=49
同理
P(student=yes|buy)=69
P(credit_rating=fair|buy)=69
所以P(buy|X)=914∗29∗49∗69∗69=0.02822
<2>P(not buy|X)=P(not buy)P(age=youth|not buy)P(income=medium|not buy)P(student=yes|not buy)P(credit_rating=fair|not buy)
同<1>中的计算方式可得P(not buy|X)=514∗35∗25∗15∗25=0.006757
综上所述:P(not buy|X)<P(buy|X)$所以wxc575843同学会买电脑。
6. python 代码实现
这一部分是用代码实现naive bayes分类器。此部分待我整理好之后,这两天发出。相关文章推荐
- 数据挖掘之Apriori算法详解和Python实现代码分享
- 用Python从零实现贝叶斯分类器的机器学习的教程
- My Machine Learning
- 机器学习---学习首页 3ff0
- 详解BI/数据分析/数据挖掘/业务分析概念 7fe0
- Spark机器学习(一) -- Machine Learning Library (MLlib)
- Sedgewick之巨著《算法》,与高德纳TAOCP一脉相承
- 普通最小二乘法的推导证明
- 反向传播(Backpropagation)算法的数学原理
- 关于SVM的那点破事
- 也谈 机器学习到底有没有用 ?
- TensorFlow人工智能引擎入门教程之九 RNN/LSTM循环神经网络长短期记忆网络使用
- TensorFlow人工智能引擎入门教程之十 最强网络 RSNN深度残差网络 平均准确率96-99%
- TensorFlow人工智能引擎入门教程所有目录
- 如何用70行代码实现深度神经网络算法
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用2
- 量子计算机编程原理简介 和 机器学习
- 数据挖掘项目的特征和关键环节
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)
- 已经证实提高机器学习模型准确率的八大方法