网络编程
位置:首页>> 网络编程>> Python编程>> python实现朴素贝叶斯分类器

python实现朴素贝叶斯分类器

作者:shelmi  发布时间:2022-12-05 03:35:50 

标签:python,朴素贝叶斯

本文用的是sciki-learn库的iris数据集进行测试。用的模型也是最简单的,就是用贝叶斯定理P(A|B) = P(B|A)*P(A)/P(B),计算每个类别在样本中概率(代码中是pLabel变量)

以及每个类下每个特征的概率(代码中是pNum变量)。

写得比较粗糙,对于某个类下没有此特征的情况采用p=1/样本数量。

有什么错误有人发现麻烦提出,谢谢。


[python] view plain copy
# -*- coding:utf-8 -*-
from numpy import *
from sklearn import datasets
import numpy as np

class NaiveBayesClassifier(object):

def __init__(self):
   self.dataMat = list()
   self.labelMat = list()
   self.pLabel = {}
   self.pNum = {}

def loadDataSet(self):
   iris = datasets.load_iris()
   self.dataMat = iris.data
   self.labelMat = iris.target
   labelSet = set(iris.target)
   labelList = [i for i in labelSet]
   labelNum = len(labelList)
   for i in range(labelNum):
     self.pLabel.setdefault(labelList[i])
     self.pLabel[labelList[i]] = np.sum(self.labelMat==labelList[i])/float(len(self.labelMat))

def seperateByClass(self):
   seperated = {}
   for i in range(len(self.dataMat)):
     vector = self.dataMat[i]
     if self.labelMat[i] not in seperated:
       seperated[self.labelMat[i]] = []
     seperated[self.labelMat[i]].append(vector)
   return seperated

# 通过numpy array二维数组来获取每一维每种数的概率
 def getProbByArray(self, data):
   prob = {}
   for i in range(len(data[0])):
     if i not in prob:
       prob[i] = {}
     dataSetList = list(set(data[:, i]))
     for j in dataSetList:
       if j not in prob[i]:
         prob[i][j] = 0
       prob[i][j] = np.sum(data[:, i] == j) / float(len(data[:, i]))
   prob[0] = [1 / float(len(data[:,0]))] # 防止feature不存在的情况
   return prob

def train(self):
   featureNum = len(self.dataMat[0])
   seperated = self.seperateByClass()
   t_pNum = {} # 存储每个类别下每个特征每种情况出现的概率
   for label, data in seperated.iteritems():
     if label not in t_pNum:
       t_pNum[label] = {}
     t_pNum[label] = self.getProbByArray(np.array(data))
   self.pNum = t_pNum

def classify(self, data):
   label = 0
   pTest = np.ones(3)
   for i in self.pLabel:
     for j in self.pNum[i]:
       if data[j] not in self.pNum[i][j]:
         pTest[i] *= self.pNum[i][0][0]
       else:
         pTest[i] *= self.pNum[i][j][data[j]]
   pMax = np.max(pTest)
   ind = np.where(pTest == pMax)
   return ind[0][0]

def test(self):
   self.loadDataSet()
   self.train()
   pred = []
   right = 0
   for d in self.dataMat:
     pred.append(self.classify(d))
   for i in range(len(self.labelMat)):
     if pred[i] == self.labelMat[i]:
       right += 1
   print right / float(len(self.labelMat))

if __name__ == '__main__':
 NB = NaiveBayesClassifier()
 NB.test()

来源:https://blog.csdn.net/Incy_1218/article/details/52891209

0
投稿

猜你喜欢

  • 1、字符串的索引与获取字符串的索引方式与列表的索引方式是一样的。只不过列表是每个元素的自身就有一个索引位置,而字符串是每个字符就有一个索引位
  • python如何更新修改后的Python模块1.利用python的MySQLdb模块利用原生的sql语句进行更新的方法代码配置方法代码2.使
  • 本篇文章通过使用python实现对计算机摄像头的调用从而实现摄像监控的功能。利用opencv的图像处理功能可以轻松对计算机摄像头的调用实现实
  • 什么是字符串格式化,为什么需要这样做?我们有时候刷抖音/B站看到封面很好看,但是进入直播发现,不过如此!想必主播通过某种方式把输出转换为读者
  • 一、简介Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包
  • tensorflow里面给出了一个函数用来读取图像,不过得到的结果是最原始的图像,是咩有经过解码的图像,这个函数为tf.gfile.Fast
  • java往php传数据最近刚好做到了这一块,有php调用java的接口来返回数据,php在做数据的处理可以做到两个系统的数据库同步操作,一般
  • 这篇文章主要介绍了python实现简单日志记录库glog的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
  • python字符串连接的方法,一般有以下三种:方法1:直接通过加号(+)操作符连接website = 'python' +
  • 进程进程是操作系统分配资源的基本单元,是程序隔离的边界。进程和程序程序只是一组指令的集合,它本身没有任何运行的含义,它是静态的。进程程序的执
  • 环境:Ubuntu16.4 python版本:3.6.4 库:wordcloud这次我们要讲的是爬取QQ音乐的评论并制成云词图,我们这里拿周
  • 前言本文将介绍如何使用ONNX将PyTorch中训练好的模型(.pt、.pth)型转换为ONNX格式,然后将其加载到Caffe2中。需要安装
  • 前言:随机数模块实现了各种分布的伪随机数生成器。对于整数,从范围中有统一的选择。 对于序列,存在随机元素的统一选择、用于生成列表的随机排列的
  • 这是一个用python写解压大量zip脚本的说明,本人新手一个,希望能对各位有所启发。首先要注意的,在运行自己的脚本之前一定先备份或者复制出
  • 本文实例讲述了Python实现判断一个整数是否为回文数算法。分享给大家供大家参考,具体如下:第一个思路是先将整数转换为字符串,再将字符串翻转
  • python time.sleep()-睡眠线程还是进程?它会阻止线程。如果查看Python源代码中的Modules / timemodul
  • 在极坐标中,圆的表示方式为:x=x0+rcosθy=y0+rsinθ圆心为(x0,y0),r为半径,θ为旋转度数,值范围为0-359如果给定
  • 需提前安装好pyzbar和opencv-python库(博主的电脑安装opencv-python库比较麻烦,但大部分都不会出现该问题)安装方
  • 全栈即指的是全栈工程师,指掌握多种技能,并能利用多种技能独立完成产品的人。就是与这项技能有关的都会,都能够独立的完成。全栈只是个概念,也分很
  • 常用配置以下配置能使用File -> New Projects Settings -> Settings for New Pro
手机版 网络编程 asp之家 www.aspxhome.com