[python机器学习及实践(2)]Sklearn实现朴素贝叶斯
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!!!
代码:
#coding=utf-8from 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.补充:文本特征向量化
朴素贝叶斯模型去给文本数据分类,就必须对文本数据进行处理。
处理的流程一般是:
- 对文本分词(作为特征)
- 统计各词在句子中是否出现(词集模型)
- 统计各词在句子中出现次数(词袋模型)
- 统计各词在这个文档的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://www.cnblogs.com/youngsea/p/9327972.html
[python机器学习及实践(2)]Sklearn实现朴素贝叶斯相关推荐
- 白话 贝叶斯公式_【白话机器学习】算法理论+实战之朴素贝叶斯
来自于: AI蜗牛车团队(作者:Miracle8070) 公众号: AI蜗牛车 原文链接:[白话机器学习]算法理论+实战之朴素贝叶斯mp.weixin.qq.com 有兴趣的同学可以关注我的公众号: ...
- 机器学习实验:使用3种朴素贝叶斯算法对iris()、breast_cancer()和wine()数据集进行训练
机器学习实验:使用3种朴素贝叶斯算法对iris().breast_cancer()和wine()数据集进行训练 实验内容: 分别使用3种朴素贝叶斯算法对iris().breast_cancer()和w ...
- Python+sklearn使用朴素贝叶斯算法识别中文垃圾邮件
总体思路与步骤: 1.从电子邮箱中收集垃圾和非垃圾邮件训练集. 2.读取全部训练集,删除其中的干扰字符,例如[]*..,等等,然后分词,删除长度为1的单个字. 3.统计全部训练集中词语的出现次数,截取 ...
- python调用sklearn中朴素贝叶斯踩坑
调用结构: from sklearn.naive_bayes import MultinomialNB # 从sklean.naive_bayes里导入朴素贝叶斯模型 from sklearn.f ...
- Python手撸机器学习系列(四):朴素贝叶斯(华强买瓜版)
目录 一.原理 1.1 买瓜 1.2 算瓜 二.代码实现 三.参考文献 一.原理 1.1 买瓜 大家好,我叫刘华强.我现在手里有一堆西瓜,我希望通过观察我这一堆西瓜中好瓜的特征来总结出判断好瓜的标准, ...
- AI实践之路:朴素贝叶斯
1.朴素贝叶斯 1.1背景 朴素贝叶斯来源于贝叶斯学派,他们的理论与传统的统计学观点相悖,其中最大的分歧点之一是关于"先验"的使用.传统统计学认为概率即频率,计算概率只应从观测到的 ...
- 【白话机器学习】算法理论+实战之朴素贝叶斯
1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...
- 基于sklearn的朴素贝叶斯_朴素贝叶斯分类实战:对文档进行分类
朴素贝叶斯分类最适合的场景就是文本分类.情感分析和垃圾邮件识别.其中情感分析和垃圾邮件识别都是通过文本来进行判断.所以朴素贝叶斯也常用于自然语言处理 NLP 的工具. sklearn 机器学习包 sk ...
- 【机器学习实战】第4章 朴素贝叶斯(Naive Bayes)
第4章 基于概率论的分类方法:朴素贝叶斯 朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础--贝叶斯定理.最后,我们 ...
最新文章
- 必须为元素类型 association 声明属性 oftype。_CSS相关的选择器和属性介绍
- 使用fpm简单制作自定义rpm包
- python 语料标注_在python中怎么标记文本?
- Linux之自动化部署
- NPM 安装 TypeScript 和 npm 的 Invalid package.json 错误以及运行第一个typescript程序
- 数据库怎么看是什么编码_离婚了怎么发朋友圈?看你喜欢什么类型
- 杨辉再发声明:承认听取付向东报告后受其“鼓舞”,为没及时沟通向其致歉...
- 挖掘PubMed数据库,获取报道的或推测新的基因调控关系
- python四分位数_Python解释数学系列——分位数Quantile
- 大学计算机试题在线,大学计算机基础试题选择题.pdf
- 我的 Java 自学之路
- 弘辽科技:手淘推荐流量总是忽高忽低如何稳定获取
- 别再装纯说不懂BT种子了
- 二阶梯度优化新崛起,超越 Adam,Transformer 只需一半迭代量
- jQuery UI Dialog
- 考取IT职业资格证书相关信息
- 说话人识别的特征选取
- Android利用TranslateAnimation 动画实现上下平移横线(模拟人脸识别扫描,二维码识别扫描)
- 《统计学习方法》 第九章 EM算法(原理+代码)
- vue语法、跨域报错等问题集合
热门文章
- 什么是线索评分?如何让线索评分发挥作用?
- vue中定义多重样式
- CentOS 7 Graylog安装
- 需要氪金吗_《死或生6》染发也需要氪金,海外玩家吐槽官方吃相太难看
- android 火箭动画,利用动画模拟火箭发射场景
- 若依集成knife4j实现swagger文档增强
- web.xml不同版本的头文件配置
- [Spring Boot系列]1. 项目搭建之一
- [Perl系列二-实战] 1. Perl 读取代码的行数
- js in html5,CSS-in-JS 来做的 5 件事情,一般人都不知道!