【机器学习】机器学习实战-朴素贝叶斯

基于贝叶斯决策理论的分类方法

  • 优点:在数据较少的情况下仍然有效,可以处理多类别问题
  • 缺点:对输入数据的准备方式较为敏感
  • 适用数据类型:标称型

贝叶斯决策理论

  • 核心思想:选择具有最高概率的决策,引入先验知识和逻辑推理来处理不确定问题。(相对的是频数概率,只从数据本身获得结论,并不考虑逻辑推理及先验知识)

条件概率

  • 贝叶斯准则【公式】

贝叶斯分类准则

  • 如果,那么属于类别
  • 如果,那么属于类别

一般流程

  1. 收集数据:可以使用任何方法
  2. 准备数据:需要数值型或者布尔型数据。
  3. 分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好。
  4. 训练算法:计算不同的独立特征的条件概率。
  5. 测试算法:计算错误率。
  6. 使用算法:常见的应用是文档分类,但可以在任意的分类场景中使用,不一定非要是文本。

e.g. 文档分类

【bayes.py】

朴素贝叶斯分类器的假设

  • 条件独立性假设:一个特征(单词)出现的可能性与它和其他特征(单词)相邻没有关系。(朴素)
  • 每个特征同等重要。

数据样本数量(统计学)

如果每个特征需要N个样本,那么:

  • 对于 个特征,需要 个样本
  • 若特征之间相互独立,则只需 个样本

准备数据:从文本中构建词向量

  • loadDataSet()—创建实验样本
  • createVocabList()—创建一个包含在所有文档中出现的不重复词的列表
    1. 创建空集合
    2. 将每篇文档返回的新词集合添加到该集合中
  • setOfWords2Vec()—创建一个其中所含元素都为0的向量

训练算法:从词向量计算概率

因为假设特征相互独立,所以

  • trainNB0()

    1. 计算文档数目,初始化程序中的分子变量和分母变量
    2. 如果词条出现在文档中,则增加该词条的计数值;然后增加所有词条的计数值
    3. 将该词条的数目除以总词条数目得到条件概率

测试算法:根据实际情况修改分类器

遇到下溢出应如何处理?

由于太多很小的数相乘,程序会下溢出或者得到不正确的答案。

  • 对乘积取自然对数:取值不同,但不影响最终结果。
    (还有没有其他方法?)

准备数据:文档词袋模型

  • 词集模型:每个词只能出现一次
  • 词袋模型:一个词在文档中出现不止一次

e.g. 过滤垃圾邮件

  • textParse()—将大字符串解析为字符串列表
  • spamTest()—对贝叶斯垃圾邮件分类器进行自动化处理
    1. 将文本文件解析为词列表
    2. 随机选择测试集与训练集
    3. 遍历训练集,对每封邮件分类
    4. 随机输出分类错误率

留存交叉验证

随机选择数据的一部分作为训练集,而剩余部分作为测试集

(还有哪些验证方式?)

e.g. 从个人广告中获取区域倾向

  • calcMostFreq()—遍历词汇表,找出高频词
    • 移除高频词的同时移除结构上的辅助词(停用词表)可以显著地提高效果。

(对数据特征的了解相当重要,否则很难理解错误率的变化)

  • localWords()
    • RSS源要在函数外导入,因为RSS源会随时间而改变。若其重新加载则不易分析输出结果改变的原因。

你可能感兴趣的:(课堂笔记,机器学习)