文章目录

  • 一、贝叶斯决策论
    • 1.概率和统计
    • 2.概率函数和似然函数
    • 3.贝叶斯公式
    • 4.贝叶斯决策论
    • 5.极大似然估计(MLE)和最大后验概率估计(MAP)
  • 二、朴素贝叶斯分类器
    • 1. 简介
    • 2.算法表示
    • 3. 代码实现

一、贝叶斯决策论

1.概率和统计

(1)概率(probability):已知一个模型和对应参数,预测该模型产生的结果及特性(如均值,方差,协方差等),即数据;
(2)统计(statistics):根据已有数据预测出模型及对应参数;
可知概率和统计要研究的目的是相反的;

2.概率函数和似然函数

对于函数P(x∣θ)P\left( x|\theta \right)P(x∣θ),有两个输入,xxx表示某一个具体的数据,θ\thetaθ表示模型参数;那么有以下两种情况:
(1)xxx变化,θ\thetaθ固定的情况下,相当于模型及参数固定,给出不同的样本xxx,那么求出的是该xxx出现的概率是多少,此为概率函数
(2)xxx固定,θ\thetaθ变化的情况下,求出的是对于不同的模型参数θ\thetaθ,出现x这个样本点的概率是多少,此为似然(likelihood)函数(可能性)。

3.贝叶斯公式

P(A∣B)=P(A)P(B∣A)P(B)P\left( A|B \right) =\frac{P\left( A \right)P\left( B|A \right) }{P\left( B \right)} P(A∣B)=P(B)P(A)P(B∣A)​
贝叶斯公式中存在着一种事件发生的因果关系,若A是因,B是果,即A是导致B发生的原因之一; 那么:

  1. P(A∣B)P\left( A|B \right)P(A∣B)称为后验概率,是一种果因概率,即事件B已经发生后,是由A引起B发生的可能性有多大,可以理解为有多大把握能相信一件证据(或者说有多大的把握能确定是由A导致B发生的);
  2. P(A)P(A)P(A)称为先验(prior)概率,即能直接根据以往经验和分析得到的概率,如投一枚正常硬币,我们可以根据经验先验地知道正面朝上的概率是0.5;
  3. P(B∣A)P\left( B|A \right)P(B∣A)称为类条件概率(class-conditional probality),可以理解为如果AAA发生,那么接下来BBB发生的可能性有多大,如AAA=‘今天是五一’,BBB=‘今天放假’,则P(B∣A)=1P(B|A)=1P(B∣A)=1;或者称为似然。
  4. P(B)P(B)P(B)是用于归一化的“证据”因子,即导致BBB发生的所有可能性的集合,如BBB=‘今天放假’,那么P(B)P(B)P(B)就是所有可能导致今天放假的可能性的集合,如今天是周末或者是五一等,对于某一个事件BBB,通常P(B)是一个确定的值。
    概率论与数理统计中关于全概率公式和贝叶斯公式中的解释:
  5. 从两个角度理解贝叶斯公式
    (1)贝叶斯公式可化为:
    P(A∣B)=P(A)P(B∣A)P(B∣A)P(A)+P(B∣∼A)P(∼A)P\left( A|B \right) =\frac{P\left( A \right) P\left( B|A \right)}{P\left( B|A \right) P\left( A \right) +P\left( B|\sim A \right) P\left( \sim A \right)}P(A∣B)=P(B∣A)P(A)+P(B∣∼A)P(∼A)P(A)P(B∣A)​
    如果我们想说“今天放假,那么今天是五一”这个命题为真该怎么做呢,可以想到,只要令上述贝叶斯公式分母中的P(B∣∼A)P(∼A)P\left( B|\sim A \right) P\left( \sim A \right)P(B∣∼A)P(∼A)为0即可,即排除掉引起放假的除五一外的其他可能因素;但是很明显,该命题为假,因为引起放假的因素不止五一节一种;
    所以我们可以得出结论:做判断的时候,要考虑所有的因素。如今天放假,但是今天不一定是五一,更有可能是周末;
    (2)从P(A)P(A)P(A)的角度考虑:我们假设AAA与BBB密切相关,取极端情况令P(B∣A)=1P(B|A)=1P(B∣A)=1,即若AAA发生,那么BBB一定发生;可是即使是这种情况,若P(A)P(A)P(A)太小,那么综合起来P(A∣B)P(A|B)P(A∣B)也会很小;如对于那些百万彩票,一旦有人中了那么他当时必定就成为了百万富翁;但是实际上所有百万富翁中只有非常少的人中过百万彩票;所以我们可以知道,就算某个因素和结果强烈相关,但是当这个因素发生的概率很低时,我们就要慎重考虑,要想想是不是其他因素造成的。

