sklearn分类器:朴素贝叶斯

朴素贝叶斯

朴素贝叶斯(Naive Bayes)是一个非常简单,但是实用性很强的分类模型。朴素贝叶斯分类器的构造基础是贝叶斯理论。

概率论基础

概率定义为一件事情发生的可能性。事情发生的概率可以 通过观测数据中的事件发生次数来计算,事件发生的概率等于改事件发生次数除以所有事件发生的总次数。举一些例子:

  • 扔出一个硬币,结果头像朝上
  • 某天是晴天
  • 某个单词在未知文档中出现

我们将事件的概率记作$$P\left({X}\right)$$,那么假设这一事件为X属于样本空间中的一个类别,那么$${0}\le{P}\left({X}\right)\le{1}$$。

联合概率与条件概率

  • 联合概率

是指两件事情同时发生的概率。那么我们假设样本空间有一些天气数据:

编号星期几天气
12晴天
21下雨
33晴天
44晴天
51下雨
62下雪
73下雪

那么天气被分成了三类,那么$$P\left(X=sun\right){=}\frac{3}{7}$$,假如说天气=下雪且星期几=2?这个概率怎么求?这个概率应该等于两件事情为真的次数除以所有事件发生的总次数。我们可以看到只有一个样本满足天气=下雪且星期几=2,所以这个概率为$$\frac{1}{7}$$。一般对于X和Y来说,对应的联合概率记为$$P\left({XY}\right)$$。

  • 条件概率

那么条件概率形如$$P\left({X}\mid{Y}\right)$$,这种格式的。表示为在Y发生的条件下,发生X的概率。假设X代表星期,Y代表天气,则

$$P\left({X=3}\mid{Y=sun}\right)$$如何求?

从表中我们可以得出,$$P\left({X=3,Y=sun}\right){=}\frac{1}{7}$$,$$P\left({Y}\right){=}\frac{3}{7}$$

$$P\left({X=3}\mid{Y=sun}\right){=}\frac{1}{3}{=}\frac{P\left({X=3,Y=sun}\right)}{P\left({Y}\right)}$$

在条件概率中,有一个重要的特性

  • 如果每个事件之间相互独立

那么则有$$P\left({X_1,X_2,X_3,...,X_n}\mid{Y_i}\right){=}{P}\left({X_1}\mid{Y_i}\right) {P}\left({X_2}\mid{Y_i}\right) {P}\left({X_3}\mid{Y_i}\right){...}{P}\left({X_n}\mid{Y_i}\right)$$

这个式子的意思是给定条件下,所有的X的概率为单独的Y条件下每个X发生的概率乘积,我们通过后面再继续去理解这个式子的具体含义。

贝叶斯公式

首先我们给出该公式的表示,$$P\left({c_i}\mid{W}\right){=}\frac{P\left({W}\mid{C_i}\right)P\left({c_i}\right)}{P\left({W}\right)}$$,其中$$c_i$$为类别,$$W$$为特征向量。

贝叶斯公式最常用于文本分类,上式左边可以理解为给定一个文本词向量$$W$$,那么它属于类别$$c_i$$的概率是多少。那么式子右边分几部分,$$P\left({W}\mid{c_i}\right)$$理解为在给定类别的情况下,该文档的词向量的概率。可以通过条件概率中的重要特性来求解。

假设我们有已分类的文档,

a = "life is short,i like python"
b = "life is too long,i dislike python"
c = "yes,i like python"
label=[1,0,1]

词袋法的特征值计算

若使用词袋法,且以训练集中的文本为词汇表,即将训练集中的文本中出现的单词(不重复)都统计出来作为词典,那么记单词的数目为n,这代表了文本的n个维度。以上三个文本在这8个特征维度上的表示为:

 lifeisishortlonglikedisliketoopythonyes
a'1111010010
b'1110101110
c'0010010011

上面a',b'就是两个文档的词向量的表现形式,对于贝叶斯公式,从label中我们可以得出两个类别的概率为:

$$P\left({c_i=1}\right){=}0.5,P\left({c_i=0}\right){=}0.5$$

对于一个给定的文档类别,每个单词特征向量的概率是多少呢?

提供一种TF计算方法,为类别$$y_k$$每个单词出现的次数$$N_i$$,除以文档类别$$y_k$$中所有单词出现次数的总数$$N$$:

$$P_i{=}\frac{N_i}{N}$$

首先求出现总数,对于1类别文档,在a'中,就可得出总数为1+1+1+1+1+1=6,c'中,总共1+1+1+1=4,故在1类别文档中总共有10次

