文章目录

  • 一、何为贝叶斯
  • 二、项目实战-垃圾分类
    • 1. 导包
    • 2. 代码示例
    • 3. 测试代码
    • 4.测试结果

一、何为贝叶斯

贝叶斯基本公式:P(A|B)=P(B|A)*P(A)/P(B)
假设事件 B={一封邮件},事件A={这封邮件是垃圾邮件},P(A|B)表示这封邮件是垃圾邮件的概率。可想而知,我们无法直接求得这个概率,此时借助贝叶斯就可以对该事件进行一次逆推

  • P(A|B)称为后验概率(posterior),这是我们需要结合先验概率和证据计算之后才能知道的。

  • P(B|A)称为似然(likelihood),在事件A发生的情况下,事件B(或evidence)的概率有多大

  • P(A)称为先验概率(prior), 事件A发生的概率有多大

  • P(B)称为证据(evidence),即无论事件如何,事件B(或evidence)的可能性有多大

二、项目实战-垃圾分类

1. 导包

import random
import numpy as np
import re

2. 代码示例

def textParse(input_text):'''读取文本数据,进行正则切分,将切分后的单词进行小写化:param input_text: 邮件文本:return: 切分后的单词列表'''list_world = re.split(r'\W+', input_text)return [world.lower() for world in list_world if len(world) > 2]def createVocabList(doclist):'''创建语料库:param doclist: 传入单词列表:return: 返回无重复的语料库'''vocablist = set()for doc in doclist:vocablist = vocablist | set(doc)return list(vocablist)def setOfWordVec(vocablist, inputSet):'''文本向量化:param vocablist: 语料库:param inputSet: 单篇邮件的单词列表:return: 统计单词出现次数的向量'''returnVec = [0] * len(vocablist)for word in inputSet:if word in vocablist:returnVec[vocablist.index(word)] += 1return returnVecdef trainNB(trainMat, trainClass):'''训练模型:param trainMat: 训练集单词矩阵:param trainClass: 训练集对应类别(1代表垃圾邮件,0代表正常邮件):return: 垃圾邮件似然概率,正常文件似然概率,垃圾文件先验概率'''numTrainDocs = len(trainMat)numberWorld = len(trainMat[0])p1 = sum(trainClass) / numTrainDocsp0Num = np.ones((numberWorld))  # 拉普拉斯平滑p1Num = np.ones((numberWorld))p0Demo = 2  # 一般情况下分为几类就写几p1Demo = 2for i in range(numTrainDocs):if trainClass[i] == 1:p1Num += trainMat[i]p1Demo += sum(trainMat[i])else:p0Num += trainMat[i]p0Demo += sum(trainMat[i])p1Vec = np.log(p1Num / p1Demo)p0Vec = np.log(p0Num / p0Demo)return p1Vec, p0Vec, p1def classifyNB(wordVec, p1Vec, p0Vec, p1):'''贝叶斯计算,分类:param wordVec: 测试集文本向量:param p1Vec: 垃圾邮件似然概率:param p0Vec: 正常邮件似然概率:param p1: 垃圾邮件先验概率:return: 分类结果'''p1 = np.log(p1) + sum(wordVec * p1Vec)p0 = np.log(1 - p1) + sum(wordVec * p0Vec)if p1 > p0:return 1else:return 0def spam():'''主函数:return:'''doclist = []classlist = []for i in range(1, 26):wordlist = textParse(open("data/ham/{0}.txt".format(i), 'r').read())doclist.append(wordlist)classlist.append(1)  # 垃圾邮件标签wordlist = textParse(open("data/spam/{0}.txt".format(i), 'r').read())doclist.append(wordlist)classlist.append(0)  # 正常邮件标签vocablist = createVocabList(doclist)  # 创建语料表trainset = list(range(50))testset = []for i in range(10):randIndex = int(random.uniform(0, len(trainset)))testset.append(trainset[randIndex])del trainset[randIndex]trainMat = []trainClass = []for docIndex in trainset:trainMat.append(setOfWordVec(vocablist, doclist[docIndex]))trainClass.append(classlist[docIndex])p1Vec, p0Vec, p1 = trainNB(np.array(trainMat), np.array(trainClass))errorCount = 0for docIndex in testset:wordVec = setOfWordVec(vocablist, doclist[docIndex])p = classifyNB(np.array(wordVec), p1Vec, p0Vec, p1)if p != classlist[docIndex]:errorCount += 1return errorCount

3. 测试代码

if __name__ == "__main__":errorCount = 0for i in range(10):print(f"第{i+1}轮分类错误:{spam()}个...")

4.测试结果


注意:需要数据请私聊作者!!!

