贝叶斯算法是一个典型的统计概率学算法,里面涉及到较多的统计学概念,贝叶斯分类器和贝叶斯网络也是以这个算法作为理论基础。先来看看几个绕不过去的统计学概念:

先验概率:事件发生前的预判概率,可以是基于历史数据统计,也可以由背景常识得出,一般是单独事件概率,如P(A) - 这个幼儿园男孩比例是多少、P(B)-这个幼儿园女孩比例是多少。

后验概率:事件发生后求的反向条件概率,在给定条件C以后,A发生的概率 P(A|C)- 有一个小孩会唱歌,请问他(她)是男孩的概率有多大(幼儿园中1/2的男孩会唱歌,2/3的女孩会唱歌)。

极大似然估计:就是利用已知的样本结果信息,反推最具可能(最大概率)导致这些样本结果出现的模型参数值。

贝叶斯分类的原理就是通过先验概率,利用贝叶斯公式计算出后验概率,选择最大后验概率所对应的分类结果。

经典贝叶斯公式:

P(w)为先验概率,表示每种类别分布的概率;

P(x|w)为类条件概率,表示在某种类别前提下,某事发生的概率;

P(x)是用于归一化的证据因子,对于给定样本,证据因子与类标记无关;

P(w|x)为后验概率,表示某事已经发生了,它属于某一类别的概率,我们就是要找出后验概率最大的类别,作为分类的结果。

我们来看一个简单的例子:已知,在幼儿园中,会唱歌的男孩占男孩总数的1/2,会唱歌的女孩占女孩总数的2/3,并且幼儿园中男女比例为2:1,试问一个会唱歌的小孩为男孩和女孩的概率各为多少?

假设: w1=男孩,w2=女孩,x=会唱歌

先验概率 P(w1)=2/3,P(w2)=1/3

类条件概率 P(x|w1)=1/2, P(x|w2)=2/3

男孩和女孩会唱歌相互独立,P(x)= P(x|w1)P(w1) +  P(x|w2)P(w2) = 5/9

根据贝叶斯公式计算出男孩和女孩的概率分别是60%和40%。(如果只考虑分类问题,只需要比较后验概率的大小,不用计算具体的值,所以P(x)的取值不重要)

通过上面的例子,我们就把通过贝叶斯公式进行分类的问题简化为通过训练数据来估计先验概率P(w)和类条件概率P(x|w)。

P(w)表达的是样本空间内各类样本所占的比例,通过简单的统计就可以计算出来,关键是类条件概率P(x|w)怎么确定。但类条件概率的估计非常困难,因为这是一个涉及到w所有属性的联合概率,但我们的数据量有限,不是所有样本取值都在数据集中出现,直接根据样本出现的频率来确定类条件概率P(x|w)会产生较大的偏差。

那怎么确定类条件概率呢,这里就要引入“极大似然估计”方法了,这是一种参数估计的方法:先假定其具有某种确定的概率分布形式(概率模型),再基于训练样本对概率分布的参数进行估计,简单来说,就是“先确定概率模型,再根据数据训练找到使得概率最大的模型参数”。

对于P(x|a)这个函数,x表示某一个具体的数据,a表示模型的参数。

如果a是已知的,x是变量,这个函数叫做概率函数,它描述对于不同的样本点x,其出现的概率是多少;

如果x是已知的,a是变量,这个函数叫做似然函数,它描述对于不同的模型参数,出现x这个样本点的概率是多少。我们需要求解的是后一种情况,所以这个过程叫做“极大似然估计”

-- 朴素贝叶斯分类

朴素贝叶斯假设所有属性相互独立,各属性独立地对分类结果发生影响,互不干扰。

朴素贝叶斯分类的基本过程:

1、数据集 X = {a1,a2,.....  am}为待分类项,每个a为数据集X的一个特征属性;

2、有类别集合C = {y1,y2,... yn}

3、计算类条件概率 P(y1|x),P(y2|x),..... P(yn|x)

4、判断如果 P(yk|x)= max{P(y1|x),P(y2|x),..... P(yn|x)},则x属于yk

整个过程的难点在于第三步,计算各个类的条件概率,根据贝叶斯定理和朴素贝叶斯的假设,贝叶斯公式可以转化为如下表示:

(1)离散特征值处理

当特征属性为离散值时,P(x=xi|Y=c)= Dc,xi/Dc

Dc,xi: 类别为c中属性xi=x的样本总数

Dc:类别为c的样本总数

(2)连续特征值处理

假设连续变量服从某种概率分布(假设概率模型),然后使用训练数据估计概率模型的参数。

