前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >[python机器学习及实践(2)]Sklearn实现朴素贝叶斯

[python机器学习及实践(2)]Sklearn实现朴素贝叶斯

作者头像
全栈程序员站长
发布于 2022-07-21 05:57:13
发布于 2022-07-21 05:57:13
35100
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

1.朴素贝叶斯简介

朴素贝叶斯(Naive Bayes)是一个基于贝叶斯理论的分类器。它会单独考量每一唯独特征被分类的条件概率,进而综合这些概率并对其所在的特征向量做出分类预测。 因此,朴素贝叶斯的基本数据假设是:各个维度上的特征被分类的条件概率之间是相互独立的。它经常被应用在文本分类中,包括互联网新闻的分类,垃圾邮件的筛选。

2.例子:新闻分类

数据:18846条新闻,标签为0-19个数字,一共20类。

某个样本:

From: Mamatha Devineni Ratnam <mr47+@andrew.cmu.edu> Subject: Pens fans reactions Organization: Post Office, Carnegie Mellon, Pittsburgh, PA Lines: 12 NNTP-Posting-Host: po4.andrew.cmu.edu

I am sure some bashers of Pens fans are pretty confused about the lack of any kind of posts about the recent Pens massacre of the Devils. Actually, I am bit puzzled too and a bit relieved. However, I am going to put an end to non-PIttsburghers’ relief with a bit of praise for the Pens. Man, they are killing those Devils worse than I thought. Jagr just showed you why he is much better than his regular season stats. He is also a lot fo fun to watch in the playoffs. Bowman should let JAgr have a lot of fun in the next couple of games since the Pens are going to beat the pulp out of Jersey anyway. I was very disappointed not to see the Islanders lose the final regular season game. PENS RULE!!!

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding=utf-8

from sklearn.datasets import fetch_20newsgroups  # 从sklearn.datasets里导入新闻数据抓取器 fetch_20newsgroups
from sklearn.model_selection import  train_test_split
from sklearn.feature_extraction.text import CountVectorizer  # 从sklearn.feature_extraction.text里导入文本特征向量化模块
from sklearn.naive_bayes import MultinomialNB     # 从sklean.naive_bayes里导入朴素贝叶斯模型
from sklearn.metrics import classification_report

#1.数据获取
news = fetch_20newsgroups(subset='all')
print len(news.data)  # 输出数据的条数:18846

#2.数据预处理:训练集和测试集分割,文本特征向量化
X_train,X_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25,random_state=33) # 随机采样25%的数据样本作为测试集
#print X_train[0]  #查看训练样本
#print y_train[0:100]  #查看标签

#文本特征向量化
vec = CountVectorizer()
X_train = vec.fit_transform(X_train)
X_test = vec.transform(X_test)

#3.使用朴素贝叶斯进行训练
mnb = MultinomialNB()   # 使用默认配置初始化朴素贝叶斯
mnb.fit(X_train,y_train)    # 利用训练数据对模型参数进行估计
y_predict = mnb.predict(X_test)     # 对参数进行预测

#4.获取结果报告
print 'The Accuracy of Naive Bayes Classifier is:', mnb.score(X_test,y_test)
print classification_report(y_test, y_predict, target_names = news.target_names)

 运行结果:

分析:

3.补充:文本特征向量化

朴素贝叶斯模型去给文本数据分类,就必须对文本数据进行处理。

处理的流程一般是:

  1. 对文本分词(作为特征)
  2. 统计各词在句子中是否出现(词集模型)
  3. 统计各词在句子中出现次数(词袋模型)
  4. 统计各词在这个文档的TFIDF值(词袋模型+IDF值)

文本特征向量化方法有:

(1)词集模型:one-hot编码向量化文本;

(2)词袋模型+IDF:TFIDF向量化文本;

(3)哈希向量化文本。

具体的原理如下:

1.one-hot表示法先将文本数据集中不重复的单词提取出来,得到一个大小为V的词汇表。然后用一个V维的向量来表示一个文章,向量中的第d个维度上的1表示词汇表中的第d个单词出现在这篇文章中。

如果文本数据集太大,那么得到的词汇表中可能存在几千个单词,这样会文本的维度太大,不仅会导致计算时间增加,而且带来了稀疏问题(one-hot矩阵中大多数元素都是0)。因此,我们通常在计算词汇表的时候,会排除那些出现次数太少的单词,从而降低文本维度。

2.tf-idf (term frequency–inverse document frequency),不仅考虑了单词在文章中的出现次数,还考虑了其在整个文本数据集中的出现次数。TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力。

