《概率论》(当年我学习的课程为《概率论与数理统计》,涵盖了概率论与统计学)应该是每个理工科大学生都要学习的课程,不知道有多少同学和我一样,学得一头雾水。悲催的是,考研的时候又学习了一遍,依然不着门路,靠死记硬背过关。好在后面的学习和工作生涯中,再没有和它打过照面,直到最近开始接触机器学习。
《机器学习实战》第4章,开始介绍基于概率论的分类方法。其实《机器学习》这本书对贝叶斯决策论有比较详细的介绍,不过涉及到比较多的数学公式,比较难懂。而本书对程序员比较友好,只涉及很少的数学知识,更多的是通过程序来阐述这一算法。
条件概率
书中举了一个例子来阐述条件概率的概念。7块石头,3块是灰色的,4块是黑色的,放入两个桶A和B,A桶放4块石头(2块灰色,2块黑色),B桶放3块石头(1块灰色,2块灰色)。计算从B桶中取到灰色石头的概率的方法,就是所谓的条件概率。这里的已知条件是石头取自B桶且B桶有3块石头。用公式表示为:
P(gray | bucketB) = P(gray and bucketB) / P(bucketB)
1
这个公式看起来不起眼,但却开启了一门新的理论,即通过先验知识和逻辑推理来处理不确定命题。另一种概率解释称为频数概率,它只从数据本身获取结论,并不考虑逻辑推理及先验知识。
另一种有效计算条件概率的方法称为贝叶斯准则。贝叶斯准则告诉我们如何交换条件概率中的条件和结果,即如果已知P(x | c),要求P(c | x)。其公式为:
朴素贝叶斯
朴素贝叶斯有两个简单的假设:
特征之间相互独立。所谓独立指的是统计意义上的独立,即一个特征出现的可能性与其它特征值无关。
每个特征同等重要。
尽管上述假设存在一些小瑕疵,但朴素贝叶斯的实际效果很好。使用公式表示如下:
P(W0, W1, W2, ..., WN | c) = P(W0|c)*P(W1|c)*...*P(WN|c)
1
修正算法
利用贝叶斯分类器对文档进行分类时,要计算多个概率的乘积以获得文档属于某个类别的概率,即计算P(W0|1)P(W1|1)P(W2|1)。如果其中一个概率值为0,那么最后的乘积也为0。为降低这种影响,可以将所有词的出现数初始化为1,并将分母初始化为2。
另外还要处理下溢出问题,这是因为太多很小的数相乘,最后结果可能会四舍五入,得到0。解决的方法是利用代数中的公式:
ln(a*b) = ln(a) + ln(b)
1
通过求对数避免下溢出或者浮点数舍入导致的错误。采用自然对数进行处理不会有任何损失。
留存交叉验证(hold-out cross validation)
随机选择数据的一部分作为训练集,而剩余部分作为测试集的过程成为留存交叉验证。如果想更精确的估计分类器的错误率,可以进行多次迭代后求出平均错误率。
4.7章节的示例无法使用,原因在于代码中使用的RSS源已经不存在。我对这个示例做了修改,用来显示垃圾邮件中使用最多的词语。另外在这个示例中会去掉出现次数最高的30个词,如果将这个应用在垃圾邮件过滤,错误率反而会提高,但如果只是去掉10个最常用词,结果一致。
可见,即使采用同样的算法,我们还是可以采用不同的修正方法,进行微调,对最后的错误率有一些影响。
---------------------
版权声明:本文为CSDN博主「云水木石」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:
来源:https://blog.csdn.net/shenwansan_gz/article/details/99437702