【机器学习】朴素贝叶斯介绍及实例--对短信进行二分类 使用多项式分布

贝叶斯

首先什么是贝叶斯?

一个例子,现分别有 A、B 两个容器,在容器 A 里分别有 7 个红球和 3 个白球,在容器 B 里有 1 个红球和 9
个白球,现已知从这两个容器里任意抽出了一个球,且是红球,问这个红球是来自容器 A 的概率是多少? 假设已经抽出红球为事件 B,选中容器 A
为事件 A,则有:P(B) = 8/20,P(A) = 1/2,P(B|A) = 7/10,按照公式,则有:P(A|B) =
(7/10)(1/2) / (8/20) = 0.875
在这里插入图片描述
例如:一座别墅在过去的 20 年里一共发生过 2 次被盗,别墅的主人有一条狗,狗平均每周晚上叫 3 次,在盗贼入侵时狗叫的概率被估计为 0.9,问题是:在狗叫的时候发生入侵的概率是多少?
我们假设 A 事件为狗在晚上叫,B 为盗贼入侵,则以天为单位统计,P(A) = 3/7,P(B) = 2/(20
365) = 2/7300,P(A|B) = 0.9,按照公式很容易得出结果:P(B|A) = 0.9*(2/7300) / (3/7) = 0.00058

一般公式(解决更复杂的问题):
在这里插入图片描述

朴素的概念:独立性假设,假设各个特征之间是独立不相关的

举例 对应成独立的时间概率:
在这里插入图片描述

贝叶斯模型

  • 高斯分布朴素贝叶斯
  • 多项式分布朴素贝叶斯
  • 伯努利分布朴素贝叶斯

对短信进行二分类—>使用多项式分布朴素贝叶斯实例代码:

导包加载数据

import warnings
warnings.filterwarnings('ignore')import numpy as npimport pandas as pdfrom sklearn.naive_bayes import GaussianNB,BernoulliNB,MultinomialNB 
sms = pd.read_csv('./SMSSpamCollection.csv',sep = '\t',header = None)
sms.columns = ['labels','message']
sms
labelsmessage
0hamGo until jurong point, crazy.. Available only ...
1hamOk lar... Joking wif u oni...
2spamFree entry in 2 a wkly comp to win FA Cup fina...
3hamU dun say so early hor... U c already then say...
4hamNah I don't think he goes to usf, he lives aro...
.........
5567spamThis is the 2nd time we have tried 2 contact u...
5568hamWill ü b going to esplanade fr home?
5569hamPity, * was in mood for that. So...any other s...
5570hamThe guy did some bitching but I acted like i'd...
5571hamRofl. Its true to its name

5572 rows × 2 columns

measurements = [{'city': 'Dubai', 'temperature': 33.},{'city': 'London', 'temperature': 12.},{'city': 'San Francisco', 'temperature': 18.},
]from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()display(vec.fit_transform(measurements).toarray())vec.get_feature_names()

array([[ 1., 0., 0., 33.],
[ 0., 1., 0., 12.],
[ 0., 0., 1., 18.]])

[‘city=Dubai’, ‘city=London’, ‘city=San Francisco’, ‘temperature’]

# 词频统计
from sklearn.feature_extraction.text import CountVectorizer 
X.shape

(5572,)

#Series,一维数据
X = sms['message']y = sms['labels']cv = CountVectorizer()
#参数ngram_range() 词组例如turn on
# stop_word 停用词cv.fit(X)#!!!特征提取特征转换都是transform#word count:词频统计
X_wc = cv.transform(X)
X_wc

<5572x8713 sparse matrix of type ‘<class ‘numpy.int64’>’
with 74169 stored elements in Compressed Sparse Row format>

v_ = cv.vocabulary_
v_