机器学习贝叶斯-垃圾邮件识别相关推荐

  1. Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报 分类: 机器学习(19) 听说

    Python实现基于朴素贝叶斯的垃圾邮件分类 标签: python朴素贝叶斯垃圾邮件分类 2016-04-20 15:09 2750人阅读 评论(1) 收藏 举报  分类: 机器学习(19)  听说朴 ...

  2. 朴素贝叶斯-垃圾邮件(中文的)处理

    #coding=utf-8 from sklearn.naive_bayes import MultinomialNB,GaussianNB import numpy as np import jie ...

  3. 朴素贝叶斯——垃圾邮件过滤

    文章目录 利用朴素贝叶斯进行文档分类 1.获取数据集 2.切分文本 3.构建词表和分类 4.构建分类器 5.测试算法 利用朴素贝叶斯进行垃圾邮件过滤 1.导入数据集 2.垃圾邮件预测 总结 利用朴素贝 ...

  4. 贝叶斯垃圾邮件分类问题中联合概率的推导

    主旨 讨论贝叶斯垃圾邮件分类问题中联合概率的计算问题.通过借鉴现有的资料,整理出一种数学上等价,同时基于本科概率论课程较容易理解的计算公式. 背景知识 2002年Paul Graham提出了一种利用贝 ...

  5. python实现朴素贝叶斯垃圾邮件分类

    查看通俗易懂的贝叶斯垃圾邮件分类原理 请点击此处 下载邮件数据 请点击此处 import os import re import string import math import numpy as ...

  6. 机器学习实战4(1):朴素贝叶斯:垃圾邮件的识别

    一.朴素贝叶斯基础知识 预备数学知识: A. 无约束条件的优化 1.求极值问题 人工智能中最核心的数学环节是求出一个目标函数(object function)的最小值/最大值.求出一个函数最小是/最大 ...

  7. 机器学习-朴素贝叶斯-垃圾邮件

    一:朴素贝叶斯算法概述 1:朴素贝叶斯(Naïve Bayes, NB)算法,是一种基于贝叶斯定理与特征条件独立假设的分类方法.朴素:特征条件独立:贝叶斯:基于贝叶斯定理.属于监督学习的生成模型,实现 ...

  8. 机器学习之贝叶斯垃圾邮件分类

    代码来源于:https://www.cnblogs.com/huangyc/p/10327209.html  ,本人只是简介学习 1. 贝叶斯.py import numpy as np from w ...

  9. 文本处理之贝叶斯垃圾邮件分类

    本文所讲解的是如何通过Python将文本读取,并且将每一个文本生成对应的词向量并返回. 文章的背景是将50封邮件(包含25封正常邮件,25封垃圾邮件)通过贝叶斯算法对其进行分类. 主要分为如下几个部分 ...

最新文章

  1. java面试常见问题
  2. 一些自己常用的工具类
  3. 超算和服务器性能,烽火GPU高性能服务器助力武大超算中心建设
  4. 用c语言计算2的n次方,计算2的N次方........有什么错吗?
  5. 深度总结 | 多任务学习方法在推荐中的演变
  6. React 成为最吃香的前端技能,一纸技能图快速 Get!
  7. dbutils mysql_mysql之DBUtils
  8. 使用@Validated分组遇到的坑及解决方案
  9. 同事:你居然还在用 try catch 处理异常? 有点Low啊
  10. 谷歌ai人工智能叫什么_为Google产品提供动力的人工智能
  11. 1.郝斌C语言笔记——书籍推荐
  12. 微信开发工具调试窗口怎样查看netWork
  13. 顺序表-有序顺序表的归并算法(新建表+小的先放+余下归并)
  14. opencv部署onnx,并对jpg图片进行批量检测生成xml重要信息
  15. 三菱Q系列PLC通过QD75P2N控制三菱MR-JEA伺服
  16. 笔记:分布式大数据技术原理(一)Hadoop 框架
  17. Shell显示系统时间的全年日
  18. 通过ethtool命令解决网络的卡顿、时延、断断续续、路由带*****识别错误
  19. 深入理解java虚拟机第3版 周志明
  20. 2019, XII Samara Regional Intercollegiate Programming Contest

热门文章

  1. QQ显好友IP地址插件2018版:支持最新版的QQ
  2. 4月28号软件资讯更新合集.....
  3. 这不是演习:黑客在5分钟内搞定Nexus 6P
  4. windows下查看lib,dll包含函数名
  5. n(n-1)/2的奇偶性
  6. matlab 图像处理工程师,关于MATLAB 图像处理与深度学习的作用分析和介绍
  7. collector是什么意思中文翻译_collector是什么意思_ collector的翻译_音标_读音_用法_例句_爱词霸在线词典...
  8. 华为od机试真题 C++ 实现【跳格子游戏】
  9. discuz 自定义联盟推广链接案例及百度分享自定义推广链接的方法
  10. uniapp小程序更改swiper指示点样式