每个单词出现总数,假设是两个列表,a'+c'就能得出每个单词出现次数,比如$$P\left({w=python}\right){=}\frac{2}{10}{=}{0.20000000}$$,同样可以得到其它的单词概率。最终结果如下:

# 类别1文档中的词向量概率
p1 = [0.10000000,0.10000000,0.20000000,0.10000000,0,0.20000000,0,0,0.20000000,0.10000000]
# 类别0文档中的词向量概率
p0 = [0.16666667,0.16666667,0.16666667,0,0.16666667,0,0.16666667,0.16666667,0.16666667,0]

拉普拉斯平滑系数

为了避免训练集样本对一些特征的缺失,即某一些特征出现的次数为0,在计算$$P\left({X_1,X_2,X_3,...,X_n}\mid{Y_i}\right)$$的时候,各个概率相乘最终结果为零,这样就会影响结果。我们需要对这个概率计算公式做一个平滑处理:

$$P_i{=}\frac{N_i+\alpha}{N+\alpha*m}$$

其中$$m$$为特征词向量的个数,$$\alpha$$为平滑系数,当$$\alpha{=}1$$,称为拉普拉斯平滑

sklearn.naive_bayes.MultinomialNB

class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)""":param alpha:float,optional(default = 1.0)加法(拉普拉斯/ Lidstone)平滑参数(0为无平滑)"""

互联网新闻分类

读取20类新闻文本的数据细节

from sklearn.datasets import fetch_20newsgroupsnews = fetch_20newsgroups(subset='all')print news.data[0]

上述代码得出该数据共有18846条新闻,但是这些文本数据既没有被设定特征,也没有数字化的亮度。因此,在交给朴素贝叶斯分类器学习之前,要对数据做进一步的处理。

20类新闻文本数据分割

from sklearn.cross_validation import train_test_splitX_train,X_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25,random_state=42)

文本转换为特征向量进行TF特征抽取

from sklearn.feature_extraction.text import CountVectorizervec = CountVectorizer()
# 训练数据输入,并转换为特征向量
X_train = vec.fit_transform(X_train)
# 测试数据转换
X_test = vec.transform(X_test)

朴素贝叶斯分类器对文本数据进行类别预测

from sklearn.naive_bayes import MultinomialNB# 使用平滑处理初始化的朴素贝叶斯模型
mnb = MultinomialNB(alpha=1.0)# 利用训练数据对模型参数进行估计
mnb.fit(X_train,y_train)# 对测试验本进行类别预测。结果存储在变量y_predict中
y_predict = mnb.predict(X_test)

性能测试

  • 特点分析

朴素贝叶斯模型被广泛应用于海量互联网文本分类任务。由于其较强的特征条件独立假设,使得模型预测所需要估计的参数规模从幂指数量级想线性量级减少,极大的节约了内存消耗和计算时间。到那时,也正是受这种强假设的限制,模型训练时无法将各个特征之间的联系考量在内,使得该模型在其他数据特征关联性较强的分类任务上的性能表现不佳

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

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

相关文章

迪美特TVZ8双核智能高清播放器 在电视上编程不是梦

迪美特TVZ8双核智能高清播放器 两步让普通电视变云电视 独家VST: 全网聚合,极致体验:独家自主设计,炫丽生动的Win8风格UI界面: 新版VST全聚合是华人用户数最多的聚合平台软件,集合视频点播、网络直播…

