项目介绍:

使用贝叶斯分类器进行手写字体判别,数据为mnist.pkl.gz,下载地址https://pan.baidu.com/s/1I9GRg-wLEDvt-JmZ2_Os4A

数据分为训练数据,训练标签,测试数据,测试标签。

from sklearn import preprocessing
import pickle
import gzip
import numpy as np
import math
def normalize(data):  ##将图片像素二值化m,n = np.array(data).shapefor i in range(m):for j in range(n):if data[i,j] != 0:data[i,j] = 1else:data[i,j] = 0return data
def get_data(datapath): ##获取MNIST数据mnist = gzip.open(datapath, "rb")train_set, valid_set, test_set = pickle.load(mnist, encoding="bytes")train_data =normalize(train_set[0])#normalize将图片二值化train_label = train_set[1]test_data = normalize(test_set[0])test_label = test_set[1]return train_data,train_label,test_data,test_labeldef CalProb(train_data,train_label): ##根据训练集 算条件概率P(xk|y=j) 和先验概率 P(y=j) 注意这两种概率可能会为0 后面无法计算 因此一定要进行Laplace平滑 参见李航P51num,dimsnum = train_data.shape#num为行数,dimsum为列数labelnum = len(set(train_label)) ##标签总个数pyj = np.zeros(labelnum)pyjk1 = np.zeros((labelnum,dimsnum))for i in range(num):label = train_label[i]pyj[label] = pyj[label] + 1 #计算属于j类图像的数量(需要laplace平滑 这里是真实个数)for j in range(dimsnum):pyjk1[label][j] = pyjk1[label][j] + train_data[i][j] ##因为会出现条件概率为0的情况 log无法计算 需要laplace平滑  ##算 Pj k = 1print("pyj个数:",pyj)pyjk1 = (pyjk1.T + 1) / (pyj + 2) ##条件概率 需要Laplace平滑 分母要加上xk的种类数 这里只能取0 1像素 ##P y = j && xk = 1的概率  经验主义用频率去估计概率#此处的'/'运算,并非矩阵中的除运算pyj = (pyj + 1) / (num + labelnum) ##Py=j的概率 先验概率 需要 Laplace平滑 分母要加上y的标签种类数return  pyj, pyjk1#得到p(xk=1|y=j)def CalTestProb_xk_yj(xk,pyjxk1): ##计算条件概率 P(xk|y=j)的概率的logreturn xk * np.log(pyjxk1) + (1-xk) * np.log(1-pyjxk1)def test(test_data,test_label,pyjk1,pyj):  ##测试num,dimsnum = test_data.shape#dimsnum为784print(test_data[0])labelnum = len(set(test_label))acc = 0for i in range(num):testdata = test_data[i]p_yj_xi = np.log(pyj) ##第i个样本属于j类的概率(取对数)for j in range(labelnum): ##计算xi 属于 第j个类别的概率for k in range(dimsnum):xk = testdata[k] ##x^i的第j个像素p_yj_xi[j] = p_yj_xi[j] + CalTestProb_xk_yj(xk,pyjk1[j][k])#此处pyjk1为10*784##p_yj_xip_y_xi = np.argmax(p_yj_xi)#argmax表示取出一维向量中值最大的序号acc = acc + (p_y_xi == test_label[i])print("real is: ",test_label[i]," predict is: ",p_y_xi)print("Test accuracy is:" , acc/num)#正确率def main():datapath = "D:/Downloads/mnist.pkl.gz"train_data, train_label, test_data, test_label = get_data(datapath)pyj, pyjk1 = CalProb(train_data,train_label)test(test_data,test_label,pyjk1.T,pyj)#此处pyjk1为784*10矩阵if __name__ == "__main__":main()

