目录

频率学派和贝叶斯学派

朴素贝叶斯分类器

python实现朴素贝叶斯分类器


频率学派和贝叶斯学派

说起概率统计,不得不提到频率学派和贝叶斯学派,通过对概率的不同理解而演变的两个不同的概率学派。

频率学派

  • 核心思想:需要得到的参数​是一个确定的值,虽然未知,但是不会因为样本X的变化而变化,样本​数据随机产生的,因此在数据样本无限大时,其计算出来的频率即为概率。其重点主要在于研究样本空间,分析样本X​的分布

  • 延展应用:最大似然估计(MLE)

贝叶斯学派

  • 核心思想:需要得到的参数​是随机变量,而样本​则是固定的,其重点主要在于研究参数​​的分布。

    由于在贝叶斯学派中参数​​的是随机变量,是随着样本信息而变化的,所以贝叶斯学派提出了一个思考问题的固定模式:先验分布+样本信息->后验分布​

  • 延展应用:最大后验估计(MAP)

  • 贝叶斯公式

    假设A的先验概率为P(A),B的先验概率为P(B),B发生的条件下A发生的后验概率为P(A|B),A发生的条件下B发生的后验概率为P(B|A),则有

化简可得:

其中A表示一种预测结果;B表示一组观测数据;P(A)表示A的先验概率,即在未观测到B之前A的概率;P(A|B)表示A的后验概率,即在观测到B之后A的概率;P(B|A)为似然函数(likelihood);P(B)为证据因子(model evidence)

该公式可以理解为后验概率=先验概率调整因子​,在上式中,后验概率为​P(A|B),先验概率为​P(A),调整因子为​

朴素贝叶斯分类器

基于贝叶斯定理,延伸出了一个异常朴素的分类算法--朴素贝叶斯分类器,其基本思想为:在给定条件下,计算各可能类别的概率,取最大极为预测值。从上述思想可以确切的明白,朴素贝叶斯适用于离散数据,下面将给出其数学描述。

设​为输入,​为x​的特征属性,假设其特征属性都是相互独立的,需要预测​x是​中的哪一类

根据贝叶斯分分类器的思想,应该为概率最大的类别,即如果​,则有​,根据贝叶斯定理,每个类别的概率为:

可以发现其分母与i无关,因此可以仅通过分子来比较不同类别的概率。

python实现朴素贝叶斯分类器

import pandas as pd​def load_data(path,sep=',',encoding='utf=8'):'''读取数据,输入数据需要有表头return dataframe'''filetype = path.split('.')[-1]if filetype in ['csv', 'txt']:data = pd.read_csv(path, sep=sep, encoding=encoding)if filetype == 'xslx':data = pd.read_excel(path)return data​​def cal_prob(data,col,res):'''计算出现频率'''count_all = len(data[col])count_res = len(data[data[col]==res])​return count_res/count_all​​def cal_prio_prob(data, label):'''计算先验概率return {res1:prob1, res2:prob2,...}'''prio_prob = {}for res in data[label].unique():prob = cal_prob(data, label, res)prio_prob[res] = probreturn prio_prob​​def cal_likelihood_prob(data, label, input):'''计算似然函数return {res1:prob1, res2:prob2,...}'''likelihood_prob = {}for res in data[label].unique():data_p = data[data[label]==res]prob = 1for col in data:if col != label:prob = prob * cal_prob(data_p, col, input[col])likelihood_prob[res] = probreturn likelihood_prob​​def bayes_classifier(path, label, input):'''比较输出最可能的类别'''data = load_data(path)prio_prob = cal_prio_prob(data, label)likelihood_prob = cal_likelihood_prob(data, label, input)max = 0for c in prio_prob.keys():prob = prio_prob[c] * likelihood_prob[c]print(f'{c}的结果为{prob}')if prob > max:cla = cmax = probprint(f'在{input}情况下,{label}的结果为{cla}')if __name__=='__main__':path = 'weather.csv'label = 'PlayTennis'input = {'Outlook':'Sunny', 'Temperature':'Cool','Humidity':'High','Wind':'Strong'}bayes_classifier(path, label, input)

稍微改进了一下,封装成接口,代码如下:

import pandas as pdclass naiveBayesClassfier():'''贝叶斯分类器fit: 训练分类器predict:预测分类结果'''def __init__(self, data, label):# 特征self.features = [x for x in data.columns.tolist() if x!=label]# 结果分类self.res = data[label].unique()# 先验概率self.prio_prob = {}# 似然函数self.liklihood_prob = {}# 证据因子self.evidence_prob = {}def fit(self, data, label):'''训练朴素贝叶斯分类器- data: 输入数据- label: 预测值return: 概率 '''row, _ = data.shape# 先验概率for i, j in data[label].value_counts().to_dict().items():self.prio_prob[i] = j/row# 似然函数for l in data[label].unique():data_n = data[data[label]==l]row_n, _ = data_n.shapeprob2 = {}for col in self.features:prob1 = {}for i, j in data_n[col].value_counts().to_dict().items():prob1[i] = j/row_nprob2[col] = prob1self.liklihood_prob[l] = prob2# 证据因子for col in self.features:prob3 = {}for i, j in data[col].value_counts().to_dict().items():prob3[i] = j/rowself.evidence_prob[col] = prob3def cal_prob(self, input, res):'''计算似然概率,证据因子'''liklihood = 1evidence = 1for col in input.keys():print(col)v = input[col]liklihood = liklihood * self.liklihood_prob[res][col][v]evidence = evidence * self.evidence_prob[col][v]return liklihood, evidencedef predict(self, input):'''分类器预测- input:需要预测的数据return:预测的结果及概率'''prob = {}for res in self.res:liklihood, evidence = self.cal_prob(input, res)prob[res] = self.prio_prob[res]*liklihood/evidenceprint(prob)prediction = max(prob, key=lambda x: prob[x])probability = prob[prediction]return prediction, probability# 使用
import pandas as pd
import naiveBayesClassfierdata = pd.read_csv('weather.csv')
label = 'PlayTennis'
model = naiveBayesClassfier.naiveBayesClassfier(data, label)
input = {'Outlook':'Sunny', 'Temperature':'Cool','Humidity':'High','Wind':'Strong'}
# 训练模型
model.fit(data, label)
# 预测
prediction, probability = model.predict(input)

