代码和数据: https://github.com/skyerhxx/Spam_Classification

数据集一共155封邮件,0-151用来训练,151-155用来测试

使用sklearn的MultinomialNB()库进行垃圾邮件分类

重点是使用模型建立起vector和label的对应关系

然后NLP中文本和向量的映射,的对应关系在这里体现的很直观的4

import re
import os
from jieba import cut
from itertools import chain
from collections import Counter
import numpy as np
from sklearn.naive_bayes import MultinomialNB#文本预处理
def get_words(filename):"""读取文本并过滤无效字符和长度为1的词"""words = []with open(filename, 'r', encoding='utf-8') as fr:for line in fr:line = line.strip()# 过滤无效字符line = re.sub(r'[.【】0-9、——。,!~\*]', '', line)# 使用jieba.cut()方法对文本切词处理line = cut(line)# 过滤长度为1的词line = filter(lambda word: len(word) > 1, line)words.extend(line)return words#遍历邮件
all_words = []def get_top_words(top_num):"""遍历邮件建立词库后返回出现次数最多的词"""filename_list = ['email/{}.txt'.format(i) for i in range(151)]# 遍历邮件建立词库for filename in filename_list:all_words.append(get_words(filename))# itertools.chain()把all_words内的所有列表组合成一个列表# collections.Counter()统计词个数freq = Counter(chain(*all_words))return [i[0] for i in freq.most_common(top_num)]top_words = get_top_words(100)# 构建词-个数映射表
# 这就是对文本进行向量的映射
vector = []
for words in all_words:'''words:['国际', 'SCI', '期刊', '材料', '结构力学', '工程', '杂志', '国际', 'SCI', '期刊', '先进', '材料科学', '材料', '工程', '杂志', '国际', 'SCI', '期刊', '图像处理', '模式识别', '人工智能', '工程', '杂志', '国际', 'SCI', '期刊', '数据', '信息', '科学杂志', '国际', 'SCI', '期刊', '机器', '学习', '神经网络', '人工智能','杂志', '国际', 'SCI', '期刊', '能源', '环境', '生态', '温度', '管理', '结合', '信息学', '杂志', '期刊','网址', '论文', '篇幅', '控制', '以上', '英文', '字数', '以上', '文章', '撰写', '语言', '英语', '论文', '研究', '内容', '详实', '方法', '正确', '理论性', '实践性', '科学性', '前沿性', '投稿', '初稿', '需要', '排版', '录用', '提供', '模版', '排版', '写作', '要求', '正规', '期刊', '正规', '操作', '大牛', '出版社', '期刊', '期刊', '质量', '放心', '检索', '稳定', '邀请函', '推荐', '身边', '老师', '朋友', '打扰', '请谅解']'''word_map = list(map(lambda word: words.count(word), top_words))'''word_map:[0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]'''vector.append(word_map)#训练模型
vector = np.array(vector)
# 0-126.txt为垃圾邮件标记为1;127-151.txt为普通邮件标记为0
labels = np.array([1]*127 + [0]*24)model = MultinomialNB() #朴素贝叶斯模型
model.fit(vector, labels)#测试模型
def predict(filename):"""对未知邮件分类"""# 构建未知邮件的词向量words = get_words(filename)current_vector = np.array(tuple(map(lambda word: words.count(word), top_words)))# 预测结果result = model.predict(current_vector.reshape(1, -1))return '**垃圾邮件**' if result == 1 else '普通邮件'print('151.txt分类情况:{}'.format(predict('email/151.txt')))
print('152.txt分类情况:{}'.format(predict('email/152.txt')))
print('153.txt分类情况:{}'.format(predict('email/153.txt')))
print('154.txt分类情况:{}'.format(predict('email/154.txt')))
print('155.txt分类情况:{}'.format(predict('email/155.txt')))

参考:

https://www.cnblogs.com/nickchen121/p/10825997.html