4.贝叶斯决策论

贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方法,考虑基于已知的相关概率和误判损失来选择最优的类别标记。
假设有N种可能的类别标记,即y={c1,c2,...,cN}y=\left\{ c_1,c_2,...,c_N \right\}y={c1​,c2​,...,cN​},λij\lambda _{ij}λij​是将一个真实标记为cj{c_j}cj​的样本xxx误分类为cic_ici​所产生的期望损失(条件风险(conditional risk))
R(ci∣x)=∑j=1NλijP(cj∣x)R\left( c_i|x \right) =\sum_{j=1}^N{\lambda _{ij}P\left( c_j|x \right)} R(ci​∣x)=j=1∑N​λij​P(cj​∣x)
我们的目的是最小化条件风险,当
λij={0,ifi=j1,otherwise\lambda _{ij}=\begin{cases} 0, if\,\,i\,\,=\,\,j\\ 1, otherwise\\ \end{cases} λij​={0,ifi=j1,otherwise​
此时条件风险R(c∣x)=1−P(c∣x)R\left( c|x \right) =1-P\left( c|x \right)R(c∣x)=1−P(c∣x),最小化分类错误率的贝叶斯最优分类器为h∗(x)=argmax⁡c∈yP(c∣x)h^*\left( x \right) =\underset{c\in y}{arg\max}P\left( c|x \right)h∗(x)=c∈yargmax​P(c∣x)
即对每个样本xxx,选择能使后验概率P(c∣x)P(c|x)P(c∣x)最大的类别标记。方法有极大似然估计和最大后验概率估计。
(该部分来自于西瓜书)

5.极大似然估计(MLE)和最大后验概率估计(MAP)

二、朴素贝叶斯分类器

1. 简介

对于后验概率P(c|x),类条件概率P(x|c)是所有属性上的联合概率,属性间存在影响;为了简化问题,朴素贝叶斯分类器假设所有属性间相互独立,即每个属性独立地对分类结果有影响

2.算法表示

3. 代码实现

离散属性与连续属性的训练要区分对待

连续属性:

import numpy as np#鸢尾花,三个类别,每个类均有50个样本
import random
import math
def data_split(data):#将原数据划分成含有120个样本的训练集,含有30个样本的测试集data = data[1:]train_ratio = 0.8train_size = int(len(data) * train_ratio)random.shuffle(data)train_set = data[:train_size]test_set = data[train_size:]return train_set, test_setdef class_separate(data_set):#对数据进行处理,分类并统计separated_data = {}data_info = {}#表示的是各品种花所对应的数量for data in data_set:if data[-1] not in separated_data:#创建新字典索引,data和info两个字典都各自有三个索引,即花的品种separated_data[data[-1]] = []data_info[data[-1]] = 0separated_data[data[-1]].append(data)#将所有花分成三类,每种花都会被添加进对应的花类别中data_info[data[-1]] += 1if 'Species' in separated_data:del separated_data['Species']if 'Species' in data_info:del data_info['Species']return separated_data, data_infodef prior_prob(data, data_info):#计算每个类的先验概率data_prior_prob = {}data_sum = len(data)for cla, num in data_info.items():data_prior_prob[cla] = num / float(data_sum)return data_prior_probdef mean(data):#求均值data = [float(x) for x in data]#字符串转数字return sum(data) / len(data)def var(data):#求方差data = [float(x) for x in data]mean_data = mean(data)var = sum([math.pow((x - mean_data), 2) for x in data]) / float(len(data) - 1)return vardef prob_dense(x, mean, var):#由于是样本属性是连续值,所以要用概率密度exponent = math.exp(math.pow((float(x) - mean), 2) / (-2 * var))p = (1 / math.sqrt(2 * math.pi * var)) * exponentreturn pdef attribute_info(data):#分别计算出四个属性的均值和方差dataset = np.delete(data, -1, axis = 1) #删除标签result = [(mean(att), var(att)) for att in zip(*dataset)]#zip解开元组,生成四个属性的结果return resultdef summarize_class(data):data_separated, data_info = class_separate(data)summarizeClass = {}for index, x in data_separated.items():#三种类别对应4种属性,共12组,每组包含对应的均值和方差summarizeClass[index] = attribute_info(x)return summarizeClassdef cla_prob(test, summarizeClass):#此时summarizeClass就是三个类别的概率密度函数参数,即模型参数,test即测试数据(样本数据)prob = {}for cla, summary in summarizeClass.items():#cla类别,summary为该类对应的四个属性的(均值,方差)集合prob[cla] = 1for i in range(len(summary)):#属性个数mean, var = summary[i]x = test[i]p = prob_dense(x, mean, var)#计算离散属性值的条件概率prob[cla] *= p #连乘,最后得到这个类关于所有属性的条件概率return prob#获得条件概率def bayesian(input_data, data, data_info):#只需要考虑贝叶斯公式的分子,因为分母都是一样的,即只要考虑先验概率和条件概率priorProb = prior_prob(data, data_info)data_summary = summarize_class(data)classProb = cla_prob(input_data, data_summary)result = {}for cla, prob in classProb.items():# print(type(classProb))p = prob * priorProb[cla]result[cla] = preturn max(result, key=result.get)iris = np.array(np.loadtxt("IrisData.csv", dtype=str, delimiter=",")).tolist()##导入鸢尾花数据,共有150个样本,其中有四个属性,3个类别(0,1,2),每个类别都有50个样本
train_set, test_set = data_split(iris)
train_separated, train_info = class_separate(train_set)#获得分类好的数据和每个类别的样本数
correct = 0
for x in test_set:input_data = x[:-1]label = x[-1]result = bayesian(input_data, train_set, train_info)if result == label:correct += 1
print("precision:", correct / len(test_set))

训练结果:

贝叶斯决策论及朴素贝叶斯分类器相关推荐

  1. python机器学习案例系列教程——文档分类器,朴素贝叶斯分类器,费舍尔分类器

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 github地址:https://github.com/626626cdllp/data-mining/tree/master/Bay ...

  2. 机器学习实战 朴素贝叶斯分类器

    基于概率论的分类方法: 朴素贝叶斯 我的微信公众号: s406205391; 欢迎大家一起学习,一起进步!!! k-近邻算法和决策树会给出"该数据属于哪一类"的明确回答.不过,分类 ...

  3. 【贝叶斯分类2】朴素贝叶斯分类器

    文章目录 1. 贝叶斯决策论回顾 1.1 分类原理 1.2 贝叶斯分类器 1.3 P(c|x) 1.4 计算公式 1.5 极大似然估计 2. 朴素贝叶斯分类器学习笔记 2.1 引言 2.2 知识卡片 ...

  4. 机器学习:朴素贝叶斯分类器,决策函数向量化处理,mask使用技巧

    文章目录 前面实现的朴素贝叶斯分类器,决策函数是非向量化的: 借助于numpy向量化处理,相当于并行计算,注意mask使用技巧,用途较广: 前面实现的朴素贝叶斯分类器,决策函数是非向量化的: 前面提到 ...

  5. 面试前抢救一下--朴素贝叶斯分类器

    写在最前 朴素贝叶斯分类器,实际上也是对人们常识做的一个算法的完善.其以一种更为精准的量化来判断分类,使用的方法是后验概率.本文从与决策树的比较出发,介绍先验概率和后验概率的关系,再详细介绍一下朴素贝 ...

  6. 贝叶斯分类器_Sklearn 中的朴素贝叶斯分类器

    (给Python开发者加星标,提升Python技能) 作者:Martin Müller,翻译:github-sisibeloved https://github.com/xitu/gold-miner ...

  7. sklearn朴素贝叶斯分类器_python机器学习:方法链和朴素贝叶斯分类器

    今天我们在学习朴素贝叶斯分类器之前,我们先来总结下前面经常用到的内容,方法链:在scikit-learn中所有模型的fit方法返回的都是self.我们用一行代码初始化模型并拟合,对应代码如下:logr ...

  8. 机器学习实验 - 朴素贝叶斯分类器

    目录 一.报告摘要 1.1 实验要求 1.2 实验思路 1.3 实验结论 二.实验内容 2.1 方法介绍 2.2 实验细节 2.2.1 实验环境 2.2.2 实验过程 2.2.3 实验与理论内容的不同 ...

  9. 朴素贝叶斯分类器NBC

    朴素贝叶斯分类器NBC 朴素贝叶斯算法是统计学的一种分类方法,利用概率统计知识进行分类.朴素贝叶斯一贝叶斯定理为基础,故统称为贝叶斯分类. ##贝叶斯流派 在提出贝叶斯方法之前,人们认为一件事发生的概 ...

  10. 朴素贝叶斯分类器:例子解释

    戳上面的蓝字关注我们! 作者:alg-flody 编辑:Emily 今日话题 在昨天推送了用一个例子引入贝叶斯公式的基本思想,然后用贝叶斯公式对一个很简单的问题做分类,最后引出来一个问题:后验概率 P ...

最新文章

  1. 精典的SQL语句(转)
  2. Ubuntu 16.04下使用gcc输出汇编的.0文件为可执行文件时出现:`_start'被多次定义
  3. python通信模块_基于Python的电路故障诊断系统通信模块的实现
  4. Linux基金会要“下田”了!开源技术在农业领域能做什么?
  5. PASCAL-VOC2012数据集(vocdevkit、Vocbenchmark_release)详细介绍
  6. ubuntu系统下VirtualBox安装windows虚拟机
  7. 计算机修改了服务如何恢复,怎么修复MSDTC服务?
  8. 游戏开发中一些常用的数学知识
  9. 万用表测试软件,最全的万用表使用方法看这里!
  10. 计算机无法关闭密码保护,win7的密码保护共享关闭不了怎么办_解决win7的密码保护共享关闭不了的方法...
  11. 关于xds100仿真器的ftdi驱动无法使用的问题
  12. Unity—手机端的触屏控制
  13. “云”到底是什么?云计算7种类型细分
  14. 网络表示学习Network Representation Learning/Embedding
  15. vscode修改PHP注释
  16. 购物卡逻辑思维导图整理
  17. `符号在sql中的作用
  18. 用户运营之push和短信
  19. ORA01007 INS32018
  20. 量化私募江湖录:多少家?猜猜看?

热门文章

  1. php区块链开发游戏,php程序员如何开发区块链、以太坊、智能合约的教程
  2. poEdit制作WordPress主题汉化,插件汉化攻略
  3. 社招腾讯,阿里,京东,必问知识点整理,常考知识点全在这里了!
  4. c51汇编语言如何定义全局变量_汇编语言程序访问C语言全局变量
  5. Windows如何对硬盘进行分区?
  6. 在浏览器中播放m3u8
  7. SC_FDE仿真平台:卷积编码 -> 矩阵交织 -> QPSK调制 -> 插入导频 -> 插入CP -> RayleighFading->channel
  8. JAVA打包成EXE文件,能在没有jre环境的电脑上运行
  9. mariadb 的安装及基本配置
  10. 倍福TwinCAT 3 气缸动作程序编写