参考贝叶斯公式由浅入深大讲解

朴素贝叶斯分类器原理介绍及python代码实现相关推荐

  1. 朴素贝叶斯分类器原理解析与python实现

    贝叶斯分类器是以贝叶斯原理为基础的分类器的总称,是一种生成式模型,朴素贝叶斯分类器是其中最简单的一种.要高明白贝叶斯分类器的原理,首先得明白一些基本概念. 预备知识 基本概念 先验概率:根据统计/经验 ...

  2. 【机器学习】朴素贝叶斯分类器原理(理论+图解)

  3. 机器学习:伯努利朴素贝叶斯分类器(原理+python实现)

    伯努利朴素贝叶斯分类器主要用于文本分类,下面我们以一个具体的例子,来讲述下伯努利朴素贝叶斯的原理和实现逻辑. 具体例子: 已知我们有八个句子以及每个句子对应的类别,即中性或侮辱性.那么再给出一个句子, ...

  4. 朴素贝叶斯分类器的python实现

    徒手实现一个贝叶斯分类器 引子 代码 小结 引子 朴素贝叶斯分类器顾名思义是以贝叶斯公式为基础的分类器,其将后验概率转换为先验概率和不同类的条件概率的乘积,再通过比较不同的类别下该乘积的大小实现分类. ...

  5. java classifier_Java 朴素贝叶斯分类器、SVM(5行代码)实现乳腺癌分类

    Java实现乳腺癌诊断(分类)实验总结 朴素贝叶斯分类器.SVM(5行代码实现) 1.问题描述 某研究获取了若干乳腺癌诊断数据,存放于breast cancer数据.txt 中.每个样本第一个数值为I ...

  6. Java 朴素贝叶斯分类器、SVM(5行代码)实现乳腺癌分类

    Java实现乳腺癌诊断(分类)实验总结 朴素贝叶斯分类器.SVM(5行代码实现) 实验源码:https://gitee.com/LiuXingwu/sharing 1.问题描述 某研究获取了若干乳腺癌 ...

  7. 贝叶斯算法 — 朴素贝叶斯分类器— 过滤垃圾邮件 — 流失用户 — 用户画像

    目录 应用 1. 胃疼胃癌 2. 过滤垃圾邮件 朴素贝叶斯分类器 概念介绍 朴素贝叶斯分类器原理 贝叶斯分类器的应用 公式 求得是后验概率,等式右侧为先验概率 贝叶斯定理本质:通过 先验概率 求 后验 ...

  8. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_朴素贝叶斯(转载自Morgan)...

    什么是朴素贝叶斯 要搞懂朴素贝叶斯分类,首先需要了解什么是贝叶斯定理和特征条件独立假设,朴素贝叶斯算法就是基于这两个来实现的分类方法. 贝叶斯定理 贝叶斯定理通俗点讲就是求在事件 B 已经发生的前提下 ...

  9. (数据科学学习手札30)朴素贝叶斯分类器的原理详解Python与R实现

    一.简介 要介绍朴素贝叶斯(naive bayes)分类器,就不得不先介绍贝叶斯决策论的相关理论: 贝叶斯决策论(bayesian decision theory)是概率框架下实施决策的基本方法.对分 ...

最新文章

  1. [Springboot实战] 集成 Caffeine
  2. 三、深入elasticsearch基本语法
  3. feignRequest$Options错误
  4. syslog打印不带等级_syslog之一:Linux syslog日志系统详解
  5. 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
  6. IDEA—使用插件反编译jar包
  7. Java HttpURLConnection示例– Java HTTP请求GET,POST
  8. 2014年07月21日
  9. python_列表_常用操作
  10. android looper介绍
  11. stm32无源蜂鸣器定时器_【STM32H7教程】第20章 STM32H7的GPIO应用之无源蜂鸣器...
  12. MATLAB自带函数实现经验模态分解总结
  13. Linux的命令回收站在哪,Linux命令行删除文件到回收站
  14. Excel如何生成11位随机数,包含大小写字母和数字
  15. 命令行操作flyway
  16. 机器学习cae_智铸超云——适创科技为压铸企业量身定制的专业CAE云平台
  17. java poi- 实现 word Excel pdf ppt 转 HTML
  18. 【计组】设计大型DMP系统--《深入浅出计算机组成原理》(十四)
  19. php自我介绍50字,自我介绍作文50字
  20. 为什么手机里的小爱音响app里搜不到家里的小爱音箱_教你500元用小米米家网关+小爱音箱尝鲜最AI智能生活...

热门文章

  1. 欧几里得算法和更相减损术证明
  2. Android Bluetooth OPP
  3. mix2s android p功能,小米MIX2S升级Android P教程 小米mix2s安卓9.0下载地址
  4. layui等比例放大/缩小图片
  5. 【硬件】电脑主机结构 | 总分总
  6. 5款大神手机必备APP,个个都是精品,你有什么理由拒绝
  7. 工作,你需要注意的20个规则
  8. 分享一个VUE Element-UI 的多级菜单动态渲染的组件
  9. 分布式缓存的四大痛点
  10. 站群是如何运营的 怎么选择站群服务器