基于贝叶斯决策理论的分类方法
- 优点:在数据较少的情况下仍然有效,可以处理多类别问题
- 缺点:对输入数据的准备方式较为敏感
- 适用数据类型:标称型
贝叶斯决策理论
- 核心思想:选择具有最高概率的决策,引入先验知识和逻辑推理来处理不确定问题。(相对的是频数概率,只从数据本身获得结论,并不考虑逻辑推理及先验知识)
条件概率
- 贝叶斯准则【公式】
贝叶斯分类准则
- 如果,那么属于类别
- 如果,那么属于类别
一般流程
- 收集数据:可以使用任何方法
- 准备数据:需要数值型或者布尔型数据。
- 分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好。
- 训练算法:计算不同的独立特征的条件概率。
- 测试算法:计算错误率。
- 使用算法:常见的应用是文档分类,但可以在任意的分类场景中使用,不一定非要是文本。
e.g. 文档分类
【bayes.py】
朴素贝叶斯分类器的假设
- 条件独立性假设:一个特征(单词)出现的可能性与它和其他特征(单词)相邻没有关系。(朴素)
- 每个特征同等重要。
数据样本数量(统计学)
如果每个特征需要N个样本,那么:
- 对于 个特征,需要 个样本
- 若特征之间相互独立,则只需 个样本
准备数据:从文本中构建词向量
- loadDataSet()—创建实验样本
- createVocabList()—创建一个包含在所有文档中出现的不重复词的列表
- 创建空集合
- 将每篇文档返回的新词集合添加到该集合中
- setOfWords2Vec()—创建一个其中所含元素都为0的向量
训练算法:从词向量计算概率
因为假设特征相互独立,所以
-
trainNB0()
- 计算文档数目,初始化程序中的分子变量和分母变量
- 如果词条出现在文档中,则增加该词条的计数值;然后增加所有词条的计数值
- 将该词条的数目除以总词条数目得到条件概率
测试算法:根据实际情况修改分类器
遇到下溢出应如何处理?
由于太多很小的数相乘,程序会下溢出或者得到不正确的答案。
- 对乘积取自然对数:取值不同,但不影响最终结果。
(还有没有其他方法?)
准备数据:文档词袋模型
- 词集模型:每个词只能出现一次
- 词袋模型:一个词在文档中出现不止一次
e.g. 过滤垃圾邮件
- textParse()—将大字符串解析为字符串列表
- spamTest()—对贝叶斯垃圾邮件分类器进行自动化处理
- 将文本文件解析为词列表
- 随机选择测试集与训练集
- 遍历训练集,对每封邮件分类
- 随机输出分类错误率
留存交叉验证
随机选择数据的一部分作为训练集,而剩余部分作为测试集
(还有哪些验证方式?)
e.g. 从个人广告中获取区域倾向
- calcMostFreq()—遍历词汇表,找出高频词
- 移除高频词的同时移除结构上的辅助词(停用词表)可以显著地提高效果。
(对数据特征的了解相当重要,否则很难理解错误率的变化)
- localWords()
- RSS源要在函数外导入,因为RSS源会随时间而改变。若其重新加载则不易分析输出结果改变的原因。