朴素贝叶斯算法的原理:

1. 朴素贝叶斯法是典型的生成学习方法。

生成方法由训练数据学习联合概率分布P(X,Y),然后求得后验概率分布P(Y|X)。具体来说,利用训练数据学习P(XY)和P(Y)的估计,得到联合概率分布:P(X,Y)=P(Y)P(X|Y)概率估计方法可以是极大似然估计或贝叶斯估计。

2.朴素贝叶斯法的基本假设是条件独立性

这是一个较强的假设。由于这一假设,模型包含的条件概率的数量大为减少,朴素贝叶斯法的学习与预测大为简化。因而朴素贝叶斯法高效,且易于实现。其缺点是分类的性能不一定很高。

3.朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测。

  1. 使用极大似然估计可能会出现所要估计的概率值为0的情况,这时会影响到后验概率的计算结果,使分类产生偏差,解决这一问题的方法是采用拉普拉斯平滑:

通俗版:其实就是把样本X的每个维度看成独立的,还是比如一个人的脸的眼睛啊,鼻子啊,嘴巴啊,通过训练集计算哪种种类的人(Y)的对应的眼睛大的概率是多少,眼睛小的概率是多少,根据训练集先计算出各个条件概率(即黑种人的眼睛大的概率是多少)的值和(黑种人,黄种人等各自的占所有训练集人数的概率比)先验概率,然后再输入一个测试集样本(眼睛大鼻子小嘴巴大),我们就计算不同标签下符合输入样本特征的总概率(黑种人\黄种人等 眼睛大鼻子小嘴巴大的概率),哪个概率最大标签就是哪个。

案例分享:

import pandas as pd
import numpy as np
import cv2
import random
import timefrom sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 二值化
def binaryzation(img):cv_img = img.astype(np.uint8)cv2.threshold(cv_img,50,1,cv2.THRESH_BINARY_INV,cv_img)return cv_imgdef Train(trainset,train_labels):prior_probability = np.zeros(class_num)                         # 先验概率conditional_probability = np.zeros((class_num,feature_len,2))   # 条件概率# 计算先验概率及条件概率for i in range(len(train_labels)):img = binaryzation(trainset[i])     # 图片二值化label = train_labels[i]###########填写代码prior_probability[label]+=1for j in range(len(img)):conditional_probability[label][j][img[j]]+=1############   for i in range(class_num):for j in range(feature_len):conditional_probability[i][j][0]=(conditional_probability[i][j][0]+1)/(prior_probability[i]+2)conditional_probability[i][j][1] = (conditional_probability[i][j][1]+1) / (prior_probability[i]+2)#拉普拉斯平滑prior_probability[i]=(prior_probability[i]+1)/(len(train_labels)+10)#拉普拉斯平滑###########填写代码############    return prior_probability,conditional_probability# 计算概率
def calculate_probability(img,label,prior_probability,conditional_probability):###########填写代码img1=imgj=labelprobability=prior_probability[j]for i in range(len(img1)):probability=probability*conditional_probability[j][i][img[i]]############    return probabilitydef Predict(testset,prior_probability,conditional_probability):predict = []for img in testset:# 图像二值化img = binaryzation(img)max_label = 0max_probability = calculate_probability(img,0,prior_probability,conditional_probability)for j in range(1,10):probability = calculate_probability(img,j,prior_probability,conditional_probability)if max_probability < probability:max_label = jmax_probability = probabilitypredict.append(max_label)return np.array(predict)class_num = 10
feature_len = 784if __name__ == '__main__':print ('Start read data')time_1 = time.time()raw_data = pd.read_csv('train.csv',header=0)data = raw_data.valuesimgs = data[0::,1::]labels = data[::,0]# 选取 2/3 数据作为训练集, 1/3 数据作为测试集train_features, test_features, train_labels, test_labels = train_test_split(imgs[0:4000], labels[0:4000], test_size=0.33, random_state=23323)# print train_features.shape# print train_features.shapetime_2 = time.time()print ('read data cost ',time_2 - time_1,' second','\n')print ('Start training')prior_probability,conditional_probability = Train(train_features,train_labels)time_3 = time.time()print ('training cost ',time_3 - time_2,' second','\n')print ('Start predicting')test_predict = Predict(test_features,prior_probability,conditional_probability)time_4 = time.time()print ('predicting cost ',time_4 - time_3,' second','\n')score = accuracy_score(test_labels,test_predict)print ("The accruacy socre is ", score)

