在几位志同道合的小伙伴的带领下,开始了机器学习的路程,然而一切并不是想象的那么简单,因此本文记录了自己的学习路程,希望还能坚持做好这件事。
一个简单的例子,用Python语言实现朴素贝叶斯算法,这里不再介绍算法的理论思想,我会将自己看到的理解的东西写出来做记录,这些可能 是初学者比较困惑的地方。
1.关于连续属性的概率估计
我们针对离散属性的概率估计很好理解,比如说对训练数据中的House统计,很容易得到P(House=Yes|No)=3/7。
但对于Income这一个连续的属性,我们需要使用一点点处理方式来估计他们的概率。
(1)设置区间,比如说划分[120K,>120K),[70K,120K),(<70K,70K)这样子的区间,就可以将连续的属性离散化,但这样做有个很麻烦的问题就是如何才能选取适当的区间,这个问题的解决需要根据个人经验去判断。
(2)另一个估计连续属性的条件概率的方法是通过高斯分布计算。需要计算的有两个参数,均值μ和方差δ²。参数μ可以用标签Y下所有训练记录X样本的均值来估计,δ²可以用这些训练记录的样本方差来估计。
2.训练数据中某个属性的类条件概率等于0
从下面的实例中,我们可以计算得到P(Marriage=Married|Yes)=0,这就导致一个问题,比如我要统计X=(House=No,Marriage=Married,Income=120K)的类标号,我们计算得到的类Yes下的后验概率等于0。即如果某个属性的类条件概率等于0,将会导致整个类的后验概率等于0 。解决方法:
(1)条件概率的m估计(参考数据挖掘导论 Pang-Ning Tang等著)
P(xi|yi)=nc+mpn+m
其中,n是类yi中的实例总数,nc是类

本文介绍了使用Python实现朴素贝叶斯算法的过程,包括如何处理连续属性的概率估计和解决训练数据中类条件概率为0的问题,如高斯分布计算、拉普拉斯平滑等。同时,文章也分享了作者作为初学者的学习历程,期待与读者交流。

1万+

被折叠的 条评论
为什么被折叠?