假设特征变量符合高斯分布,对于每个类别yi,特征属性Xi的类条件概率为:

其中和分别是第i类样本在第j个属性上取值的均值和方差,极大似然估计就是估计这两个参数。

朴素贝叶斯常用的几个模型分别为:

1、高斯模型(多用于连续值);

2、多项式模型(多用于离散值);

3、伯努利模型(也用于离散特征中,但每个特征的取值只能是0或1)

-- 朴素贝叶斯特点:

优点:

1、发源于古典数学理论,效率较高;

2、对小规模数据训练效果较好,适合多分类任务,适合增量训练;

3、算法简单,易于实现,常用于文本分类;

缺点:

1、朴素贝叶斯假设属性之间相互独立,但在实际情况中,属性较多或者属性相关性较大时,分类效果不好;

2、需要先假设先验概率,假设的模型有很多种,可能会由于选择的概率模型的原因导致分类效果不佳。

-- sklearn朴素贝叶斯分类

用20twenty news数据集为例进行文本分类的练习 ,一共20个新闻类别,20000篇新闻数据,利用朴素贝叶斯算法进行模型训练,示例代码如下:

-Python 代码

from sklearn import metrics
from sklearn.datasets import load_files
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
import numpy as np#################### 20twenty_new ##########################
# categories = ['alt.atheism', 'soc.religion.christian', 'comp.graphics', 'sci.med']
twenty_train = load_files("20news-bydate-train", shuffle=True, encoding='latin1',random_state=42)
twenty_test = load_files("20news-bydate-test", shuffle=True, encoding='latin1',random_state=42)
count = CountVectorizer()
tfidf_transformer = TfidfTransformer()count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(twenty_train.data)tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)'''
使用朴素贝叶斯分类(多项式分布),并做出简单的预测
'''
clf_Multi = MultinomialNB().fit(X_train_tfidf, twenty_train.target)docs_test = twenty_test.data
X_test_counts = count_vect.transform(docs_test)
X_test_tfidf = tfidf_transformer.transform(X_test_counts)
predicted = clf_Multi.predict(X_test_tfidf)print(metrics.classification_report(twenty_test.target, predicted, target_names=twenty_test.target_names))
print("accurary\t" + str(np.mean(predicted == twenty_test.target)))
=======================================================================precision   recall   f1-score   supportalt.atheism       0.80      0.52      0.63       319comp.graphics       0.81      0.65      0.72       389comp.os.ms-windows.misc       0.82      0.65      0.73       394
comp.sys.ibm.pc.hardware       0.67      0.78      0.72       392comp.sys.mac.hardware       0.86      0.77      0.81       385comp.windows.x       0.89      0.75      0.82       395misc.forsale       0.93      0.69      0.80       390rec.autos       0.85      0.92      0.88       396rec.motorcycles       0.94      0.93      0.93       398rec.sport.baseball       0.92      0.90      0.91       397rec.sport.hockey       0.89      0.97      0.93       399sci.crypt       0.59      0.97      0.74       396sci.electronics       0.84      0.60      0.70       393sci.med       0.92      0.74      0.82       396sci.space       0.84      0.89      0.87       394soc.religion.christian       0.44      0.98      0.61       398talk.politics.guns       0.64      0.94      0.76       364talk.politics.mideast       0.93      0.91      0.92       376talk.politics.misc       0.96      0.42      0.58       310talk.religion.misc       0.97      0.14      0.24       251avg / total       0.82      0.77      0.77      7532accurary 0.77389803505

作者:华为云专家周捷

@All开发者,想获取满满的技术干货吗?想了解最前沿的技术洞察吗?想得到最权威的学习认证吗?还有多维的交流平台以及有趣的有奖互动?

2020年华为开发者大会将于2月11-12日在深圳举办,这将是华为面向开发者群体的最顶级盛会,包含但不限于华为在云计算、人工智能、5G、IoT等多个领域,特别是智能计算双引擎鲲鹏和昇腾的最新创新与最佳实践,充满期待对吧,欢迎报名预约!

