1. 数据准备:收集数据与读取

2. 数据预处理:处理数据

3. 训练集与测试集:将先验数据按一定比例进行拆分。

4. 提取数据特征,将文本解析为词向量 。

5. 训练模型:建立模型,用训练数据训练模型。即根据训练样本集,计算词项出现的概率P(xi|y),后得到各类下词汇出现概率的向量 。

6. 测试模型:用测试数据集评估模型预测的正确率。

混淆矩阵

准确率、精确率、召回率、F值

7. 预测一封新邮件的类别。

import csv
file_path =r'E:\jupyter\SMSSpamCollectionjsn.txt'#原始的邮件
sms=open(file_path,'r',encoding='utf-8')
csv_reader=csv.reader(sms,delimiter='\t')
sms_data=[]#邮件的内容
sms_label=[]#邮件的类别
for line in csv_reader:sms_label.append(line[0])sms_data.append(line[1])
sms.close()#对数据预处理
sms_data1 = []#存放处理过的邮件
for line in sms_data:#对邮件的内容进行处理for k in line:if k.isalpha() is False:# 不是字母,发生替换操作:newString = line.replace(k," ")dataList = newString.split(" ")sms_data1.append(dataList)#去掉长度小于3的词和没有语义的词
sms_data2= []
for line in sms_data:dataList = []for i in line:if i != '' and len(i) > 3 and i.isalpha():dataList.append(i)dataString = ' '.join(dataList)sms_data.append(dataString)
sms_data =sms_data2##训练集与测试集:将先验数据按一定比例进行拆分
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(sms_data2,sms_label,test_size=0.3,random_state=0,stratify=sms_label)#提取数据特征,将文本解析为词向量
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer=TfidfVectorizer(min_df=2,ngram_range=(1,2),stop_words='english',strip_accents='unicode',norm='l2')
X_train=vectorizer.fit_transform(x_train)
X_test=vectorizer.transform(x_test)#朴素贝叶斯分类器
from sklearn.navie_bayes import MultinomialNB
clf= MultinomialNB().fit(X_train,y_train)
y_nb_pred=clf.predict(X_test)#分类结果显示
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
print(y_nb_pred.shape,y_nb_pred)#x_test预测结果
print('nb_confusion_matrix:')
cm=confusion_matrix(y_test,y_nb_pred)#混淆矩阵
print(cm)
print('nb_classification_report:')
cr=classification_report(y_test,y_nb_pred)#主要分类指标的文本报告
print(cr)

  

转载于:https://www.cnblogs.com/1158Z/p/10078224.html

