python朴素贝叶斯_[python机器学习及实践(2)]Sklearn实现朴素贝叶斯-程序员宅基地

技术标签: python朴素贝叶斯  

1.朴素贝叶斯简介

朴素贝叶斯(Naive Bayes)是一个基于贝叶斯理论的分类器。它会单独考量每一唯独特征被分类的条件概率,进而综合这些概率并对其所在的特征向量做出分类预测。

因此,朴素贝叶斯的基本数据假设是:各个维度上的特征被分类的条件概率之间是相互独立的。它经常被应用在文本分类中,包括互联网新闻的分类,垃圾邮件的筛选。

2.例子:新闻分类

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

某个样本:

From: Mamatha Devineni Ratnam

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!!!

代码:

#coding=utf-8

from sklearn.datasets import fetch_20newsgroups #从sklearn.datasets里导入新闻数据抓取器 fetch_20newsgroups

from sklearn.model_selection importtrain_test_splitfrom sklearn.feature_extraction.text import CountVectorizer #从sklearn.feature_extraction.text里导入文本特征向量化模块

from sklearn.naive_bayes import MultinomialNB #从sklean.naive_bayes里导入朴素贝叶斯模型

from sklearn.metrics importclassification_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.补充:文本特征向量化

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

处理的流程一般是:

对文本分词(作为特征)

统计各词在句子中是否出现(词集模型)

统计各词在句子中出现次数(词袋模型)

统计各词在这个文档的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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39924198/article/details/110764134

智能推荐

java date 加一个月_如何在Java中向当前日期添加一个月?-程序员宅基地

文章浏览阅读794次。陪伴而非守候LocalDate::plusMonths例:LocalDate.now( ) .plusMonths( 1 );最好指定时区。LocalDate.now( ZoneId.of( "America/Montreal" ) .plusMonths( 1 );java.time该java.time框架是建立在Java 8和更高版本。这些类取代旧的麻烦日期时间..._日期 加1个月java

Python + WinAppDriver + Appium 对Windows桌面应用程序进行界面(UI)自动化测试_appium winappdriver-程序员宅基地

文章浏览阅读1.4w次,点赞11次,收藏105次。开发者模式设置Appium连接WinAppDriver配置WinAppDriver支持的查找元素方法查询控件信息VNC Viewer 连接远程电脑桌面 UI自动化测试的示例代码#!/usr/bin/env python# -*- encoding: utf-8 -*-'''@Author: 思文伟@Date: 2021/03/30 15:49:32'''import ioimport osimport sysfrom appium impor..._appium winappdriver

android studio实验之个人介绍界面_安卓studio用xml写一个自我介绍代码-程序员宅基地

文章浏览阅读4.1k次,点赞7次,收藏52次。个人介绍界面_安卓studio用xml写一个自我介绍代码

php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法_php取昨天 开始 时间 结束时间-程序员宅基地

文章浏览阅读294次。php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法,主要使用到了 php 的时间函数 mktime。下面首先还是直奔主题以示例说明如何使用 mktime 获取今日、昨日、上周、本月的起始时间戳和结束时间戳,然后在介绍一下 mktime 函数作用和用法。01//php获取今日开始时间戳和结束时间戳0_php取昨天 开始 时间 结束时间

面试整理-Linux中必须掌握的命令_文件夹/home/interview/里面包含有关键字yunke的-程序员宅基地

文章浏览阅读269次。文章来自:http://linux.it.net.cn/e/itinterview/2018/0925/27581.html日志查看:1、查询日志中含有某个关键字的信息cat app.log |grep 'error'2、查询日志尾部最后10行的日志tail -n 10 app.log3、查询10行之后的所有日志tail -n +10 app.log 4、查询日志文件中的头..._文件夹/home/interview/里面包含有关键字yunke的

SAP S/4HANA Cloud云培训及云认证 | 易拓独家_cloud architect for sap s/4hana cloud pe-程序员宅基地

文章浏览阅读541次。借助 SAP ERP云,企业能够获取更加详细的、端到端的业务数据与分析,从而实时掌握业务运营情况,并且基于SaaS的ERP管理系统,可缓解中小企业在公司管理系统方面投入大、利用率低等问题,为企业引领业务创新,提高营收、利润和环保效益提供保障。SAP S/4 HANA主要分On-Premise(本地部署版本)和Cloud(云版本)两大版本,Cloud又分为公有云和私有云版本。SAP S/4HANA Cloud 是一款基于人工智能和分析技术的模块化 ERP 云软件,功能齐全,满足各种业务需求。_cloud architect for sap s/4hana cloud pe

随便推点

Oracle 12.2.0.1.0 PDB随着CDB启动而启动-程序员宅基地

文章浏览阅读382次。Oracle12.2.0.1.0 PDB随着CDB启动而启动 Oracle 12.1和Oracle12.2版本,默认情况下PDB不会随着CDB启动而启动; 为了实现PDB随着CD..._创建一个触发器让pdb能够在cdb启动时打开,并验证效果。

Idea配置tomcat时没有artifacts包解决办法_idea tomcat web项目缺少artofsolving包-程序员宅基地

文章浏览阅读4.5k次,点赞5次,收藏8次。不知道为啥我的idea老是莫名其妙的报错,可能是在针对我1.这个时候大家可以看到是没有 artifacts包的在下方也有这个警告导致tomcat无法成功配置2.我在网上找的解决办法是将这个勾上但是我默认就是勾上的没有解决我的问题 3.我将maven环境更新了一下于是成功解决了结论:更新Maven环境即可 ..._idea tomcat web项目缺少artofsolving包

【Ubuntu用法】ubuntu下源码安装OpenSSH_ubuntu下载ssh-程序员宅基地

文章浏览阅读3.1k次。由于OpenSSH依赖于openssl,因此先安装opensslopenssl安装流程下载openssl源码openssl下载的地址为:https://www.openssl.org/source/openssl-1.1.1h.tar.gz注:此处我使用的版本是openssl-1.1.1h解压源码解压命令:tar zxvf openssl-1.1.h.tar.gz编译安装在这之前,先卸载掉老版本。卸载命令为:$ sudo apt-get purge openssl然后删掉老版本的_ubuntu下载ssh

致翔OA漏洞学习——msglog.aspx SQL注入漏洞_aspx注入漏洞-程序员宅基地

文章浏览阅读2.8k次,点赞8次,收藏10次。警告请勿使用本文提到的内容违反法律。本文不提供任何担保一、概述致翔OA msglog.aspx文件存在SQL注入漏洞,攻击者通过漏洞可获取敏感信息。注:注入参数为user。_aspx注入漏洞

java pl0 四元式,【编译原理】c++实现自下而上语法分析及中间代码(四元式)生成...-程序员宅基地

文章浏览阅读1.9k次。写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文!本博客全网唯一合法URL:http://www.cnblogs.com/acm-icpcer/p/9173880.html基于C++语言实现的PL/0语言的算术表达式的自下而上的语法分析程序。该语言的其他语法实现思想与此一致,故不赘..._生成四元式c++

Java知识拾遗:三大框架的技术起源【转载】-程序员宅基地

文章浏览阅读311次。Struts、Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的?我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的 JSP、负责流程逻辑控制的Servlet以及负责数据封装的J

推荐文章

热门文章

相关标签