R&python机器学习之朴素贝叶斯分类
朴素贝叶斯算法描述应用贝叶斯定理进行分类的一个简单应用。这里之所以称之为“朴素”,是因为它假设各个特征属性是无关的,而现实情况往往不是如此.
贝叶斯定理也称贝叶斯推理,早在18世纪,英国学者贝叶斯(1702~1763)曾提出计算条件概率的公式用来解决如下一类问题:假设B[1],B[2]…,B[n]互斥且构成一个完全事件,已知它们的概率P(B[i]),i=1,2,…,n,现观察到某事件A与B[,1],B[,2]…,B[,n]相伴随机出现,且已知条件概率P(A/B[,i]),求P(B[,i]/A)。
关于这点建议大家去看《概率论与数理统计》。
贝叶斯定理在检测吸毒者时很有用。假设一个常规的检测结果的敏感度与可靠度均为99%,也就是说,当被检者吸毒时,每次检测呈阳性(+)的概率为99%。而被检者不吸毒时,每次检测呈阴性(-)的概率为99%。从检测结果的概率来看,检测结果是比较准确的,但是贝叶斯定理却可以揭示一个潜在的问题。假设某公司将对其全体雇员进行一次鸦片吸食情况的检测,已知0.5%的雇员吸毒。我们想知道,每位医学检测呈阳性的雇员吸毒的概率有多高?令“D”为雇员吸毒事件,“N”为雇员不吸毒事件,“+”为检测呈阳性事件。可得
- P(D)代表雇员吸毒的概率,不考虑其他情况,该值为0.005。因为公司的预先统计表明该公司的雇员中有0.5%的人吸食毒品,所以这个值就是D的先验概率。
- P(N)代表雇员不吸毒的概率,显然,该值为0.995,也就是1-P(D)。
- P(+|D)代表吸毒者阳性检出率,这是一个条件概率,由于阳性检测准确性是99%,因此该值为0.99。
- P(+|N)代表不吸毒者阳性检出率,也就是出错检测的概率,该值为0.01,因为对于不吸毒者,其检测为阴性的概率为99%,因此,其被误检测成阳性的概率为1-99%。
- P(+)代表不考虑其他因素的影响的阳性检出率。该值为0.0149或者1.49%。
我们可以通过全概率公式计算得到:此概率 = 吸毒者阳性检出率(0.5% x 99% = 0.495%)+ 不吸毒者阳性检出率(99.5% x 1% = 0.995%)。P(+)=0.0149是检测呈阳性的先验概率。用数学公式描述为:
P(+)=p(+,D)+P(+,N)=P(+|D)P(D)+P(+|N)P(N)
根据上述描述,我们可以计算某人检测呈阳性时确实吸毒的条件概率P(D|+):
P(D|+)=P(+|D)P(D)/P(+)=P(+|D)P(D)/(P(+|D)P(D)+P(+|N)P(N))=0.99*0.005/(0.99*0.005+0.01*0.995)=0.3322
尽管我们的检测结果可靠性很高,但是只能得出如下结论:如果某人检测呈阳性,那么此人是吸毒的概率只有大 约33%,也就是说此人不吸毒的可能性比较大。我们测试的条件(本例中指D,雇员吸毒)越难发生,发生误判的可能性越大。
该算法的优缺点:
优点 | 缺点 |
简单、快速有效 | 依赖于常用的错误假设,即一样的重要性和独立特征 |
能处理好噪声数据和缺失的数据 | 应用在含有大量数值特征的数据集时并不理想 |
需要用来训练的例子相对较少,但同样能处理好大量的例子 | 概率的估计值相对于预测的类而言更加不可靠 |
很容易获得一个预测的估计值 |
在R语言中,有2个包可以实现朴素贝叶斯分类,分别是e1071和klaR。二者具体有什么差别,本人尚未仔细研究。下面利用e1071包实现朴素贝叶斯分类:
library(e1071) data("iris") samples <- sample(nrow(iris),size = round(nrow(iris)*0.8),replace = F) iris_train <- iris[samples,] iris_train <- iris_train[,1:4] iris_test <- iris[-samples,] iris_test <- iris_test[,1:4] iris_train_labels <- iris[samples,5] iris_test_labels <- iris[-samples,5] classifier <- naiveBayes(iris_train,iris_train_labels) pre <- predict(classifier,iris_test) #传入参数为data.frame TF <- table(pre,iris_test_labels) accuracy <- (sum(diag(TF))/sum(TF)) cat("正确率",accuracy)
python版:
from sklearn import datasets iris = datasets.load_iris() from sklearn.naive_bayes import GaussianNB clf = GaussianNB() clf.fit(iris.data, iris.target) clf.predict(iris.data[0])
R&python机器学习之朴素贝叶斯分类的更多相关文章
- Python数据科学手册-机器学习:朴素贝叶斯分类
朴素贝叶斯模型 朴素贝叶斯模型是一组非常简单快速的分类方法,通常适用于维度非常高的数据集.因为运行速度快,可调参数少.是一个快速粗糙的分类基本方案. naive Bayes classifiers 贝 ...
- Python机器学习算法 — 朴素贝叶斯算法(Naive Bayes)
朴素贝叶斯算法 -- 简介 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法.最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Baye ...
- 吴裕雄--天生自然python机器学习:朴素贝叶斯算法
分类器有时会产生错误结果,这时可以要求分类器给出一个最优的类别猜测结果,同 时给出这个猜测的概率估计值. 概率论是许多机器学习算法的基础 在计算 特征值取某个值的概率时涉及了一些概率知识,在那里我们先 ...
- R语言学习笔记—朴素贝叶斯分类
朴素贝叶斯分类(naive bayesian,nb)源于贝叶斯理论,其基本思想:假设样本属性之间相互独立,对于给定的待分类项,求解在此项出现的情况下其他各个类别出现的概率,哪个最大,就认为待分类项属于 ...
- (数据科学学习手札30)朴素贝叶斯分类器的原理详解&Python与R实现
一.简介 要介绍朴素贝叶斯(naive bayes)分类器,就不得不先介绍贝叶斯决策论的相关理论: 贝叶斯决策论(bayesian decision theory)是概率框架下实施决策的基本方法.对分 ...
- 《机器学习实战》基于朴素贝叶斯分类算法构建文本分类器的Python实现
============================================================================================ <机器学 ...
- 机器学习之路: python 朴素贝叶斯分类器 MultinomialNB 预测新闻类别
使用python3 学习朴素贝叶斯分类api 设计到字符串提取特征向量 欢迎来到我的git下载源代码: https://github.com/linyi0604/MachineLearning fro ...
- 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)
机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...
- 朴素贝叶斯分类法 Naive Bayes ---R
朴素贝叶斯算法 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 勿忘初心 无畏未来 作为一个初学者,水平有限,欢迎交流指正. 朴素贝叶斯分类法 ...
随机推荐
- 141. Linked List Cycle【easy】
141. Linked List Cycle[easy] Given a linked list, determine if it has a cycle in it. Follow up:Can y ...
- android-studio于java相关
1.安装和配置 在安装完成android-studio后,启动,配置project structure.包括SDK.JDK等,此开发工具需要自行下好,软件无自带. 配置完成后,通过:File--& ...
- Visual Studio 调试小技巧-从查看窗口得到更多信息(转)
原文地址:http://blog.csdn.net/cadcisdhht/article/details/5651488
- Easyui Form增加myLoad方法,使其支持二级数据对象
$.extend($.fn.form.methods, { myLoad : function (jq, param) { return jq.each(function () { load(this ...
- Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成
Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下: Web 模块提供面向web的基本功能和面向web的应用上下文,比如多部分(multipa ...
- Android无线测试之—Genymotion模拟器环境搭建
genymotion是一款号称速度最快性能最好的android模拟器,它基于Oracle VM VirtualBox.支持GPS.重力感应.光.温度等诸多传感器:支持OpenGL 3D加速:电池电量模 ...
- 48、ViewFlow ---- 滑动广告页
<!-- main.xml --> <?xml version="1.0" encoding="utf-8"?> <LinearL ...
- NoSQL-MongoDB with python
前言: MongoDB,文档存储型数据库(document store).NoSQL数据库中,它独占鳌头,碾压其他的NoSQL数据库. 使用C++开发的,性能仅次C.与redis一样,开源.高扩展.高 ...
- javascript获取客户端默认打印机
JS <script language="javascript"> function startRequest() { var oShell = new ActiveX ...
- JAVA性能调试+JProfiler使用相关
一.JProfiler下载.安装与激活 1.1 下载 直接官网下载(https://www.ej-technologies.com/download/jprofiler/files) 建议下载9.X系 ...