#!/usr/bin/python3
# -*- coding: utf-8 -*-
from numpy import *
import random
import math
import operator'''
朴素贝叶斯分类
理论参考:
http://blog.csdn.net/lsldd/article/details/41542107
程序参考:
http://python.jobbole.com/81019/
数据下载地址:
https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data
实现步骤:
1、数据预处理将数据转换为float数组将数据分割80%训练,20%测试将数据按照类别划分
2、计算所有分类对应特征的平均值和标准差
3、测试数据计算数据对应个分类的概率,概率大的就是该分类P(x) = (1 / (sqrt(2 * π) * σ)) * exp(-pow((x - η), 2) / (2 * pow(σ, 2)))η = 均值   σ = 标准差输出结果
'''class NaiveBayesClassifier:def __init__(self, trainData):self.trainData = {}self.avg = {}self.stdev = {}self.Probability = []self.accuracy = 0.0self.formatData(trainData)self.getAvgByClass()self.getStDev()def formatData(self, data):'''按照规定格式化数据:{'类别(0,1,2,3)':[[数据],[],[]]}'''self.trainData = {}for item in data:if(item[-1] not in self.trainData):self.trainData[int(item[-1])] = []self.trainData[int(item[-1])].append(item[:-1])for key in self.trainData.keys():# 转换为numpy.array格式方便后续的计算self.trainData[key] = array(self.trainData[key])def getAvgByClass(self):'''每个类中每个属性的均值'''self.avg = {}for key in self.trainData.keys():self.avg[key] = self.trainData[key].mean(0)def getStDev(self):'''每个类中每个属性的标准差'''self.stdev = {}for key in self.trainData.keys():self.stdev[key] = self.trainData[key].std(0)def calculateProbability(self, item):'''计算概率,判断其在那个分类概率大就返回那个分类'''result = []for key in self.trainData.keys():temp = (1 / (sqrt(2 * pi) * self.stdev[key])) * exp(-pow((item[:-1] - self.avg[key]),2) / (2 * pow(self.stdev[key], 2)))result.append([key, log(temp).sum()])result = sorted(result, key=operator.itemgetter(1), reverse=True)return result[0][0]def predict(self, testData):'''测试数据'''self.Probability = []for item in testData:self.Probability.append([item[-1], self.calculateProbability(item)])def getAccuracy(self):'''计算数据的正确率'''correct = 0.0size = len(self.Probability)for item in self.Probability:if(item[0] == item[1]):correct += 1.0self.accuracy = (correct / size) * 100.0def readFile(filename):'''获取数据'''files = open(filename, "r", encoding="utf-8")trainData = []for line in files.readlines():item = [float(i) for i in line.strip().split(",")]trainData.append(item)files.close()return trainDatadef splitCollection(collection, splitRatio):'''根据比例,随机分割数据'''size = int(len(collection) * splitRatio)ones = []others = []index = []while(len(index) < size):i = random.randint(0, len(collection) - 1)if(i not in index):index.append(i)for i in range(len(collection)):if(i in index):ones.append(collection[i])else:others.append(collection[i])return ones, others'''-------------------------------------开始----------------------------------------'''
if __name__ == "__main__":data = readFile("/home/hadoop/Python/NaiveBayesClassifier/data")# trainData, testData = splitCollection(data, 0.68)model = NaiveBayesClassifier(data)model.predict(data)model.getAccuracy()# print(("Split {0} rows into train={1} and test={2} rows").format(#     len(data), len(trainData), len(testData)))print(('Accuracy: {0}%').format(model.accuracy))