朴素贝叶斯应用:垃圾邮件分类相关推荐

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

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

  2. 机器学习--使用朴素贝叶斯进行垃圾邮件分类

    一.学习背景 垃圾邮件的问题一直困扰着人们,传统的垃圾邮件分类的方法主要有"关键词法"和"校验码法"等,然而这两种方法效果并不理想.其中,如果使用的是" ...

  3. 朴素贝叶斯法 - 垃圾邮件分类

    本文基于朴素贝叶斯构建一个分类垃圾邮件的模型,研究对象是英文的垃圾邮件. 邮件内容保存在txt文件中,其中分为训练样本train和测试样本test. 在训练样本中正常邮件命名为:pos:垃圾邮件命名为 ...

  4. [CS229学习笔记] 5.判别学习算法与生成学习算法,高斯判别分析,朴素贝叶斯,垃圾邮件分类,拉普拉斯平滑

    本文对应的是吴恩达老师的CS229机器学习的第五课.这节课介绍了判别学习算法和生成学习算法,并给出了生成学习算法的一个实例:利用朴素贝叶斯进行垃圾邮件分类. 判别学习(Discriminative L ...

  5. AI基础:朴素贝叶斯与垃圾邮件分类

    来,继续回顾基础算法 文章目录 背景&贝叶斯原理 贝叶斯分类器 朴素贝叶斯分类器 西瓜数据集下的朴素贝叶斯示例 朴素贝叶斯分类的优缺点 朴素贝叶斯关键问题 朴素贝叶斯企业中的应用案例 基于朴素 ...

  6. 朴素贝叶斯(垃圾邮件分类)

    一.基于贝叶斯决策理论的分类方法 朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比 ...

  7. 基于朴素贝叶斯的垃圾邮件分类-着重理解拉普拉斯变换

    1. 引言 在正式学习朴素贝叶斯之前,需要明确的是机器学习所要实现的是基于有限的训练样本集尽可能准确地估计出后验概率P(c|x),即根据特征得到所属类别的概率,首先引入两个概念. 判别式模型(disc ...

  8. Python微调文本顺序对抗朴素贝叶斯算法垃圾邮件分类机制

    封面图片:<Python可以这样学>,ISBN:9787302456469,董付国,清华大学出版社 图书详情(京东): ================= 关于朴素贝叶斯算法中文垃圾邮件分 ...

  9. 第六次实验:使用朴素贝叶斯对垃圾邮件分类(CUST)

    1.实验目的和要求 会用Python创建朴素贝叶斯模型 使用朴素贝叶斯模型对垃圾邮件分类 会把文本文件变成向量 会用评价朴素贝叶斯模型的分类效果 2.实验环境 pycharm2021.3.1.Win1 ...

  10. 朴素贝叶斯与垃圾邮件分类

    垃圾邮件识别问题,也即对给定样本(包含垃圾邮件,非垃圾邮件)判断是否为垃圾邮件,根据贝叶斯定理: ⎧⎩⎨⎪⎪⎪⎪⎪⎪p(y=1|x)=p(y=1,x)p(x)p(y=0|x)=p(y=0,x)p(x) ...

最新文章

  1. Excel操作:导出到Excel并下载到web客户端
  2. 前端学习01-04格式标签
  3. 移动端web开发,click touch tap区别
  4. 2021略阳天津高级中学高考成绩查询,2021年天津高考成绩查询网站查分网址:http://www.zhaokao.net/...
  5. android toast几种使用方法 (转)
  6. 孙叫兽进阶之路之Gitlab的使用(图文教程)
  7. 【PyTorch】中view()==>相当于numpy中resize()、reshape()的功能
  8. 生成式对抗网络GAN
  9. (转)详解JS位置、宽高属性之一:offset系列
  10. 轻量级数据交换格式JSON
  11. ubuntu12.04安装出现系统内部错误
  12. 测试开发岗面试,需要准备的100道题型
  13. Java io和nio的应用场景_java中IO和NIO的区别和适用场景
  14. 算法学习01- 生兔子的问题
  15. SSR、SSE、SST、判定系数(可决系数、拟合优度)的计算公式
  16. 电线对接和端接为什么要使用连接器?
  17. 基于SpringBoot的个人博客系统设计与实现
  18. 导出excel时,弹出的下载窗口一闪而过
  19. CLICKHOUSE函数使用经验(arrayJoin与arrayMap函数应用场景)
  20. OpenFegin(基础)

热门文章

  1. 华为S5700系列交换机配置文件导出、导入
  2. mysql记录相互关系查询_MySQL关系表查询两个表的数据
  3. 语言设计谁年龄大_这桌子谁设计的?脑洞够大,除能360°翻转,打台球,乒乓球都行...
  4. matplotlib 中文_详解Matplotlib中文字符显示问题
  5. html下拉列表插件,js+CSS实现模拟华丽的select控件下拉菜单效果
  6. 缩进一个字符_Indesign里标点挤压及首行缩进2字符设置
  7. c++ thread 内存泄漏_使用 ThreadLocal如何避免内存泄露?
  8. java 滚动加载,滚动加载,可视区域判断
  9. 晟数学院 oracle,Oracle 控制文件存储解析
  10. stm32for循环几个机械周期_波浪理论之五:循环周期理论