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中学习数据结构与算法之排序算法阅读更佳. 目录 选择排序 冒泡排序 插入排序 快速 ...
随机推荐
- 重写Checkbox 改写选择框的大小
/* 作者:Starts_2000 * 日期:2009-07-30 * 网站:http://www.csharpwin.com CS 程序员之窗. * 你可以免费使用或修改以下代码,但请保留版权信息. ...
- 配置Hadoop1.2.1
1.从Apache官网上下载1.2.1,地址:http://apache.dataguru.cn/hadoop/common/2.拷贝文件到虚拟机下(vm9下直接拖拽就可以)3.到Hadoop的目录下 ...
- 【Android】详解Android的menu菜单
在软件应用过程中,菜单的存在是必不可少的,我这次讲一下,我对android菜单的一个基础做法吧 Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Men ...
- JsonPath小结
在查看DHC Assertions 模块说明的时候,无意间发现assert模块中JsonBody使用了 JSON Path ,兴趣使然,看了下,发现是类似解析xml用到的 XPath.通过路径来获取j ...
- atom介绍
在公司微信群,看到activate-power-mode插件的效果,很绚丽,才知道github自己出了一个自己的编辑器atom 官网地址 https://atom.io 官网看了下,atom编辑器的特 ...
- 通过Stetho在Chrome上调试Android App
引 入依赖包 compile 'com.facebook.stetho:stetho:1.3.1' 初始化一下 public class MyApplication extends Applicati ...
- Smarty标签运算,控制结构[if,for,foreach,section,while]
Smarty标签运算: 在页面上做简单的运算[temp5.html] 条件判断if 循环结构 for foreach用得比较多,foreach例子从数据库取出的数据 section功能和foreach ...
- 【转】Tesla Autopilot
Tesla Autopilot 以下内容是<Tesla Model S的设计失误>一文中新加入的小节.由于写作时间相距太远,而且由于它的时效性,现在也把它单独提出来,独立成文. 两个月前, ...
- python 2 python3 共存
步骤: 1.安装python3 并添加环境变量2.修改python3 目录下文件名:修改python.exe 为python3.exe, 修改pythonw.exe 为pythonw3.exe C:\ ...
- 解决Myeclipse中导入自定义的配色方案后,JSP中的js代码块为白色背景的问题
捣鼓了大半个上午,终于搞定.这样设置就可以了: 点击MyEclipse上方的菜单栏中的window菜单.选择Preferences菜单项.在弹出的窗口的左侧树形菜单依次选择:MyEclipse.Fil ...