3.TfidfVectorizer在执行时,需要先将词袋矩阵放入内存,再计算各位置单词的TFIDF值,如果词袋维度大,将占用过多内存,效率低,此时可以使用哈希向量化。哈希向量化可以缓解TfidfVectorizer在处理高维文本时内存消耗过大的问题。

参考:

1.https://www.jianshu.com/p/dcc27a28b3f4

2.https://blog.csdn.net/juanqinyang/article/details/58222264

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/107412.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【机器学习笔记之八】使用朴素贝叶斯进行文本的分类
使用朴素贝叶斯进行文本的分类 引言 朴素贝叶斯由贝叶斯定理延伸而来的简单而强大的概率模型,它根据每个特征的概率确定一个对象属于某一类别的概率。该方法基于一个假设,所有特征需要相互独立,即任一特征的值和其他特征的值没有关联关系。 虽然这种条件独立的假设在许多应用领域未必能很好满足,甚至是不成立的。但这种简化的贝叶斯分类器在许多实际应用中还是得到了较好的分类精度。训练模型的过程可以看作是对相关条件概率的计算,它可以用统计对应某一类别的特征的频率来估计。 朴素贝叶斯最成功的一个应用是自然语言处理领域,自然语言处理
Angel_Kitty
2018/04/09
1.2K0
朴素贝叶斯(Naive Bayes)
朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。
用户2909867
2018/08/22
5300
朴素贝叶斯(Naive Bayes)
【机器学习】 朴素贝叶斯算法:原理、实例应用(文档分类预测)
条件概率:事件A在另一个事件B已经发生的前提下发生的概率,记作P(A|B),如果有多个条件,
Twcat_tree
2023/11/14
8070
【机器学习】 朴素贝叶斯算法:原理、实例应用(文档分类预测)
分类-朴素贝叶斯(高斯、多项式、伯努利)
贝叶斯分类器主要思想是基于贝叶斯定理,是机器学习中重要的分类算法,适用于高维度的大数据集,速度快,准确率高,一个经典的应用场景是识别垃圾邮件。
唔仄lo咚锵
2022/11/30
1.8K0
分类-朴素贝叶斯(高斯、多项式、伯努利)
Bayes算法分类案例
由代码的输出,可获知该数据共有18846条新闻,不同于前面的样例数据,这些文本数据既没有被设定特征,也没有数字化的量度。因此,在交给朴素贝叶斯分类器学习之前,要对数据做进一步的处理。不过在此之前,仍需要对数据进行分割并且随机采样出一部分用于测试。
用户3577892
2020/06/11
7220
python机器学习库sklearn——朴素贝叶斯分类器[通俗易懂]
分享一个朋友的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开
全栈程序员站长
2022/11/16
2.9K0
python机器学习库sklearn——朴素贝叶斯分类器[通俗易懂]
机器学习 | Sklearn中的朴素贝叶斯全解
前期文章介绍了朴素贝叶斯理论,掌握理论后如何去使用它,是数据挖掘工作者需要掌握的实操技能,下面来看看Sklearn中都有哪些朴素贝叶斯。
数据STUDIO
2021/06/24
5.5K0
朴素贝叶斯完成新闻分类
朴素贝叶斯 朴素指的是"独立" 朴素贝叶斯是分类算法,可以给出每种类别发生的概率 善于计算几个独立事件同时发生的概率(文章分类) 关于独立事件(职业, 体型, 身高 各自独立) 样本编号 职
zhaoolee
2018/04/19
6220
朴素贝叶斯完成新闻分类
机器学习模型从理论到实战|【008-朴素贝叶斯】垃圾邮件分类
文章链接:https://cloud.tencent.com/developer/article/2473563
远方2.0
2024/12/04
1670
机器学习模型从理论到实战|【008-朴素贝叶斯】垃圾邮件分类
【机器学习-监督学习】朴素贝叶斯
  贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,所以统称为贝叶斯分类。朴素贝叶斯是一种贝叶斯分类算法,在许多场合可以与决策树和神经网络分类算法相媲美。图1展示了贝叶斯原理、贝叶斯分类和朴素贝叶斯三者之间的关系。