【华为云分享】机器学习笔记(七) ---- 贝叶斯分类相关推荐

  1. 【我的物联网成长记7】物联网主流通信协议解读【华为云分享】

    [摘要] 当今物联网的主流通信协议是CoAP/LWM2M协议和MQTT协议,本文将会为您分别解读这些协议的工作方式,了解它们的特点,助您选择最适合您的设备的通信协议. 通信协议又称为传输协议,用于定义 ...

  2. 如何通过虚拟私有云保障服务安全【华为云分享】

    在第十六课的时候,我们一起学习了如何规划网络,部署云上业务.当您在云上部署了自己的服务后,接下来就要考虑如何保障服务的安全性了. 比如说,绑定了EIP的ECS仅允许访问公网,但不允许被公网用户访问. ...

  3. 3分钟创建一个游戏类容器应用【华为云分享】

    [摘要] 云容器引擎(Cloud Container Engine)新手课堂 - 本期导读:3分钟创建一个2048游戏类容器应用. 在学习本期CCE新手课堂前,建议您先学习以下课程: 1. CCE基本 ...

  4. 把区块链作为核心技术自主创新重要突破口:华为云可以做什么?【华为云分享】

    在近日上海举行的2019 QCon全球软件开发大会上,华为云区块链高级产品经理王磊在华为云技术专场<技术裂变中的可信软件开发>中发表演讲,分享了区块链在当前社会应用的社会价值,介绍了华为云 ...

  5. 机器学习笔记七:损失函数与风险函数

    一.损失函数 回顾之前讲过的线性回归模型,我们为了要学习参数使得得到的直线更好的拟合数据,我们使用了一个函数 这个函数就是比较模型得到的结果和"真实值"之间的"差距&qu ...

  6. 【直播分享】实现LOL小地图英雄头像分析案例【华为云分享】

    直播介绍: 当今时代是人工智能高速发展的时代,深度学习已经渗透入经济.工业.军事.娱乐等各各领域的角落.近年来AlphaGo击败李世石更是使得人工智能技术家喻户晓.人工智能在游戏领域的开发依然不断进步 ...

  7. 网络服务家族图谱:一张图带您了解华为云网络服务大家族!【华为云分享】

    华为云网络服务大家族提供了丰富的云产品,满足您的各种网络互联需求.通过网络服务家族图谱可以总览华为云网络服务在网络互联中的作用与优势,快速了解华为云网络服务. 更多详情请参见传送门

  8. 还在为运维烦恼?体验云上运维服务,提意见赢好礼!【华为云分享】

    华为云应用运维管理服务AOM提供一站式云资源.网络.中间件.上云业务等全链路的数百种运维指标,让您一站完成云上运维. 即日起至2019年11月8日<云上运维系列活动:聆听您的声音>启动招募 ...

  9. 【华为云分享】应用系统迁移华为云评估

    本文主要尝试回答两个问题: 客户运行在其他云平台(比如阿里云)的应用系统,如何搬迁到华为云,如何评估搬迁的可行性和工作量,具体方案是什么以及有什么优缺点. 针对客户担心的"如何避免被云厂商& ...

最新文章

  1. MySQL 性能测试
  2. codeforces 400D Dima and Bacteria 并查集+floyd
  3. 【系统分析与设计】UML类图绘制方法(真の能看懂~!)
  4. tar打包和解压命令
  5. MFC的程序,不想显示窗口,任务栏里也不显示
  6. 你还记得20年前的语文课本吗?
  7. JSP项目实训-Ajax聊天室
  8. Ubuntu 14.04下360/小米/百度等随身Wifi驱动安装方法
  9. _stdcall和_cdecl
  10. C语言简单编程之一元二次方程求解
  11. bitset——定义及常用操作。
  12. CMOS图像传感器基本原理
  13. Android大话设计模式 第二章----单一职责原则 乔峰VS慕容复
  14. 70后.net老猿,尚能饭否?
  15. 基金的选择方法及MATLAB实现
  16. 【办公-excel】两个时间相减
  17. 为什么pLC工程师如此年轻,他们的经验毫无价值?
  18. LibreCAD v2.2.0源码编译,使用VS2019+Qt5.12.9+Boost1.71.0环境
  19. 计算机科学与技术理工英语4,2021年7月国开(中央电大)本科《理工英语4》期末考试试题及答案...
  20. domino-notes-Designer- java环境配置

热门文章

  1. matlab与c 接口与混合编程,Matlab与C/C++混合编程接口及应用方法解析
  2. python3项目源代码下载_python3中文版下载
  3. 渭南师范计算机科学与技术,渭南师范学院计算机科学与技术专业2016年在陕西理科高考录取最低分数线...
  4. iptables oracle策略,利用iptables防火墙保护Oracle数据库
  5. Web Api 中使用 PCM TO WAV 的语音操作
  6. js-刮刮卡效果,由jquery-eraser源码改的vue组件
  7. 自学编程的人,都是怎么找到自己的第一份工作的?
  8. Java中的装箱和拆箱剖析
  9. android对应版本号
  10. php当前完整url的写法