分类问题:朴素贝叶斯与逻辑回归

贝叶斯决策理论

朴素贝叶斯是贝叶斯决策理论的一部分,所以讲述朴素贝叶斯之前有必要快速了解一下贝叶斯决策理论。

贝叶斯决策理论的核心思想,即选择具有最高概率的决策。

贝叶斯准则告诉我们如何交换条件概率中

的条件与结果,即如果已知P(x|c),要求P(c|x),那么可以使用下面的计算方法:

P(c∣x)=P(x∣c)P©P(x)
P(c|x)=\frac{P(x|c)P©}{P(x)}
P(c∣x)= P(x)P(x∣c)P©
则同理可得,若给定某个由x、y表示的数据点,那么该数据点来自类别c1的概率可通过如下公式计算:
P(ci∣x,y)=P(x,y∣ci)P(ci)P(x,y)
P(c_{i}|x,y)=\frac{P(x,y|c_{i})P(c_{i})}{P(x,y)}
P(c i∣x,y)= P(x,y)P(x,y∣c i)P(ci )

由此,定义贝叶斯分类准则为:

如果P(c1|x, y) > P(c2|x, y),那么属于类别c1。

如果P(c1|x, y) < P(c2|x, y),那么属于类别c2。

二、朴素贝叶斯算法简介

我们称之为“朴素”,是因为整个形式化过程只做最原始、最简单的假设。

优缺点:

优点:在数据较少的情况下仍然有效,可以处理多类别问题。

缺点:对于输入数据的准备方式较为敏感;由于朴素贝叶斯的**“朴素”特点**,所以会带来一些准确率上的损失。

适用数据类型:

标称型数据

朴素贝叶斯的一般过程:

收集数据:可以使用任何方法。本章使用RSS源。

准备数据:需要数值型或者布尔型数据。

分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好。

训练算法:计算不同的独立特征的条件概率。

测试算法:计算错误率。

使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴素贝叶斯分类器,不一定非要是文本。

三、代码实现(python3)

使用 Python 进行文本分类:

我们可以观察文档中出现的词,并把每个词的出现或者不出现作为一个特征,这样得到的特征数目就会跟词汇表中的词目一样多。

如果特征之间相互独立,那么样本数就可以从N1000减少到1000×N。

所谓独立(independence)指的是统计意义上的独立,即一个特征或者单词出现的可能性与它和其他单词相邻没有关系。

1.准备数据:从文本中构建词向量
2.训练算法:从词向量计算概率
3.测试算法:根据现实情况修改分类器
4.准备数据:文档词袋模型
四、实战:使用朴素贝叶斯过滤垃圾邮件
1.准备数据:切分文本
分类问题:朴素贝叶斯与逻辑回归
2.测试算法:使用朴素贝叶斯进行交叉验证

本例中共有50封电子邮件,并不是很多,其中的10封电子邮件被随机选择为测试集,同时也将其从训练集中剔除。分类器所需要的概率计算只利用训练集中的文档来完成。

这种随机选择数据的一部分作为训练集,而剩余部分作为测试集的过程称为留存交叉验证(hold-out
cross validation)。
假定现在只完成了一次迭代,那么为了更精确地估计分类器的错误率,就应该进行多次迭代后求出平均错误率。
分类问题:朴素贝叶斯与逻辑回归
分类问题:朴素贝叶斯与逻辑回归
函数spamTest()会输出在10封随机选择的电子邮件上的分类错误率。

既然这些电子邮件是随机选择的,所以每次的输出结果可能有些差别。

如果发现错误的话,可设置函数输出错分文档的词表,这样就可以了解到底是哪篇文档发生了错误。

如果想要更好地估计错误率,那么就应该将上述过程重复多次,比如说10次,然后求平均值。

五、朴素贝叶斯小结

对于分类而言,使用概率有时要比使用硬规则更为有效。贝叶斯概率及贝叶斯准则提供了一种利用已知值来估计未知概率的有效方法。

可以通过特征之间的条件独立性假设,降低对数据量的需求。独立性假设是指一个词的出现概率并不依赖于文档中的其他词。

当然我们也知道这个假设过于简单。这就是之所以称为朴素贝叶斯的原因。尽管条件独立性假设并不正确,但是朴素贝叶斯仍然是一种有效的分类器。

利用现代编程语言来实现朴素贝叶斯时需要考虑很多实际因素。下溢出就是其中一个问题,它可以通过对概率取对数来解决

词袋模型在解决文档分类问题上比词集模型有所提高。

还有其他一些方面的改进,比如说移除停用词,当然也可以花大量时间对切分器进行优化。

逻辑回归
主要思想:根据现有数据对分类边界线建立回归公式,以此进行分类。

sigmoid函数

计算公式如下:

f(z)=1/(1+e^(-z)),它的特点在于当z为0时,Sigmoid函数值为0.5。 随着z的增大,对应的Sigmoid值将逼近于1;而随着z的减小,Sigmoid值将逼近于0,当横坐标足够大时,它看起来像一个单位阶跃函数。

实现Logistic回归分类器思路:

在每个特征上都乘以一个回归系数,然后把 所有的结果值相加,将这个总和代入Sigmoid函数中,进而得到一个范围在0~1之间的数值。任 何大于0.5的数据被分入1类,小于0.5即被归入0类。

logistic回归

logistic回归是一种二分类算法,直接为样本估计出它属于正负样本的概率。先将向量进行线性加权,然后计算logistic函数,可以得到[0,1]之间的概率值,它表示样本x属于正样本的概率:
分类问题:朴素贝叶斯与逻辑回归
正样本标签值为1,负样本为0。使用logistic函数的原因是它单调增,并且值域在(0, 1)之间,刚好符合概率的要求。

分类问题:朴素贝叶斯与逻辑回归
训练时采用最大似然估计,求解对数似然函数的极值:

分类问题:朴素贝叶斯与逻辑回归
可以证明这是一个凸优化问题,求解时可以用梯度下降法,也可以用牛顿法。如果正负样本的标签为+1和-1,则可以采用另外一种写法:

训练时的目标同样是最大化对数似然函数:
分类问题:朴素贝叶斯与逻辑回归
同样的,这也是一个凸优化问题。预测时并不需要计算logistic函数,而是直接计算:

分类问题:朴素贝叶斯与逻辑回归
Logistic回归是一种二分类算法,虽然使用了概率,但它是一种判别模型!另外要注意的是,logistic回归是一种线性模型,这从它的预测函数就可以看出。它本身不能支持多分类问题,它的扩展版本softmax回归可以解决多分类问题。