LeetCode 1665. 完成所有任务的最少初始能量(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个任务数组 tasks ,其中 tasks[i] [actuali, minimumi] : actuali 是完成第 i 个任务 需要耗费 的实际能量。minimumi 是开始第 i 个任务前需要达到的最低能量。 比方说,如果任务为 [10, 12] 且你当…

sklearn分类器算法:逻辑回归及案例分析

分类算法之逻辑回归逻辑回归(Logistic Regression),简称LR。它的特点是能够是我们的特征输入集合转化为0和1这两类的概率。一般来说,回归不用在分类问题上,因为回归是连续型模型,而且受噪声影响比较大。如果…

词云(WordCloud)制作

以《神雕侠侣》为例,我们制作词云,看看有哪些高频词汇。 1. 导入一些包 # -*- coding:utf-8 -*- # Python Version: 3.7 # Time: 2020/11/27 19:32 # Author: Michael Ming # Website: https://michael.blog.csdn.net/ # File: word_cloud.py # Refere…

sklearn分类器性能评估

分类器性能评估在许多实际问题中,衡量分类器任务的成功程度是通过固定的性能指标来获取。一般最常见使用的是准确率,即预测结果正确的百分比。然而有时候,我们关注的是负样本是否被正确诊断出来。例如,关于肿瘤的的判定&#xff0…

构建iOS风格移动Web应用程序的8款开发框架

http://mobile.51cto.com/web-433992.htm转载于:https://www.cnblogs.com/daishuguang/p/3633409.html

sklearn分类器算法:决策树与随机森林及案例分析

分类算法之决策树决策树是一种基本的分类方法,当然也可以用于回归。我们一般只讨论用于分类的决策树。决策树模型呈树形结构。在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的集合。在决策树的结构中,每…

天池 在线编程 求和查找

文章目录1. 题目2. 解题1. 题目 来源:https://tianchi.aliyun.com/oj/164427478262600292/204998627646706400 2. 解题 暴力 哈希查找 class Solution { public:/*** param inputs: an integer array* param tests: an integer array* return: return true if s…

[转]python 中的字符串连接

python 中可使用 进行字符串的连接操作 但很多文档里都说,python 使用 进行字符串连接的效率低下 这直接导致本人在代码中不敢使用 进行字符串的连接操作 可事实又是怎样呢? 之所以说python 中使用 进行字符串连接的操作效率低下,是因为python中字符…

天池 在线编程 条件串(DP)

文章目录1. 题目2. 解题1. 题目 来源:https://tianchi.aliyun.com/oj/164427478262600292/204998627646706401 2. 解题 把字符串分成ace,bdf 两部分进行处理,求以某个字符结束时的最小删除次数 class Solution { public:/*** param s: wri…

用 Kaggle 经典案例教你用 CNN 做图像分类!

我们来看一个 Kaggle 上比较经典的一个图像分类的比赛 CIFAR( CIFAR-10 - Object Recognition in Images ),这个比赛现在已经关闭了,但不妨碍我们来去通过它学习一下卷积神经网络做图像识别的代码结构。相信很多学过深度学习的同学都尝试过这个比赛&…

ubuntu系统

作者简介: AndrewHudson是英国最大的Linux杂志LinuxFormat的一名定期自由撰稿人。他同时是Fedora5Unleashed一书的合著者。PaulHudson是一位专业的开发人员,FuturePublishing的一名全职新闻工作者。他经常为MacFormat、PC个Answers、PCFormat、PCPlus和LinuxFormat等…

Flask知识点回顾以及重点内容

1. HTTP通信与Web框架 1.1 流程 客户端将请求打包成HTTP的请求报文(HTTP协议格式的请求数据) 采用TCP传输发送给服务器端 服务器接收到请求报文后按照HTTP协议进行解析 服务器根据解析后获知的客户端请求进行逻辑执行 服务器将执行后的结果封装成HTTP的响…

C#操作AD的例子

一下连接中包含了使用c#对AD操作的各种列子 http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C#40 转载于:https://www.cnblogs.com/dereklovecc/p/3634537.html

机器学习回归算法—线性回归及案例分析

一、回归算法回归是统计学中最有力的工具之一。机器学习监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型、连续性而定义的。回归算法用于连续型分布预测,针对的是数值型的样本,使用回归,可以在给定…

LeetCode 1669. 合并两个链表

文章目录1. 题目2. 解题1. 题目 给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。 请你将 list1 中第 a 个节点到第 b 个节点删除,并将list2 接在被删除节点的位置。 下图中蓝色边和节点展示了操作后的结果: 请你返回结果…

机器学习回归算法—性能评估欠拟合与过拟合

机器学习中的泛化,泛化即是,模型学习到的概念在它处于学习的过程中时模型没有遇见过的样本时候的表现。在机器学习领域中,当我们讨论一个机器学习模型学习和泛化的好坏时,我们通常使用术语:过拟合和欠拟合。我们知道模…

Nginx安全配置

nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。nginx一般是把请求发fastcgi管理进程处理,fastcgi管理进程选择cgi子进程处理结果并返回…

LeetCode 1670. 设计前中后队列(deque)

文章目录1. 题目2. 解题1. 题目 请你设计一个队列,支持在前,中,后三个位置的 push 和 pop 操作。 请你完成 FrontMiddleBack 类: FrontMiddleBack() 初始化队列。 void pushFront(int val) 将 val 添加到队列的 最前面 。 void…

java 1.7 新特性

1.对Java集合(Collections)的增强支持 在JDK1.7之前的版本中,Java集合容器中存取元素的形式如下: 以List、Set、Map集合容器为例: 在JDK1.7中,摒弃了Java集合接口的实现类,如:ArrayL…