Francek Chen
2025/01/22
1240
【机器学习-监督学习】朴素贝叶斯
机器学习中的特征提取
特征提升特征抽取使用CountVectorizer并且不去掉停用词的条件下,对文本特征进行量化的朴素贝叶斯分类性能测试使用TfidfVectorizer并且不去掉停用词的条件下,对文本特征进行量化的朴素贝叶斯分类性能测试.分别使用CountVectorizer与TfidfVectorizer,并且去掉停用词的条件下,对文本特征进行量化的朴素贝叶斯分类性能测试特征筛选使用Titanic数据集,通过特征筛选的方法一步步提升决策树的预测性能总结
用户3577892
2020/06/12
1.5K0
机器学习中的特征提取
机器学习(14)——朴素贝叶斯算法思想:基于概率的预测贝叶斯公式朴素贝叶斯算法示例:文本数据分类
前言:在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y=f(X)要么是条件分布P(Y|X)。但是朴素贝叶斯却是生成方法,也就是直接找出特征输出Y和特征X的联合分布然后用P(Y|X)=P(X,Y)/P(X)得出。 朴素贝叶斯很直观,计算量也不大,在很多领域有广泛的应用, 算法思想:基于概率的预测 逻辑回归通过拟合曲线(或者学习超平面)实现分类
DC童生
2018/04/27
14K0
机器学习(14)——朴素贝叶斯算法思想:基于概率的预测贝叶斯公式朴素贝叶斯算法示例:文本数据分类
数据分析入门系列教程-贝叶斯实战
上一节我们学习了朴素贝叶斯的原理,并且手动推导了计算方法,今天我们通过两个真实案例,来看看如何在工作中应用朴素贝叶斯。
周萝卜
2020/10/30
4390
数据分析入门系列教程-贝叶斯实战
Classifying documents with Naïve Bayes使用朴素贝叶斯分类文本
Naïve Bayes is a really interesting model. It's somewhat similar to k-NN in the sense that it makes some assumptions that might oversimplify reality, but still perform well in many cases.
到不了的都叫做远方
2019/12/07
4350
【算法】朴素贝叶斯法
朴素贝叶斯是一种简单但是非常强大的线性分类器,它在垃圾邮件分类,疾病诊断中都取得了很大的成功。
陆勤_数据人网
2018/07/30
3360
【算法】朴素贝叶斯法
朴素贝叶斯深度解码:从原理到深度学习应用
朴素贝叶斯(Naive Bayes)是一种基于贝叶斯定理的分类技术,具有实现简单、易于理解、且在多种应用场景中表现优秀的特点。本节旨在介绍贝叶斯定理的基本历史和重要性,以及朴素贝叶斯分类器的应用场景。
TechLead
2023/10/21
1.1K0
朴素贝叶斯深度解码:从原理到深度学习应用
朴素贝叶斯Naive Bayesian算法入门
摘要:朴素贝叶斯算法是一种基于贝叶斯定理的分类算法,它假设各个特征之间相互独立。本文将介绍朴素贝叶斯算法的原理、应用场景以及如何使用Python中的scikit-learn库进行实现。
大盘鸡拌面
2023/10/25
3520
sklearn调包侠之朴素贝叶斯
文档处理 朴素贝叶斯算法常用于文档的分类问题上,但计算机是不能直接理解文档内容的,怎么把文档内容转换为计算机可以计算的数字,这是自然语言处理(NLP)中很重要的内容。 TF-IDF方法 今天我们简单讲解TF-IDF方法,将文本数据转换为数字。TF-IDF是一个统计方法,用来评估单个单词在文档中的重要程度。 TF表示词频,对一个文档而言,词频就是词在文档出现的次数除以文档的词语总数。例如:一篇文档有1000个字,“我”字出现25次,那就是0.025;“Python”出现5次就是0.005。 IDF表示一个
罗罗攀
2018/07/04
6500
机器学习之朴素贝叶斯算法
朴素贝叶斯(Naive Bayesian)算法能够根据数据加先验概率来估计后验概率,在垃圾邮件分类、文本分类、信用等级评定等多分类问题中得到广泛应用。对于多数的分类算法,比如决策树、KNN等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系。但朴素贝叶斯和多数分类算法都不同,朴素贝叶斯是生成算法,也就是先找出特征输出Y和特征X的联合分布P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)得出。
小一
2019/08/14
7290
机器学习之朴素贝叶斯算法
【机器学习 | 朴素贝叶斯】朴素贝叶斯算法:概率统计方法之王,简单有效的数据分类利器
贝叶斯算法是一种常用的概率统计方法,它利用贝叶斯定理来进行分类和预测。其在计算机还没有出现前几十年就存在了,那个时候科学家们都是用手算的,是最早的机器学习形式之一,该算法基于统计学原理,通过已知的先验概率和观测到的数据,更新对事件发生概率的估计。因为有着一个很强的假设,每个数据特征都是独立的,这也是条件独立的前提条件,也叫"朴素的"的假设,故叫朴素贝叶斯算法。
计算机魔术师
2023/10/15
7240
【机器学习 | 朴素贝叶斯】朴素贝叶斯算法:概率统计方法之王,简单有效的数据分类利器
推荐阅读
相关推荐
【机器学习笔记之八】使用朴素贝叶斯进行文本的分类
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文