朴素贝叶斯模型进行垃圾邮件分类
代码和数据: 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
朴素贝叶斯模型进行垃圾邮件分类相关推荐
- 基于朴素贝叶斯+Python实现垃圾邮件分类和结果分析
基于朴素贝叶斯+Python实现垃圾邮件分类 朴素贝叶斯原理 请参考: 贝叶斯推断及其互联网应用(二):过滤垃圾邮件 Python实现 源代码主干来自: python实现贝叶斯推断--垃圾邮件分类 我 ...
- 机器学习——朴素贝叶斯算法(垃圾邮件分类)
朴素贝叶斯算法介绍以及垃圾邮件分类实现 1.一些数学知识 2.贝叶斯公式 3.朴素贝叶斯算法 (1)介绍 (2)核心思想 (3)朴素贝叶斯算法 (4)拉普拉斯修正 (5)防溢出策略 (6)一般过程 ( ...
- 机器学习代码实战——朴素贝叶斯(实现垃圾邮件分类)
文章目录 1.实验目的 2.导入必要模块并读取数据 3.训练+预测 4.使用Sklearn Pipeline方法 1.实验目的 (1)分析邮件数据并对数据进行预处理 (2)运行朴素贝叶斯模型对邮件进行 ...
- 《机器学习实战》基于朴素贝叶斯算法实现垃圾邮件分类
import random import sys import numpy as np import pandas as pd from pandas import Series, DataFrame ...
- 朴素贝叶斯应用:垃圾邮件分类
1. 数据准备:收集数据与读取 2. 数据预处理:处理数据 3. 训练集与测试集:将先验数据按一定比例进行拆分. 4. 提取数据特征,将文本解析为词向量 . 5. 训练模型:建立模型,用训练数据训练模 ...
- 检测用户命令序列异常——使用LSTM分类算法【使用朴素贝叶斯,类似垃圾邮件分类的做法也可以,将命令序列看成是垃圾邮件】...
通过 搜集 Linux 服务器 的 bash 操作 日志, 通过 训练 识别 出 特定 用户 的 操作 习惯, 然后 进一步 识别 出 异常 操作 行为. 使用 SEA 数据 集 涵盖 70 多个 U ...
- python:基于朴素贝叶斯算法的垃圾邮件过滤分类
目录 一.朴素贝叶斯算法 1.概述 2.推导过程 二.实现垃圾邮件过滤分类 1.垃圾邮件问题背景 2.朴素贝叶斯算法实现垃圾邮件分类的步骤 3.python实现 参考学习网址:https://blog ...
- 朴素贝叶斯算法实现垃圾邮件过滤(Python3实现)
目录 1.朴素贝叶斯实现垃圾邮件分类的步骤 2.邮件数据 3.代码实现 4.朴素贝叶斯的优点和缺点 1.朴素贝叶斯实现垃圾邮件分类的步骤 (1)收集数据:提供文本文件. (2)准备数据:将文本文件解析 ...
- 机器学习:朴素贝叶斯算法与垃圾邮件过滤
简介 贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决"逆向概率"的问题.首先我们先来解释下正向概率与逆向概率的含义: 正向概率:假设一个箱子里有5个黄色球和 ...
- 朴素贝叶斯算法实现垃圾邮件过滤
朴素贝叶斯算法实现垃圾邮件过滤 1.1 题目的主要研究内容 (1)贝叶斯垃圾邮件过滤技术是一种电子邮件过滤的统计学技术,它使用贝叶斯分类来进行垃圾邮件的判别. (2)贝叶斯分类的运作是借着使用标记(一 ...
最新文章
- Github 标星 11.5K!这可能是最好的 Java 博客系统
- Snapchat - give sum target listInteger first who hits target wins
- Oracle不使用索引的几种情况列举
- java guice_java – Guice:如何为一个类型获得多个@Provides?
- Oracle其它数据库对象:视图、序列、同义词
- IIS下配置PHP遇到Service Unavailable的解决方法
- POJ1050-To the Max
- MYSQL的高级知识及AB复制
- bootsect.exe linux,bootsect.exe
- php 谈谈我对session, cookies和jwt的理解
- 图数据库_多款业界流行图数据库对比
- 输出IMG格式SAR图像——Img格式图像文件概述
- android荣耀v20圆角适配,AR新玩法 让荣耀V20成为你随身的尺子
- 英文单词和数字断行不折叠
- 6,JESD204B接口简介
- 【读书笔记】好好思考-成甲
- xpath用于HTML文档通过元素,理解HTML和XPath
- 跨模态神经搜索实践VCED CLIP简介
- vue前端进阶之SSR篇 --- 搭建简单的SSR框架
- python毕设代做_怎么用python做毕设?