一、有监督学习方法举例
1. 朴素贝叶斯分类
朴素贝叶斯分类是一种十分简单的分类算法,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
通俗来说,就像我们坐地铁的时候,仅仅通过一些衣着特征我们便能够猜测周围人的工作或者是身份地位,比如一个人西装革履,那么我们猜测他应该是个工薪一族,有人身穿工作服,那我们也可以认为他应该是个工人。但是这样的推断是不一定正确的,万一人家穿着西装是去参加毕业典礼呢?不过在没有其它可用信息下,我们还是会选择可能性最大的情况。同样的道理,朴素贝叶斯的思想基础就是选择条件概率最大的类别。
朴素贝叶斯分类是建立在贝叶斯定理的基础上的,这就涉及到大二学的条件概率的知识了。在条件概率中有如下计算公式:
P ( A ∣ B ) = P ( A B ) P ( B ) (1) P(A|B) = \frac{P(AB)}{P(B)} \tag{1} P(A∣B)=P(B)P(AB)(1)
P ( B ∣ A ) = P ( A B ) P ( A ) (2) P(B|A) = \frac{P(AB)}{P(A)} \tag{2} P(B∣A)=P(A)P(AB)(2)
通过 ( 1 ) 、 ( 2 ) (1)、(2) (1)、(2)h很容易就得到贝叶斯定理的计算公式:
P ( B ∣ A ) = P ( A ∣ B ) P ( A ) P ( B ) (3) P(B|A) = \frac{P(A|B)P(A)}{P(B)} \tag{3} P(B∣A)=P(B)P(A∣B)P(A)(3)
在已知 P ( A ∣ B ) 、 P ( A ) 、 P ( B ) P(A|B)、P(A)、P(B) P(A∣B)、P(A)、P(B)的情况下,我们便能够算出 P ( B ∣ A ) P(B|A) P(B∣A)。
下面给出朴素贝叶斯分类的正式定义:
【1】假设有类别集合 C = { y 1 , y 2 , . . . , y m } C = \{
{y_1, y_2,... ,y_m}\} C={
y1,y2,...,ym} ,其中 y k y_k yk 表示某一类别,比如汽车、房屋等;
【2】假设有一待分类对象 x = { a 1 , a 2 , . . . , a n } x = \{
{a_1,a_2,...,a_n}\} x={
a1,a2,...,an} ,该对象的具有特征属性 a i a_i ai ,比如红头发,蓝眼睛等;
【3】计算在已有对象x的条件下,该对象属于分类 y k y_k yk 的条件概率 P ( y 1 ∣ x ) , P ( y 2 ∣ x ) , . . . , P ( y m ∣ x ) P(y_1|x),P(y_2|x), ... ,P(y_m|x) P(y1∣x),P(y2∣x),...,P(ym∣x);
【4】取 P ( y k ∣ x ) = m a x { P ( y 1 ∣ x ) , P ( y 2 ∣ x ) , . . . , P ( y m ∣ x ) } P(y_k|x) = max\{
{P(y_1|x), P(y_2|x), ... ,P(y_m|x)}\} P(yk∣x)=max{
P(y1∣x),P(y2∣x),...,P(ym∣x)},则待分类对象 x ∈ y k x∈y_k x∈yk。
其实从上面的定义中可以看出,朴素贝叶斯分类的重点在于第【3】步中的 P ( y k ∣ x ) P(y_k|x) P(yk∣x) 的计算,这就涉及到贝叶斯定理的使用了:
【1】假设我们有已经有一批已经人工标记好分类的样本及分类集合,即我们已经知道每个分类 y k y_k yk下各个特征属性 b j b_j bj 的条件概率 P ( b j ∣ y k ) P(b_j|y_k) P(bj∣yk);
【2】现在输入一个待分类对象 x = { a 1 , a 2 , . . . , a n } x = \{
{a_1,a_2,...,a_n}\} x={
a1,a2,...,an},我们计算
{ P ( a 1 ∣ y 1 ) , P ( a 2 ∣ y 1 ) , . . . , P ( a n ∣ y 1 ) } , { P ( a 1 ∣ y 2 ) , P ( a 2 ∣ y 2 ) , . . . , P ( a n ∣ y 2 ) } , . . . { P ( a 1 ∣ y m ) , P ( a 2 ∣ y m ) , . . . , P ( a n ∣ y m ) } \{
{P(a_1|y_1), P(a_2|y_1), ... ,P(a_n|y_1)}\},\\ \{
{P(a_1|y_2), P(a_2|y_2), ... ,P(a_n|y_2)}\},\\ ...\\ \{
{P(a_1|y_m), P(a_2|y_m), ... ,P(a_n|y_m)}\} {
P(a1∣y1),P(a2∣y1),...,P(an∣y1)},{
P(a1∣y2),P(a2∣y2),...,P(an∣y2)},...{
P(a1∣ym),P(a2∣ym),...,P(an∣ym)}
这里值得注意的是有可能某一分类 y k y_k yk下并没有特征属性 a i a_i ai对应的特征属性 b j b_j bj,所以会导致 P ( a i ∣ y k ) = 0 P(a_i|y_k) = 0 P(ai∣yk)=0 的情况出现,这在样本集训练过程中会对训练结果造成较大负面影响,需要引入一些特殊处理减少影响;
【3】根据贝叶斯定理,可以得到我们所关注的 P ( y k ∣ x ) P(y_k|x) P(yk∣x) 的计算公式:
P ( y k ∣ x ) = P ( x ∣ y k ) P ( y k ) P ( x ) P(y_k|x) = \frac{P(x|y_k)P(y_k)}{P(x)} P(yk∣x)=P(x)P(x∣yk)P(yk)
由于每个待分类对象都是平等的,因此分子 P ( x ) P(x) P(x) 为一常数,故 P ( y k ∣ x ) P(y_k|x) P(yk∣x) 的大小取决与分子的大小 P ( x ∣ y k ) P ( y k ) P(x|y_k)P(y_k) P(x∣yk)P(yk) 的大小。
对于 P ( x ∣ y k ) P(x|y_k) P(x∣yk),由于 待检测样本 x = { a 1 , a 2 , . . . , a n } x = \{
{a_1,a_2,...,a_n}\} x={
a1,a2,...,an} 的各特征属性 a i a_i ai 是各自独立的,因此有:
P ( x ∣ y k ) = P ( a 1 ∣ y k ) ⋅ P ( a 2 ∣ y k ) ⋅ ⋅ ⋅ P ( a n ∣ y k ) = ∑ i = 1 n P ( a i ∣ y k ) P(x|y_k) = P(a_1|y_k)·P(a_2|y_k)···P(a_n|y_k) = \sum_{i=1}^n{P(a_i|y_k)} P(x∣yk)=P(a1∣yk)⋅P(a2∣yk)⋅⋅⋅P(an∣yk)=i=1∑nP(ai∣yk)
故:
P ( y k ∣ x ) = P ( y k ) ∑ i = 1 n P ( a i ∣ y k ) P ( x ) P(y_k|x) = \frac{P(y_k)\sum_{i=1}^n{P(a_i|y_k)}}{P(x)} P(yk∣x)=P(x)P(yk)∑i=1nP(ai∣yk)
所以只要我们找到 m a x { P ( y k ∣ x ) } max\{ {P(y_k|x)}\} max{ P(yk∣x)} 就可以得到 x x x最合适的分类了,这么一想这算法还真是“朴素”呢~
- 评价
朴素贝叶斯分类算法要求分类对象的特征属性必须有条件独立或基本独立(实际上在现实应用中几乎不可能做到完全独立)。当这个条件成立时,朴素贝叶斯分类法的准确率是最高的,但是现实中各个特征属性间往往并不条件独立,而是具有较强的相关性,这样就限制了朴素贝叶斯分类的能力。
二、无监督学习方法举例
2. K-means
K-means以某种相似性度量为标准,确定样本的结构,即样本属于哪一个簇取决于该样本与哪一个簇的中心点最相似,是一种聚类算法。
其主要过程包含:
【1】随机选择K个点作为初始的聚类中心;
【2】对于剩下的点,根据其与聚类中心的距离,将其归于最近的簇,这里的距离的计算方法常见的有曼哈顿距离、欧式距离、余弦相似度等;
【3】计算每个簇内所有点的均值作为新的聚类中心;
【4】重复步骤【2】【3】,直到聚类中心不再改变或者聚类中心改变数值小于我们设定的阈值时,结束循环,完成最终聚类。
从上述过程的描述可以明显感觉到这一算法的思想确实很简单,但也存在一些需要注意的地方:
- 初始的K个分类中心的选取可以随机,也可以人为指定,不同选取情况对聚类速率有较大影响;
- 容易陷入局部最优(这让我想起了原始粒子群算法也有这个问题)
- 迭代次数阈值或者两次聚类中心RSS差值阈值对聚类终止的快慢也有影响。
除了上述原理的阐述之外,K-means在图像分割领域也有所应用,主要还是对于相近颜色区域的聚类分割。Opencv库中有相关的现程库函数可以调用,下面是我在做餐盘分割的时候中的测试图像