{‘go’: 3571,
‘until’: 8084,
‘jurong’: 4374,
‘point’: 5958,
‘crazy’: 2338,
‘available’: 1316,
‘only’: 5571,

v_['its']

4253

##!!!!Serise的用法自带索引查询 使用-1需要加iloc
X.iloc[-1]

‘Rofl. Its true to its name’

# DataFrame,二维
# 词频没有统计出来,数据格式不对
X = sms[['message']]y = sms['labels']cv = CountVectorizer()cv.fit(X)# word count:词频统计
X_wc = cv.transform(X)
X_wc

<1x1 sparse matrix of type ‘<class ‘numpy.int64’>’
with 1 stored elements in Compressed Sparse Row format>

使用量化的数据X_wc算法训练

# X_wc 
# y
from sklearn.model_selection import train_test_split
# 稀松矩阵
X_train,X_test,y_train,y_test = train_test_split(X_wc,y,test_size = 0.2)
X_train

<4457x8713 sparse matrix of type ‘<class ‘numpy.int64’>’
with 59291 stored elements in Compressed Sparse Row format>

bNB = BernoulliNB()bNB.fit(X_train,y_train)bNB.score(X_test,y_test)

0.9847533632286996

mNB = MultinomialNB()mNB.fit(X_train,y_train)mNB.score(X_test,y_test)

0.9856502242152466

gNB = GaussianNB()gNB.fit(X_train.toarray(),y_train)gNB.score(X_test.toarray(),y_test)

0.9183856502242153

dense_data = X_wc.toarray()
dense_data.shape

(5572, 8713)

稀松矩阵存储大小对比稠密矩阵 !!

np.save('./dense_data',dense_data) 
#稠密矩阵330m文件
from scipy import sparse 
sparse.save_npz('./sparse_data',X_wc)
# 稀松矩阵大部分是0,一小部分有对应值 存储仅需几百kb
X_wc

<5572x8713 sparse matrix of type ‘<class ‘numpy.int64’>’
with 74169 stored elements in Compressed Sparse Row format>

自然语言处理NLP

简单的自然语言处理:词频统计,分类

复杂自然语言处理:语意理解,实时翻译

import warnings
warnings.filterwarnings('ignore')
import numpy as npimport pandas as pdimport matplotlib.pyplot as plt
%matplotlib inlinefrom sklearn.naive_bayes import GaussianNB,BernoulliNB,MultinomialNB# Count :词频统计
# Tfidf:term frequencty inverse documnent frequency(词频统计的基础上,进行了加权)
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer,TfidfTransformerfrom sklearn.feature_extraction.text import ENGLISH_STOP_WORDS
from jieba import analyse 
sms = pd.read_csv('./SMSSpamCollection.csv',sep = '\t',header = None)
sms.columns = ['target','message']
sms.head()
targetmessage
0hamGo until jurong point, crazy.. Available only ...
1hamOk lar... Joking wif u oni...
2spamFree entry in 2 a wkly comp to win FA Cup fina...
3hamU dun say so early hor... U c already then say...
4hamNah I don't think he goes to usf, he lives aro...
X = sms['message']
y = sms['target'] 
# 哪些词区分能力比较强:名字,动词
ENGLISH_STOP_WORDS
# 中文停用词:我,的,得,了,啊,呢,哼
# 处理中文分词,jieba分词 pip install jieba

frozenset({‘a’,
‘about’,
‘above’,
‘across’,
‘after’,
‘afterwards’,
‘again’,

len(ENGLISH_STOP_WORDS)

318

count_word = CountVectorizer()
X_cw = count_word.fit_transform(X)
v_ = count_word.vocabulary_
len(v_)

8713

count_word = CountVectorizer(stop_words=ENGLISH_STOP_WORDS)
X_cw = count_word.fit_transform(X)
v_ = count_word.vocabulary_
print(X_cw[10])
len(v_)

(0, 7588) 1
(0, 2299) 1

8444

count_word = CountVectorizer(stop_words='english')
X_cw = count_word.fit_transform(X)
v_ = count_word.vocabulary_
len(v_)

8444

X_dense = X_cw.toarray()
X_dense

array([[0, 0, 0, …, 0, 0, 0],
[0, 0, 0, …, 0, 0, 0],
[0, 0, 0, …, 0, 0, 0],
…,
[0, 0, 0, …, 0, 0, 0],
[0, 0, 0, …, 0, 0, 0],
[0, 0, 0, …, 0, 0, 0]], dtype=int64)

(X_dense[:,0] >=1).sum()

10

plt.hist(X_dense[:,0])

在这里插入图片描述 (array([5562., 0., 0., 0., 0., 0., 0., 0., 0.,
10.]),
array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]),
<a list of 10 Patch objects>)

'''Convert a collection of raw documents to a matrix of TF-IDF features.Equivalent to :class:`CountVectorizer` followed by
:class:`TfidfTransformer`.'''
# TfidfVectorizer == CountVectorizer + TfidfTransformer
tf_idf = TfidfVectorizer()
X_tf_idf = tf_idf.fit_transform(X)
print(X_tf_idf[12])

(0, 4114) 0.09803359946740374
(0, 3373) 0.14023485782692063

v_ = tf_idf.vocabulary_
v_

{‘go’: 3571,
‘until’: 8084,
‘jurong’: 4374,
‘point’: 5958,
。。。

v2_ = {}
for k,v in v_.items():v2_[v] = k 
v2_[747]

‘81010’

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X_tf_idf,y,test_size = 0.2) 
%%time
bNB = BernoulliNB()bNB.fit(X_train,y_train)print(bNB.score(X_test,y_test))

0.97847533632287
Wall time: 19.3 ms

%%time
gNB = GaussianNB()gNB.fit(X_train.toarray(),y_train)print(gNB.score(X_test.toarray(),y_test))

0.8914798206278027
Wall time: 1.99 s

测试是否好用?

X_test = ['Pls go ahead with watts. I just wanted to be sure.I check already lido only got 530 show in e afternoon. U finish work already?','Hello, my love. What are you doing?Find out from 30th August. www.areyouunique.co.uk',"Thanx 4 e brownie it's v nice... We tried to contact you re your reply to our offer of 750 mins 150 textand a new video phone call 08002988890 now or reply for free delivery tomorrow",'We tried to contact you re your reply to our offer of a Video Handset? To find out who it is call from a landline 09111032124 . PoBox12n146tf150p','precious things are very few in the world that is the reason there is only one you','for the world you are a person.for me you the whold world']X_test_tf_idf = tf_idf.transform(X_test)
X_test_tf_idf

<6x8713 sparse matrix of type ‘<class ‘numpy.float64’>’
with 111 stored elements in Compressed Sparse Row format>

# 第一条短信:两条正常短信拼接
# 第二条短信:正常和垃圾短信拼接
# 第二条短信:正常和垃圾短信拼接
# 第二条短信:垃圾短信拼接
bNB.predict(X_test_tf_idf)

array([‘ham’, ‘ham’, ‘spam’, ‘spam’, ‘ham’, ‘ham’], dtype=’<U4’)

sklearn 中文本的处理

feature_extract特征‘萃取’


count_word = CountVectorizer(stop_words=ENGLISH_STOP_WORDS,ngram_range=(1,1))
X_cw = count_word.fit_transform(X)
v_ = count_word.vocabulary_
print(X_cw[10])
len(v_)

(0, 7588) 1
(0, 2299) 1
(0, 7934) 1

65436

v_= count_word.vocabulary_ 
d = {}
for k,v in v_.items():d[v] = k 
print(X[0])
print(X_cw[0])

Go until jurong point, crazy… Available only in bugis n great world la e buffet… Cine there got amore wat…
(0, 23208) 1

d[29530]

‘jurong point crazy’

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gartner分享物联网和智慧城市最新数据

主题为“移我所想 Mobile is me”的2016世界移动大会上海展正在上海如火如荼的举行&#xff0c;Gartner也在第一时间分享了最新的市场数据&#xff0c;包括企业级用户最为关注的物联网和智慧城市的调查预测报告&#xff0c;下面就一起来看看吧&#xff01; 智慧城市与物联网 物…

作业帮电脑版在线使用_作业帮:创新科技驱动在线教育新模式

10月15日&#xff0c;在线教育领军企业作业帮在中国校长大会在线教育论坛上&#xff0c;独家发布《学习的真相&#xff1a;全国K12学情大数据及学习洞察》&#xff0c;宣布已推出作业帮直播课“名师大招”课程体系&#xff0c;集中展示多款面向K12人群的教育黑科技和硬件产品。…

【机器学习】DBSCAN聚类算法—优于Kmean—(理论+图解+python代码)

一、前言 二、DBSCAN聚类算法 三、参数选择 四、DBSCAN算法迭代可视化展示 五、常用的评估方法&#xff1a;轮廓系数 六、用Python实现DBSCAN聚类算法 一、前言 去年学聚类算法的R语言的时候&#xff0c;有层次聚类、系统聚类、K-means聚类、K中心聚类&#xff0c;最后呢…

卡巴斯基:风险无国界 网络安全从业者要与小网民保持一致

“互联网没有国界&#xff0c;每个国家碰到的问题基本上是类似的。对于网络犯罪这件事&#xff0c;并不针对哪个国家&#xff0c;任何有弱点、有机会的地方&#xff0c;黑客都会去。”卡巴斯基公司CEO尤金卡巴斯基在接受未来网&#xff08;微信公众号lovek618&#xff09;记者采…

windows无法访问指定设备路径或文件_完全免费的文件数据恢复工具:Microsoft Windows File Recovery...

意外删除文件的经历是大多数人都遇到过&#xff0c;但是幸运的是有一种“后悔药”可以吃&#xff0c;因为我们可以使用一些【数据恢复软件】以找回一些已删除的文件。市面上有很多这类型的软件&#xff0c;例如EasyRecovery、DiskGenius、Recuva 等软件。但是&#xff0c;功能强…

【机器学习】XGBoost集成算法——(理论+图解+python代码比较其他算法使用天池蒸汽数据)

一、集成算法思想 二、XGBoost基本思想 三、用python实现XGBoost算法 在竞赛题中经常会用到XGBoost算法&#xff0c;用这个算法通常会使我们模型的准确率有一个较大的提升。既然它效果这么好&#xff0c;那么它从头到尾做了一件什么事呢&#xff1f;以及它是怎么样去做的呢&a…

1万条数据大概占多大空间_国漫丨2019年上半年漫画数据报告

文 │ 骨朵国漫一、各漫画平台总体趋势1、快看漫画快看漫画平台2019年Q2各月评论数较Q1有较明显的下滑&#xff0c;月评论数都在400万条左右&#xff1b;收藏数方面&#xff0c;2019年2月达到了半年内最高值&#xff0c;为2660.1万条。2、看漫画、知音漫客等平台(小明太极旗下)…

【机器学习】 LightGBM——优于XGBoost提升的集成算法(安装+对比XGBoost改进+参数说明+python代码实例)

中文官方文档&#xff1a;http://lightgbm.apachecn.org/cn/latest/Installation-Guide.html 英文官方文档&#xff1a;https://lightgbm.readthedocs.io/en/latest/ 一、lightGBM安装 在anaconda中输入&#xff1a;pip install lightGBM即可 输入import lightgbm as lgb做测…

轻量级代码生成器-OnlyCoder 第一篇

程序猿利器&#xff1a;代码生成器&#xff0c;使用代码生成器已经好几年了&#xff0c;增删改查各种生成&#xff0c;从UI到DATA层均生成过。之前有使用过动软的&#xff0c;T4模板等.... T4生成实体还是没有问题的&#xff0c;但是生成MVC视图就有点烦杂了&#xff0c;动软给…

从Java到Go面向对象--继承思想.md

2019独角兽企业重金招聘Python工程师标准>>> Go语言实现继承 我们都知道Java中通过extends来实现对象的继承&#xff0c;那么Go中怎么实现继承呢&#xff1f;Go语言没有继承&#xff0c;只有组合。我们知道&#xff0c;继承的目的是什么&#xff0c;是类的重用&…

电脑键盘练习_电脑新手最关心的:零基础如何快速掌握电脑打字的技巧?

随着计算机的普及&#xff0c;越来越多的人在工作和生活中需要使用计算机。有的朋友通过参与培训学会了键盘打字&#xff0c;有的朋友自学成才学会了键盘打字。这里笔者给大家分享在0基础的情况下&#xff0c;通过自学快速掌握键盘打字的一种方法。需要说明的是&#xff0c;键盘…

【解决】jupyter在deepin安装上的坑

报错&#xff1a;env: "wine": 没有那个文件或目录 jupyter打开之后无法直接跳转浏览器 解决方法&#xff1a; 1、 生成配置文件jupyter notebook --generate-config 2、打开jupyter_notebook_config.py&#xff0c;在文件最后添加以下代码 选择你的浏览器位置 …

【深度学习】Win10安装TensorFlow_gpu(避坑必看)

不用gpu的tensorflow 是没有灵魂的Tensorflow 因为就是为了快&#xff01;快二十倍 FIRST Q&#xff1a;系统及显卡版本问题&#xff01;!!! 到官网看&#xff01;别看别的博客 ~链接&#xff1a; Windows端&#xff1a;https://tensorflow.google.cn/install/source_wind…

SCL定时 1500_iPhone12开售当天黄牛加价1500,哪里买最划算?

10月23日&#xff0c;苹果iPhone12全系列正式开售。首批货源非常抢手&#xff0c;各地的苹果商店门口都排起了长队&#xff0c;现场黄牛甚至加价1500元收购用户手机。开卖首日热度高&#xff0c;官方最快一周发货据苹果官网介绍&#xff0c;此次iPhone12系列共有4款机型&#x…

Web开发基础

-------------------siwuxie095 HTML HTML 即 HyperText Markup Language&#xff0c;超文本标记语言 由服务器返回&#xff0c;浏览器呈现 服务器 即 HTTP 服务器&#xff0c;如&#xff1a;Apache、Nginx、Tomcat 一段 HTML 代码&#xff0c;可以是存放在 HTTP 服务器上的一个…

【FFmpeg】Win10环境下安装FFmpeg(实现视频音频提取裁剪等)

FFmpeg概述 在语音识别领域内&#xff0c;如何识别准确识别语音的第一步就是要将从音频文件中提取相关语音特征。同时对于各大语音接口如百度对于音频文件格式要求高&#xff0c;但是对于实际情况下&#xff0c;我们不可能都能拿到WAV文件&#xff0c;因此必须将首先将各种格式…

个人财务管理系统有源码怎么用_微信里的客户怎么管理?用鱼汛微信管理系统...

鱼汛工作手机是一款[1]销售微信管理系统&#xff0c;具有微信分析、电话分析、客户分析、绩效分析、安全管控、使用管控等六大功能&#xff0c;真正实现安全&#xff0c;高效&#xff0c;可管理&#xff01;鱼汛手机能为企业带来什么价值&#xff1f;随着沟通方式的变革&#x…

另一个分区工具:GNU 的 parted(转)

利用 GNU 的 parted 进行分割行为 虽然你可以使用 fdisk 很快速的将你的分割槽切割妥当&#xff0c;不过 fdisk 却无法支持到高于 2TB 以上的分割槽&#xff01; 此时就得需要 parted 来处理了。不要觉得 2TB 你用不着&#xff01; 2009 年的现在已经有单颗硬盘高达 2TB 的容量…

《简明电路分析》——导读

本节书摘来自华章社区《简明电路分析》一书中的目录&#xff0c;作者钟洪声 吴 涛 孙利佳&#xff0c;更多章节内容可以访问云栖社区“华章社区”公众号查看 目 录 前  言教学建议第一部分 电阻电路分析第1章 电路基本约束关系 1.1 电路与电路模型 1.2 电学主要参数…

【深度学习】Tensorflow的基本操作

图 TensorFlow程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op的执行步骤被描述成一个图. 在执行阶段, 使用会话执行执行图中的op。我们来构建一个简单的计算图。每个节点采用零个或多个张量作为输入&#xff0c;并产生张量作为输出。一种类型的节点是一个常数。…