基于贝叶斯分类器的手写字判别相关推荐

  1. 基于tensorflow的MNIST手写字识别

    一.卷积神经网络模型知识要点卷积卷积 1.卷积 2.池化 3.全连接 4.梯度下降法 5.softmax 本次就是用最简单的方法给大家讲解这些概念,因为具体的各种论文网上都有,连推导都有,所以本文主要 ...

  2. 朴素贝叶斯分类器_MINST手写数字识别

    朴素贝叶斯分类器_MINST手写数字识别 import numpy as np import pandas as pd from sklearn.preprocessing import Binari ...

  3. 利用朴素贝叶斯分类器实现手写数字的识别

    利用贝叶斯分类器实现手写数字的识别 贝叶斯决策理论: 条件:类别数一定,

  4. TensorFlow基于minist数据集实现手写字识别实战的三个模型

    手写字识别 model1:输入层→全连接→输出层softmax model2:输入层→全连接→隐含层→全连接→输出层softmax model3:输入层→卷积层1→卷积层2→全连接→dropout层→ ...

  5. 基于贝叶斯分类器进行sklearn乳腺癌数据集的分类

    问题描述 使用sklearn中的乳腺癌数据集,将数据集以7:3的比例分别划分为训练集与测试集,以及对应的标签: 使用训练集数据训练基于高斯模型的朴素贝叶斯分类器: 对测试文档进行测试,得出分类评价指标 ...

  6. sklearn朴素贝叶斯分类器_手撕朴素贝叶斯分类器源码(Naive Bayesian)

    鋌~(最近压力略大,好久没有更新,xixixi),今天的主题是朴素贝叶斯分类器,NB这个缩写真是绝了,确实值得这个缩写,哈哈哈.今天跟大家聊一聊朴素贝叶斯分类器的基本原理和代码编写.贝叶斯分类器的基本 ...

  7. 朴素贝叶斯分类器与Fisher线性判别实践——水果识别为例

    开篇:本次博客主要分享二分类水果实现案例,样本构造显然不具备泛化.大数量特性以及背景均为纯白色是为了方便目标提取.大家若需要更好的水果样本,Github上有许多的优秀案例.本次代码计算效率较低,代码有 ...

  8. 基于贝叶斯分类器的社区UGC反垃圾模型

    业务背景 背景:某金融APP的有料社区中,存在潜在用户发布垃圾信息(敏感.广告)等信息,需要构建一个文本分类模型进行相应拦截. 业务特点:广告占主要部分,含有微信.借贷.基金.股票等,敏感占次要. 我 ...

  9. 基于tensorflow的MNIST手写字识别(一)--白话卷积神经网络模型

    一.卷积神经网络模型知识要点卷积卷积 1.卷积 2.池化 3.全连接 4.梯度下降法 5.softmax 本次就是用最简单的方法给大家讲解这些概念,因为具体的各种论文网上都有,连推导都有,所以本文主要 ...

最新文章

  1. linux网络健康度检测,linux运维、架构之路-K8s健康检查Health Check
  2. redis list命令操作
  3. python如何引用txt_如何使用pip requirements.txt文件安装python模块附加组件
  4. bigdecimal判断等于0_shell 脚本中if判断的条件总结
  5. 从零开始学TensorFlow 1
  6. android json字符串转成json对象_【hive】解析JSON格式字符串
  7. 人工智能 一种现代方法 第7章 逻辑Agent(命题逻辑)
  8. jclasslib插件_JClassLib
  9. 任何辨别你的计算机中了威金病毒
  10. android系统设置默认字体,如何获取Android设备的默认字体?
  11. Python中机器学习模型的几种保存方式
  12. win7快捷键_如何设置win7系统自带截图功能的快捷键?
  13. IAR Fatal error
  14. HTML 内联元素之间的空隙问题
  15. 数字证书是什么,里面都包含那些内容
  16. Intelligent information retrieval(智能信息检索综述)
  17. 千万别活成自己最讨厌的样子
  18. Tsinsen D486 蓝雨
  19. Livid: 消失的未来
  20. socketDemo套接字

热门文章

  1. 商业模式,淘宝,拼多多,京东,短视频商业模式
  2. 当前计算机硬盘容量的计量单位是GB,当前计算机硬盘容量的计量单位是GB,它相当于________字节...
  3. 第一章 厕所被揍 校园江湖
  4. Latex第一次写论文记录
  5. Linux系统中的内存划分-- VM split
  6. mapstruct使用指南(2)
  7. Android源码编译及替换成自己编译的linux内核
  8. 推荐一个svg转ico的在线网站(非常清晰)
  9. 85 R 银行信用卡风控评分数据分析
  10. css里给文字加下划线代码,css添加文字下划线样式的方法