朴素贝叶斯算法的原理:相关推荐

  1. 【机器学习入门】(2) 朴素贝叶斯算法:原理、实例应用(文档分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍python机器学习中的朴素贝叶斯算法.内容有:算法的基本原理:案例实战--新闻文档的分类预测. 案例简介:新闻数据有20个主题,有10万多篇文章,每篇文章对应不同的主题, ...

  2. 【朴素贝叶斯】深入浅出讲解朴素贝叶斯算法(公式、原理)

    本文收录于<深入浅出讲解自然语言处理>专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅! ​个人主页:有梦想的程序星空 ​个人介绍:小编是人工智能领域硕士,全栈工 ...

  3. 【机器学习入门】(3) 朴素贝叶斯算法:多项式、高斯、伯努利,实例应用(心脏病预测)附python完整代码及数据集

    各位同学好,今天我和大家分享一下朴素贝叶斯算法中的三大模型.在上一篇文章中,我介绍了朴素贝叶斯算法的原理,并利用多项式模型进行了文本分类预测. 朴素贝叶斯算法 -- 原理,多项式模型文档分类预测,附p ...

  4. 【机器学习】朴素贝叶斯算法

    朴素贝叶斯(Naive Bayes)是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.由于朴素贝叶斯计算联合概率,所以朴素贝叶斯模型属于生成式模型.经典应用案例包括:文本分类.垃圾邮件过滤 ...

  5. 机器学习基础 朴素贝叶斯算法

    文章目录 一. 朴素贝叶斯算法简介 二.概率基础复习 1.概率定义 2.案例:判断女神对你的喜欢情况 3.联合概率.条件概率与相互独立 4.贝叶斯公式 4.1 公式介绍 4.2 案例计算 4.3 文章 ...

  6. 文本分类的基本思想和朴素贝叶斯算法原理

    文本分类的基本思想和朴素贝叶斯算法原理

  7. [Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法的图像分类案例

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  8. 机器学习之朴素贝叶斯算法原理

    朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法.它和其他绝大多数的分类算法都不同. 对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方 ...

  9. 朴素贝叶斯算法_朴素贝叶斯算法原理

    摘要:本文介绍了贝叶斯公式,并根据公式而产生的朴素贝叶斯分类算法在机器学习中的应用,并列举了朴素贝叶斯分类算法的优缺点. 1贝叶斯公式的理解 贝叶斯定理(Bayes' theorem)是概率论中的一个 ...

最新文章

  1. Android 一个activity 加载一个Fragment
  2. 脚本文件直接执行python代码
  3. iOS分享短信导航条上白色,无取消按钮,无法返回应用
  4. 淘宝用了mysql,您呢?
  5. 禁用linux系统日志,KB4532432-如果在 Linux 系统上禁用了 IPV6,则会议将失败
  6. 删除一个无头单链表的非尾节点(C语言)
  7. MySQL自定义函数的使用
  8. 【Elasticsearch】解决Elasticsearch HTTP方式查询报SocketTimeoutException的问题 Connection reset by peer
  9. vivo手机解锁工具_vivo正式官宣APEX 2020概念手机!或将实现全面屏指纹解锁
  10. 《JQuery 能干点啥~》第四讲 html() 与 text()的赋值比较
  11. 备忘:BLOCK CORRUPTION IN SYSTEM DATAFILE
  12. 兔玩游戏微博html,和小兔玩游戏小班教案.doc
  13. 服务器磁盘阵列数据恢复方法和数据恢复过程详解
  14. 虚拟机Windows10下载安装保姆级教程
  15. Mac操作指南:Mac显示器颜色不正如何调节?
  16. 求助vscode格式化插件beautify的用法
  17. bs客户端跨服务器管理文件,bs架构客户端和服务器
  18. Python学习学期专业总结
  19. 笔记:《高效能人士的七个习惯》第七章 习惯四 双赢思维——人际领导的原则
  20. STATA如何查找命令的帮助文件

热门文章

  1. Spring注解驱动开发第11讲——面试官让我说说:如何使用FactoryBean向Spring容器中注册bean?
  2. 高等数学——常用结论(1)
  3. 【双足机器人(1)】线性倒立摆及其运动控制(附代码)
  4. Spring Boot 中关于 %2e 的 坑,希望你不要遇到
  5. SAP ABAP修改字段描述(翻译及传输)
  6. HTML5期末大作业:文化网站设计——古典中国风工艺美术网页设计(9页) HTML+CSS+JavaScript...
  7. 通过动态NAT实现内网访问外网,通过静态NAT实现外网访问内网的WEB服务器(Cisco)
  8. 量子计算机详细讲解,全球最强量子计算机,到底强在哪儿?附参数详解
  9. makefile编译选项CC与CXX/CPPFLAGS,CFLAGS与CXXFLAGS/LDFLAGS
  10. TechExcel成立成都分公司 助推西南地区企业管理信息化升级