朴素贝叶斯 python相关推荐

  1. python程序员买西瓜代码_朴素贝叶斯python代码实现(西瓜书)

    本文将要为您介绍的是朴素贝叶斯python代码实现(西瓜书),具体完成步骤:朴素贝叶斯python代码实现(西瓜书) 摘要: 朴素贝叶斯也是机器学习中一种非常常见的分类方法,对于二分类问题,并且数据集 ...

  2. 基于朴素贝叶斯+Python实现垃圾邮件分类和结果分析

    基于朴素贝叶斯+Python实现垃圾邮件分类 朴素贝叶斯原理 请参考: 贝叶斯推断及其互联网应用(二):过滤垃圾邮件 Python实现 源代码主干来自: python实现贝叶斯推断--垃圾邮件分类 我 ...

  3. 学习笔记——Kaggle_Digit Recognizer (朴素贝叶斯 Python实现)

    本文是个人学习笔记,该篇主要学习朴素贝叶斯算法概念,并应用sklearn.naive_bayes算法包解决Kaggle入门级Digit Recognizer. 贝叶斯定理 朴素贝叶斯 Python 代 ...

  4. 数据挖掘十大算法(九):朴素贝叶斯 python和sklearn实现

    第三个算法终于算是稍有了解了,其实当你结合数据了解了它的实现原理后,你会发现确实很朴素.这里对朴素贝叶斯算法做一个介绍和总结,包括(原理.一个代码示例.sklearn实现),皆为亲自实践后的感悟,下面 ...

  5. 朴素贝叶斯python代码_朴素贝叶斯模型及python实现

    1 朴素贝叶斯模型 朴素贝叶斯法是基于贝叶斯定理.特征条件独立假设的分类方法.在预测时,对输入x,找出对应后验概率最大的 y 作为预测. NB模型: 输入: 先验概率分布:P(Y=ck),k=1,2, ...

  6. 朴素贝叶斯 python 实现

    百度文库 文库2 机器学习实战的朴素贝叶斯的代码太复杂 """ Created on Thu Aug 10 15:08:59 2017@author: luogan &q ...

  7. 朴素贝叶斯python实现预测_Python实现朴素贝叶斯分类器的方法详解

    本文实例讲述了Python实现朴素贝叶斯分类器的方法.分享给大家供大家参考,具体如下: 贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先 ...

  8. [转载] 朴素贝叶斯python实现预测_Python实现朴素贝叶斯分类器的方法详解

    参考链接: Python朴素贝叶斯分类器 本文实例讲述了Python实现朴素贝叶斯分类器的方法.分享给大家供大家参考,具体如下: 贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进 ...

  9. Python机器学习06——朴素贝叶斯

    本系列所有的代码和数据都可以从陈强老师的个人主页上下载:Python数据程序 参考书目:陈强.机器学习及Python应用. 北京:高等教育出版社, 2021. 本系列基本不讲数学原理,只从代码角度去让 ...

最新文章

  1. ZedGraph:一个同时支持WinForm和WebForm的开源图表控件(基于LGPL协议,.NET 2.0 C#源代码)...
  2. c++学习笔记之模板
  3. mysql存储过程的返回值在哪里设置_MySQL存储过程的返回值
  4. 使不安全变得更加安全
  5. 后台返回整个html转换成页面链接,利用html5的history.replaceState修改当前页面的URL...
  6. 麻省理工线性代数03
  7. win10北通手柄没反应_赛博朋克2077正式发售,光靠键鼠可不行,试试北通阿修罗3...
  8. Linux 安装JDK详细步骤
  9. bundle adjustment算法学习
  10. 网络分层和对应的协议列表
  11. 1e9个兵临城下 容斥
  12. HDMI Trans (FPGA)介绍及解析 (二)串并转换
  13. SAP MIGO凭证保存后增强 -- 保存101收货到非限制或者产生待检批到中间表
  14. CNAS实验室申请流程
  15. cdr如何画空心字?
  16. 夏季大米容易生虫子 办法:米桶里放些干海带
  17. 有道词典里添加星际译王词库
  18. 动手学深度学习第九节softmax回归中FashionMNIST数据集无法加载的解决方法
  19. 浅析Roaring Bitmap---另一种位图压缩算法
  20. LVGL PC模拟器新手教程

热门文章

  1. 什么生成对抗网络GAN、强化学习
  2. 《JavaEE开发的颠覆者: Spring Boot实战》资源及勘误
  3. go mysql 错误_mysql安装失败原因和解决方法
  4. 苹果arcade爆款游戏《海绵宝宝》推荐
  5. js DOM操作元素样式
  6. Python的优缺点
  7. Matlab论文插图绘制模板—三维柱状图
  8. 猫狗大战2014,阿里京东预谋了一年的明争暗斗
  9. 计算机毕业设计php的高校教材管理系统
  10. error: The argument type ‘Function‘ can‘t be assigned to the parameter type ‘void Function()‘.