朴素贝叶斯模型进行垃圾邮件分类相关推荐

  1. 基于朴素贝叶斯+Python实现垃圾邮件分类和结果分析

    基于朴素贝叶斯+Python实现垃圾邮件分类 朴素贝叶斯原理 请参考: 贝叶斯推断及其互联网应用(二):过滤垃圾邮件 Python实现 源代码主干来自: python实现贝叶斯推断--垃圾邮件分类 我 ...

  2. 机器学习——朴素贝叶斯算法(垃圾邮件分类)

    朴素贝叶斯算法介绍以及垃圾邮件分类实现 1.一些数学知识 2.贝叶斯公式 3.朴素贝叶斯算法 (1)介绍 (2)核心思想 (3)朴素贝叶斯算法 (4)拉普拉斯修正 (5)防溢出策略 (6)一般过程 ( ...

  3. 机器学习代码实战——朴素贝叶斯(实现垃圾邮件分类)

    文章目录 1.实验目的 2.导入必要模块并读取数据 3.训练+预测 4.使用Sklearn Pipeline方法 1.实验目的 (1)分析邮件数据并对数据进行预处理 (2)运行朴素贝叶斯模型对邮件进行 ...

  4. 《机器学习实战》基于朴素贝叶斯算法实现垃圾邮件分类

    import random import sys import numpy as np import pandas as pd from pandas import Series, DataFrame ...

  5. 朴素贝叶斯应用:垃圾邮件分类

    1. 数据准备:收集数据与读取 2. 数据预处理:处理数据 3. 训练集与测试集:将先验数据按一定比例进行拆分. 4. 提取数据特征,将文本解析为词向量 . 5. 训练模型:建立模型,用训练数据训练模 ...

  6. 检测用户命令序列异常——使用LSTM分类算法【使用朴素贝叶斯,类似垃圾邮件分类的做法也可以,将命令序列看成是垃圾邮件】...

    通过 搜集 Linux 服务器 的 bash 操作 日志, 通过 训练 识别 出 特定 用户 的 操作 习惯, 然后 进一步 识别 出 异常 操作 行为. 使用 SEA 数据 集 涵盖 70 多个 U ...

  7. python:基于朴素贝叶斯算法的垃圾邮件过滤分类

    目录 一.朴素贝叶斯算法 1.概述 2.推导过程 二.实现垃圾邮件过滤分类 1.垃圾邮件问题背景 2.朴素贝叶斯算法实现垃圾邮件分类的步骤 3.python实现 参考学习网址:https://blog ...

  8. 朴素贝叶斯算法实现垃圾邮件过滤(Python3实现)

    目录 1.朴素贝叶斯实现垃圾邮件分类的步骤 2.邮件数据 3.代码实现 4.朴素贝叶斯的优点和缺点 1.朴素贝叶斯实现垃圾邮件分类的步骤 (1)收集数据:提供文本文件. (2)准备数据:将文本文件解析 ...

  9. 机器学习:朴素贝叶斯算法与垃圾邮件过滤

    简介 贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决"逆向概率"的问题.首先我们先来解释下正向概率与逆向概率的含义: 正向概率:假设一个箱子里有5个黄色球和 ...

  10. 朴素贝叶斯算法实现垃圾邮件过滤

    朴素贝叶斯算法实现垃圾邮件过滤 1.1 题目的主要研究内容 (1)贝叶斯垃圾邮件过滤技术是一种电子邮件过滤的统计学技术,它使用贝叶斯分类来进行垃圾邮件的判别. (2)贝叶斯分类的运作是借着使用标记(一 ...

最新文章

  1. Github 标星 11.5K!这可能是最好的 Java 博客系统
  2. Snapchat - give sum target listInteger first who hits target wins
  3. Oracle不使用索引的几种情况列举
  4. java guice_java – Guice:如何为一个类型获得多个@Provides?
  5. Oracle其它数据库对象:视图、序列、同义词
  6. IIS下配置PHP遇到Service Unavailable的解决方法
  7. POJ1050-To the Max
  8. MYSQL的高级知识及AB复制
  9. bootsect.exe linux,bootsect.exe
  10. php 谈谈我对session, cookies和jwt的理解
  11. 图数据库_多款业界流行图数据库对比
  12. 输出IMG格式SAR图像——Img格式图像文件概述
  13. android荣耀v20圆角适配,AR新玩法 让荣耀V20成为你随身的尺子
  14. 英文单词和数字断行不折叠
  15. 6,JESD204B接口简介
  16. 【读书笔记】好好思考-成甲
  17. xpath用于HTML文档通过元素,理解HTML和XPath
  18. 跨模态神经搜索实践VCED CLIP简介
  19. vue前端进阶之SSR篇 --- 搭建简单的SSR框架
  20. python毕设代做_怎么用python做毕设?

热门文章

  1. 概要设计模板 外部接口设计_0226 rest接口设计
  2. 用vbs写九九乘法表
  3. 看大神如何用python爬虫爬取京东商品评论
  4. stearm计算机验证码,steam账户名称怎么取,值得收藏
  5. NPDP考试地点在哪?
  6. 51单片机DS1302时钟
  7. VS2010 中文版MSDN下载
  8. 哔哩哔哩谷歌浏览器助手Mac版分享来了
  9. 联想电脑EasyCamera无法打开摄像头
  10. 还不知道IEEE、ACM、SCI、EI、nature、期刊、会议论文之间的关系?一幅关系图搞定~