(李航统计方法学习)朴素贝叶斯Python实现

2023-10-18 21:08

本文主要是介绍(李航统计方法学习)朴素贝叶斯Python实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

朴素贝叶斯属于生成模型,学习数据概率分布P(X,Y),然后求后验概率P(Y|X)。对条件概率分布作条件独立性假设。
模型:贝叶斯定理
策略:后验概率最大化(等价于期望风险最小化)
算法:略
朴素贝叶斯在进行概率估计时有两种方式:基于最大似然估计、基于贝叶斯估计。朴素贝叶斯可以进一步扩展成贝叶斯网络

import numpy as npdef Train(X_train,Y_train,feature):global  class_num,labelclass_num=2label=[1,-1]feature_len=3feature=[[1,'S'],[2,'M'],[3,'L']]prior_probability=np.zeros(class_num)conditional_probability=np.zeros((class_num,feature_len,2))pos,neg=0,0for i in range(len(Y_train)):if Y_train[i] == 1:pos+= 1else:neg += 1##计算出P(Y)prior_probability[0]=pos/len(X_train)prior_probability[1]=neg/len(X_train)##统计P(X1,X2|Y),假设X1与X2相互独立,计算P(X1,X2|Y)=P(X1|Y)*P(X2|Y),所以统计X1,X2不同取值对应的不同Y的数量for i in range(class_num):for j in range(feature_len):for k in range(len(Y_train)):if Y_train[k]==label[i]:if X_train[k][0]==feature[j][0]:conditional_probability[i][j][0]+=1if X_train[k][1]==feature[j][1]:conditional_probability[i][j][1]+=1class_label_num=[pos,neg]
##计算P(X1,X2|Y)for i in range(class_num):for j in range(feature_len):conditional_probability[i][j][0]/=class_label_num[i]conditional_probability[i][j][1]/=class_label_num[i]return  prior_probability,conditional_probabilitydef Predict(X_test,prior_probability,conditional_probability,feature):result=np.zeros(len(label))for i in range(class_num):fea0,fea1=0,0for j in range(len(feature)):if feature[j][0]==X_test[0]:fea0=conditional_probability[i][j][0]if feature[j][1]==X_test[1]:fea1=conditional_probability[i][j][1]result[i]=fea0*fea1*prior_probability[i]result=np.vstack([result,label])return result
def main():X_train=[[1, 'S'], [1, 'M'], [1, 'M'], [1, 'S'],  [1, 'S'],[2, 'S'], [2, 'M'], [2, 'M'], [2, 'L'],  [2, 'L'],[3, 'L'], [3, 'M'], [3, 'M'], [3, 'L'],  [3, 'L']]Y_train = [-1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1]feature = [[1, 'S'],[2, 'M'],[3, 'L']]testset = [2, 'S']prior_probability, conditional_probability = Train(X_train, Y_train, feature)result = Predict(testset, prior_probability, conditional_probability, feature)print(result)if __name__ == '__main__':main()

这篇关于(李航统计方法学习)朴素贝叶斯Python实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/235142

相关文章

Java中的getBytes()方法使用详解

《Java中的getBytes()方法使用详解》:本文主要介绍Java中getBytes()方法使用的相关资料,getBytes()方法有多个重载形式,可以根据需要指定字符集来进行转换,文中通过代... 目录前言一、常见重载形式二、示例代码三、getBytes(Charset charset)和getByt

Python多重继承慎用的地方

《Python多重继承慎用的地方》多重继承也可能导致一些问题,本文主要介绍了Python多重继承慎用的地方,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录前言多重继承要慎用Mixin模式最后前言在python中,多重继承是一种强大的功能,它允许一个

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

Django之定时任务django-crontab的实现

《Django之定时任务django-crontab的实现》Django可以使用第三方库如django-crontab来实现定时任务的调度,本文主要介绍了Django之定时任务django-cront... 目录crontab安装django-crontab注册应用定时时间格式定时时间示例设置定时任务@符号

Python中edge-tts实现便捷语音合成

《Python中edge-tts实现便捷语音合成》edge-tts是一个功能强大的Python库,支持多种语言和声音选项,本文主要介绍了Python中edge-tts实现便捷语音合成,具有一定的参考价... 目录安装与环境设置文本转语音查找音色更改语音参数生成音频与字幕总结edge-tts 是一个功能强大的

Java实现按字节长度截取字符串

《Java实现按字节长度截取字符串》在Java中,由于字符串可能包含多字节字符,直接按字节长度截取可能会导致乱码或截取不准确的问题,下面我们就来看看几种按字节长度截取字符串的方法吧... 目录方法一:使用String的getBytes方法方法二:指定字符编码处理方法三:更精确的字符编码处理使用示例注意事项方

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与