scikit-learn学习之贝叶斯分类算法
版权声明:<—— 用心写好你的每一篇文章,转载请注明出处@http://blog.csdn.net/gamer_gyt <——
本系列博客主要参考 Scikit-Learn 官方网站上的每一个算法进行,并进行部分翻译,如有错误,请大家指正
转载请注明出处,谢谢
======================================================================
另外在《机器学习实战》中的 朴素贝叶斯分类算法比较深刻的解读了朴素贝叶斯分类算法的原理,基于朴素贝叶斯分类算法构建文本分类器的Python实现主要用Python实现贝叶斯分类,并构建了一个简单的文本分类器模型,接下来将着重解读scikit-learn中关于贝叶斯算法的一些说明
1:朴素贝叶斯算法说明
2:高斯朴素贝叶斯(Gaussian Naive Bayes)
3:多项式朴素贝叶斯(Multinomial Naive Bayes)
4:伯努利朴素贝叶斯( Bernoulli Naive Bayes)
一:朴素贝叶斯算法说明
朴素贝叶斯算法是建立在每一个特征值之间时独立的基础上的监督学习分类算法,而这也是称他为 “朴素”贝叶斯的缘由,在现实环境中,很难达到两个特征值之间绝对的相互独立。在给定一个类变量Y和依赖的特征向量x_1通过x_n,贝叶斯定理的状态下面的关系:
假设两个特征值之间时相互独立的
对于所有的 i 值,这种关系被简化为
由于P(x_1,.... ,x_n)是恒定的给定的输入,我们可以使用以下的分类规则(前者正比于后者):
我们可以使用最大后验概率(MAP)来估计p(y)和p(xi|y),p(y)是在训练集中y发生的概率
不同朴素贝叶斯分类算法是因为他们对P(Xi|y)做出了不同的假设
尽管朴素贝叶斯的假设过于简单,但在已有的应用中,如文档分类和垃圾邮件分类,他都表现出了相当好的效果(至于理论上的原因,为什么朴素贝叶斯的效果很好,并且他适合处理的数据类型,请继续往下阅读)
和其他更先进的方法相比,朴素贝叶斯算法学习和分类的过程效率更高,每个类条件特征的独立分布意味着每个类分布可以独立的估计为一维分布,这反过来有助于缓解数据降维所带来的麻烦
另一方面,尽管朴素贝叶斯分类被归纳为一个高效的分类器,但是他有一个坏的估计,因为对于他的输出预测并不能被认真看待
上边提到了不同的贝叶斯分类算法是因为他们对P(Xi|y)做出了不同的假设,下面我们就来看集中常见的P(Xi|y)的假设以及scikit-learn中的实现方法
二:高斯朴素贝叶斯
GaussianNB
继承高斯朴素贝叶斯,特征可能性被假设为高斯:
代码示例如下:
- #高斯朴素贝叶斯
- import numpy as np
- X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
- Y = np.array([1, 1, 1, 2, 2, 2])
- from sklearn.naive_bayes import GaussianNB
- clf = GaussianNB().fit(X, Y)
- print clf.predict([[-0.8,-1]])
- '''''
- partial_fit说明:增量的训练一批样本
- 这种方法被称为连续几次在不同的数据集,从而实现核心和在线学习,这是特别有用的,当数据集很大的时候,不适合在内存中运算
- 该方法具有一定的性能和数值稳定性的开销,因此最好是作用在尽可能大的数据块(只要符合内存的预算开销)
- '''
- clf_pf = GaussianNB().partial_fit(X, Y, np.unique(Y))
- print clf_pf.predict([[-0.8,-1]])
输出结果为:
更多关于高斯贝叶斯分布的请参考:点击阅读
三:多项式分布
MultinomialNB
实现multinomially分布数据的贝叶斯算法,是一个经典的朴素贝叶斯文本分类中使用的变种(其中的数据是通常表示为词向量的数量,虽然TF-IDF向量在实际项目中表现得很好),对于每一个y来说,分布通过向量参数化,n是类别的数目(在文本分类中,表示词汇量的长度)
表示标签i出现的样本属于类别y的概率
该参数 是一个平滑的最大似然估计,即相对频率计数:
表示标签i在样本集T中属于类别y的 数目
表示在所有标签中类别y出现的数目
平滑先验 a >=0表示学习样本中不存在的特征并防止在计算中概率为0,设置alpha = 1被称为拉普拉斯平滑,当α<1称为Lidstone平滑
代码示例如下:
- #多项式分布
- import numpy as np
- X = np.random.randint(5, size=(6, 100))
- y = np.array([1, 2, 3, 4, 5, 6])
- from sklearn.naive_bayes import MultinomialNB
- clf = MultinomialNB().fit(X, y)
- print clf.predict(X[2:3])
输出为 [3]
更多关于多项式分布请参考:点击阅读
四:伯努利朴素贝叶斯
BernoulliNB
实现了朴素贝叶斯训练和分类算法是根据多元伯努利分布的分布数据;例如,可能会有多个特征,但每一个被假定为一个二进制值(伯努利、布尔)变量。因此,这类要求的样品被表示为二进制值的特征向量;如果交给其他任何类型的数据,一个bernoullinb实例可以进行输入(取决于二值化参数)
伯努利朴素贝叶斯决策规则的基础上
在文本分类的情况下,词的出现向量(而不是字计数向量)可以用来训练和使用该分类。bernoullinb可能会执行一些数据集上的更好,尤其是那些短的文件。如果时间允许的话,建议对两种模型进行评估。
示例代码如下:
- #伯努利分布
- import numpy as np
- X = np.random.randint(2, size=(6, 100))
- Y = np.array([1, 2, 3, 4, 4, 5])
- from sklearn.naive_bayes import BernoulliNB
- clf = BernoulliNB()
- clf.fit(X, Y)
- BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
- print(clf.predict(X[2:3]))
输出结果为 [3]
更多关于伯努利朴素贝叶斯请参考:点击阅读
scikit-learn学习之贝叶斯分类算法的更多相关文章
- 机器学习-scikit learn学习笔记
scikit-learn官网:http://scikit-learn.org/stable/ 通常情况下,一个学习问题会包含一组学习样本数据,计算机通过对样本数据的学习,尝试对未知数据进行预测. 学习 ...
- 从决策树学习谈到贝叶斯分类算法、EM、HMM --别人的,拷来看看
从决策树学习谈到贝叶斯分类算法.EM.HMM 引言 最近在面试中,除了基础 & 算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然,这完全 ...
- 从决策树学习谈到贝叶斯分类算法、EM、HMM
从决策树学习谈到贝叶斯分类算法.EM.HMM (Machine Learning & Recommend Search交流新群:172114338) 引言 log ...
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- TensorFlow入门学习(让机器/算法帮助我们作出选择)
catalogue . 个人理解 . 基本使用 . MNIST(multiclass classification)入门 . 深入MNIST . 卷积神经网络:CIFAR- 数据集分类 . 单词的向量 ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- 在Object-C中学习数据结构与算法之排序算法
笔者在学习数据结构与算法时,尝试着将排序算法以动画的形式呈现出来更加方便理解记忆,本文配合Demo 在Object-C中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...
随机推荐
- 使用 awstats 分析 Nginx 的访问日志(IBM)
前言 在我的上一篇文章<使用 Nginx 提升网站访问速度>中介绍了 Nginx 这个 HTTP 服务器以及如何通过它来加速网站的访问速度.在实际的网站运营中,我们经常需要了解到网站的访问 ...
- C语言终极面试及答案分析
第一部分:基本概念及其它问答题 .关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: ). 在函数体,一个被声明为静态的变量在这一函数 ...
- android sdk 编译--如何将源代码加入android.jar,以及make原理
首先是这个问题如何修改. 在/frameworks/base/Android.mk中,找到如下行:packages_to_document :=在该变量的赋值语句最后添加xxxxx (这里是你的包的名 ...
- 对于“Newtonsoft.Json”已拥有为“NETStander.Library”定义的依赖项,解决办法
问题描述: 在使用visual studio中的NuGet包管理下载程序时,有时会出现-对于“Newtonsoft.Json”已拥有为“NETStander.Library”定义的依赖项,这样的错误. ...
- ASP.NET Core Linux环境安装并运行项目
原文地址:https://blog.csdn.net/u014368040/article/details/79192622 一 安装环境 1. 从微软官网下载 Linux版本的.NetCoreSd ...
- MVC图片上传详解 IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS C#中Enum用法小结 表达式目录树 “村长”教你测试用例 引用provinces.js的三级联动
MVC图片上传详解 MVC图片上传--控制器方法 新建一个控制器命名为File,定义一个Img方法 [HttpPost]public ActionResult Img(HttpPostedFile ...
- 基于matplotlib的数据可视化 - 柱状图bar
柱状图bar 柱状图常用表现形式为: plt.bar(水平坐标数组,高度数组,宽度比例,ec=勾边色,c=填充色,label=图例标签) 注:当高度值为负数时,柱形向下 1 语法 bar(*args, ...
- SQL Performance Analyzer
SQL Performance Analyzer 系统发生变更,比如升级数据库.增加索引,都会可能导致sql的执行计划发生改变,从而影响sql的性能. 如果能预知系统变更会对sql的性能的影响,就可以 ...
- mysql-1045(28000)错误
说明:win7系统,已经装过一个安装版的mysql(服务没有启动),然后又安装了一个免安装版的mysql,然后启动该免安装版的mysql后,用root用户无法登陆(因为想着root用户默认密码是空,但 ...
- jsp学习小记