用scikit-learn实现朴素贝叶斯分类器 转
原文:http://segmentfault.com/a/1190000002472791
朴素贝叶斯(Naive Bayes Classifier)是一种「天真」的算法(假定所有特征发生概率是独立的),同时也是一种简单有效的常用分类算法。关于它的原理,参见朴素贝叶斯分类器的应用。
scikit-learn是一个广泛应用的机器学习Python库,它封装了包括朴素贝叶斯在内的若干基础算法。在这篇博客里,我们希望用朴素贝叶斯实现对短文本(新闻标题)的分类。
朴素贝叶斯属于有监督分类,需要获取一批已标注的数据作为训练和测试分类器的样本。样本的获取,一般通过人工标注或网页抓取的方式。这里先准备好2w条已标注的新闻标题(共10个标签,每个标签下的样本是均衡的),并以3:1的比例切分训练集和测试集。文本的格式如下:
娱乐\t组图:刘亦菲短裙秀腿 浓妆变冷艳时髦女
其次,将短文本转化为一个多维向量,这涉及到两个问题:一是分词,由于scikit-learn内置的分词器并不支持中文,所以需要指定一个tokenizer(推荐结巴分词);二是文本到向量的转化方法,考虑到后续可能加大训练集的数量,而短文本的特征相对稀疏,采用了内存占用率较低、仅计算词频的HashingVectorizer
。
这里要注意两点:
- 测试集和训练集只有共用一个vectorizer
才能共享vocabulary
,避免特征表达不一致的问题。
- fit_transform
如果用toarray()
转化为dense矩阵,计算至少慢两倍以上。
# non_negative=True -- 模型仅包含非负值
vectorizer = HashingVectorizer(tokenizer=comma_tokenizer, non_negative=True)
train_data = vectorizer.fit_transform(train_words)
test_data = vectorizer.fit_transform(test_words)
然后,我们创建一个多项式的朴素贝叶斯分类器(适用于离散特征的分类),分别输入训练集的文本和标签(要求都为numpy矩阵)进行训练,训练好的分类器再用在测试集文本的分类,以检验分类器的性能。
# alpha -- 模型的平滑参数
clf = MultinomialNB(alpha=0.01)
clf.fit(train_data, numpy.asarray(train_tags))
pred = clf.predict(test_data)
最后,比较分类器的预测结果和测试集的真实标签,得到分类器的准确率和召回率。
m_precision = metrics.precision_score(actual, pred)
m_recall = metrics.recall_score(actual, pred)
完整代码请见sci_classifier.py。
从测试的结果来看,准确率和召回率均在8成以上,当然,分类器的性能也依赖于输入数据对应不同类别的可识别度是否足够强。
用scikit-learn实现朴素贝叶斯分类器 转的更多相关文章
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种, ...
- 十大经典数据挖掘算法(9) 朴素贝叶斯分类器 Naive Bayes
贝叶斯分类器 贝叶斯分类分类原则是一个对象的通过先验概率.贝叶斯后验概率公式后计算,也就是说,该对象属于一类的概率.选择具有最大后验概率的类作为对象的类属.现在更多的研究贝叶斯分类器,有四个,每间:N ...
- 机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)
朴素贝叶斯分类器是一组简单快速的分类算法.网上已经有很多文章介绍,比如这篇写得比较好:https://blog.csdn.net/sinat_36246371/article/details/6014 ...
- 朴素贝叶斯分类器及Python实现
贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据 ...
- 朴素贝叶斯分类器(Naive Bayes)
1. 贝叶斯定理 如果有两个事件,事件A和事件B.已知事件A发生的概率为p(A),事件B发生的概率为P(B),事件A发生的前提下.事件B发生的概率为p(B|A),事件B发生的前提下.事件A发生的概率为 ...
- 朴素贝叶斯分类器的应用 Naive Bayes classifier
一.病人分类的例子 让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难. 某个医院早上收了六个门诊病人,如下表. 症状 职业 疾病 打喷嚏 护士 感冒 打喷嚏 农夫 过敏 头痛 建筑工 ...
- PGM学习之三 朴素贝叶斯分类器(Naive Bayes Classifier)
介绍朴素贝叶斯分类器的文章已经很多了.本文的目的是通过基本概念和微小实例的复述,巩固对于朴素贝叶斯分类器的理解. 一 朴素贝叶斯分类器基础回顾 朴素贝叶斯分类器基于贝叶斯定义,特别适用于输入数据维数较 ...
- (数据科学学习手札30)朴素贝叶斯分类器的原理详解&Python与R实现
一.简介 要介绍朴素贝叶斯(naive bayes)分类器,就不得不先介绍贝叶斯决策论的相关理论: 贝叶斯决策论(bayesian decision theory)是概率框架下实施决策的基本方法.对分 ...
- 记intel杯比赛中各种bug与debug【其五】:朴素贝叶斯分类器的实现和针对性的优化
咱这个项目最主要的就是这个了 贝叶斯分类器用于做可以统计概率的二元分类 典型的例子就是垃圾邮件过滤 理论基础 对于贝叶斯算法,这里附上两个链接,便于理解: 朴素贝叶斯分类器的应用-阮一峰的网络日志 基 ...
随机推荐
- 022 UFT虚拟对象
虚拟对象: 程序中那些行为标准类型对象的对象,但不能被QTP识别,则可把这些对象类型称为虚拟对象.并且映射到某类标准对象,例如button,check box等,QTP在测试过程中就会对这些虚拟对象模 ...
- web自动化框架之一介绍与环境搭建(Selenium+Eclipse+Python)
看到一篇环境搭建文章,详细又全面,这里就不一一重复了 http://blog.csdn.net/dyllove98/article/details/9390649 其它: 1.框架介绍 整个 ...
- Fedora22(Gnome桌面)安装Chrome
1.从官网上(http://www.google.cn/chrome/)下载到相对应系统版本的rpm包.这里我的是: google-chrome-stable_current_x86_64.rpm 此 ...
- 你认为你很了解Javascript?
(翻译不当之处请谅解) 来源:http://www.ido321.com/914.html 这里有5个小脚本,有助于你真正理解JavaScript核心–闭包和作用域.没有在控制台运行之前,尝试回答每个 ...
- Javascript手记-基本类型和引用类型
1:ecmascript包含2中不同的数据类型,基本数值类型和引用数值类型.基本数据类型是简单的数据段,引用类型是指那些可能由多个值构成的对象. 1.1:常用的基本类型:Undefined,Null, ...
- Ensemble learning(集成学习)
集成学习:是目前机器学习的一大热门方向,所谓集成学习简单理解就是指采用多个分类器对数据集进行预测,从而提高整体分类器的泛化能力. 我们在前面介绍了.所谓的机器学习就是通过某种学习方法在假设空间中找到一 ...
- linux常用命令[持续更新]
top 察看系统状态,退出按q ps -A 察看所有进程 ps -A|grep gcalc|awk '{print $1}'|xargs kill 杀掉所有gcalc进程
- memcache和memcahced区别
在写这篇文章之前一直对memcache .memcahced模糊,相差一个字母,特此总结下: Memcache是什么? Memcache是一个自由和开放源代码.高性能.分配的内存对象缓存系统.用于加速 ...
- Delphi使用TStringHash实现建立类(有点像反射)
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- HDU 3072 Intelligence System (强连通分量)
Intelligence System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...