python实现贝叶斯分类器_python实现简单的朴素贝叶斯分类器
本文使用的测试问题是“皮马印第安人糖尿病问题”
这个问题包括768个对于皮马印第安患者的医疗观测细节,记录所描述的瞬时测量取自患者的年龄,怀孕
和血液检查的次数。所有患者都是21岁以上的女性,所有属性都是数值型,而且属性的单位各不相同
每一个记录归属一个类,最后一列为类标签,表示患者是否在5年之内感染的糖尿病。
如果是,则为1,否则为0
下面是文件的地址,以.csv扩展名保存
第一次写,如有不足,请多多包涵
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 29 10:49:47 2017
@author: Administrator
"""
import csv
import numpy as np
import math
#处理数据
data_name='data.csv'
np.random.seed(2017)
#训练集:80% 测试集:20%
def splitData(filename):
testSets=[]
trainSets=[]
lines=list(csv.reader(open(filename,'r')))
for line in lines:
p=np.random.randint(100)
if p<20:
testSets.append(line)
else:
trainSets.append(line)
return trainSets,testSets
trainSets,testSets=splitData(data_name)
#分为特征和类别
def fea_and_class(trs,tes):
tr_feas0=[]
tr_feas1=[]
tr_dict={}
te_feas0=[]
te_feas1=[]
te_dict={}
for tr in trs:
tr_fea=[float(x) for x in tr[:8]]
tr_cl=int(tr[-1])
if tr_cl==0:
#tr_dict[tr_cl]=tr_fea
tr_feas0.append(tr_fea)
if tr_cl==1:
tr_feas1.append(tr_fea)
tr_dict[0]=tr_feas0
tr_dict[1]=tr_feas1
for te in tes:
te_fea=[float(x) for x in te[:8]] #前八个为特征,最后一个为类别标签
te_cl=int(te[-1])
#te_dict[te_cl]=te_fea
if te_cl==0:
te_feas0.append(te_fea)
if te_cl==1:
te_feas1.append(te_fea)
te_dict[0]=te_feas0
te_dict[1]=te_feas1
return tr_dict,te_dict
#return tr_dict,te_dict
tr_dict,te_dict=fea_and_class(trainSets,testSets)
#提取训练集的属性特征
'''
trDict={}
tr=[]
te=[]
for i in range(len(tr_class)):
if tr_class[i][0]==0:
tr.append(trSets[i])
if tr_class[i][0]==1:
te.append(trSets[i])
trDict[0]=tr
trDict[1]=te
'''
#训练集的同一类的均值,方差
tr_mean0=np.mean(tr_dict[0],axis=0)
tr_var0=np.var(tr_dict[0],axis=0)
tr_mean1=np.mean(tr_dict[1],axis=0)
tr_var1=np.var(tr_dict[1],axis=0)
#假设数据服从高斯分布
def gaussian(x,mu,sigma):
val=1/math.sqrt(2*math.pi*sigma)
return val*(math.exp((-(x-mu)**2)/(2*sigma)))
#values=gaussian(10.0,tr_mean0[0],tr_var0[0])
pre_cla0=[]
pre_cla1=[]
#对于测试集,判断其属于哪些类,并计算准确率,假设特征独立同分布
for te0 in te_dict[0]:
val0=1
val1=1
for i in range(len(te0)):
val0=gaussian(te0[i],tr_mean0[i],tr_var0[i])
val0*=val0
val1=gaussian(te0[i],tr_mean1[i],tr_var1[i])
val1*=val1
if val0>val1:
classes=0
else:
classes=1
pre_cla0.append(classes)
for te1 in te_dict[1]:
val0_=1
val1_=1
for i in range(len(te1)):
val0_=gaussian(te1[i],tr_mean0[i],tr_var0[i])
val0_*=val0_
val1_=gaussian(te1[i],tr_mean1[i],tr_var1[i])
val1_*=val1_
if val0_>val1_:
classes=0
else:
classes=1
pre_cla1.append(classes)
count=0
for pre_cla0_each in pre_cla0:
if pre_cla0_each==0:
count+=1
for pre_cla1_each in pre_cla1:
if pre_cla1_each==1:
count+=1
acc=count/(len(pre_cla0)+len(pre_cla1))
python实现贝叶斯分类器_python实现简单的朴素贝叶斯分类器相关推荐
- 实现贝叶斯分类器_机器学习实战项目-朴素贝叶斯
朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础--贝叶斯定理.最后,我们通过实例来讨论贝叶斯分类的中最简单的一种: ...
- 利用Python实现多元伯努利事件的朴素贝叶斯分类器
前言 本篇博客所写的算法对应于吴恩达教授的机器学习教程里的多元伯努利事件模型的朴素贝叶斯. 多元伯努利事件模型的Python代码 #!/usr/bin/env python # -*- coding: ...
- sklearn朴素贝叶斯分类器_python机器学习:方法链和朴素贝叶斯分类器
今天我们在学习朴素贝叶斯分类器之前,我们先来总结下前面经常用到的内容,方法链:在scikit-learn中所有模型的fit方法返回的都是self.我们用一行代码初始化模型并拟合,对应代码如下:logr ...
- 贝叶斯分类器_Sklearn 中的朴素贝叶斯分类器
(给Python开发者加星标,提升Python技能) 作者:Martin Müller,翻译:github-sisibeloved https://github.com/xitu/gold-miner ...
- python机器学习案例系列教程——文档分类器,朴素贝叶斯分类器,费舍尔分类器
全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 github地址:https://github.com/626626cdllp/data-mining/tree/master/Bay ...
- python 贝叶斯分类器sklearn_Sklearn 中的朴素贝叶斯分类器
原标题:Sklearn 中的朴素贝叶斯分类器 作者:Martin Müller,翻译:github-sisibeloved https://github.com/xitu/gold-miner/blo ...
- 【贝叶斯分类2】朴素贝叶斯分类器
文章目录 1. 贝叶斯决策论回顾 1.1 分类原理 1.2 贝叶斯分类器 1.3 P(c|x) 1.4 计算公式 1.5 极大似然估计 2. 朴素贝叶斯分类器学习笔记 2.1 引言 2.2 知识卡片 ...
- 【贝叶斯分类3】半朴素贝叶斯分类器
文章目录 1. 朴素贝叶斯分类器知识回顾 1.1 类别,特征 1.2 风险,概率 1.3 类条件概率 2. 半朴素贝叶斯分类器学习笔记 2.1 引言 2.2 知识卡片 2.3 半朴素贝叶斯分类器 2. ...
- python朴素贝叶斯分类器实现_用scikit-learn实现朴素贝叶斯分类器
朴素贝叶斯(Naive Bayes Classifier)是一种「天真」的算法(假定所有特征发生概率是独立的),同时也是一种简单有效的常用分类算法.关于它的原理,参见朴素贝叶斯分类器的应用. scik ...
最新文章
- ASP.NET Session 详解
- Matlab百度中Cell(单元数据)的用法
- 开发每个静态网站是的模版代码(自己开发是长期优化过的觉得最简的代码)
- 有初学的同学问你为什么Java的main方法必须是public static void?请告诉ta!
- 命令行解析的规则以及Command Line Parser Library
- P2446 [SDOI2010]大陆争霸
- html中购物车总金怎么算额,计算购物车金额总和( jquery )
- jQuery之滚动事件$(window).scroll(function()
- 网络01:双无线路由器无缝对接设置
- axios 发get,post 请求小结
- 基于MQTT的消息推送环境搭建
- java复习即基础知识点 思维导图
- 语音文件怎么转换文字?这两个方法就能轻松解决。
- STC15W201S串口蓝牙通信PWM控制RGB彩灯
- Microsoft Office Word 2007 转换为 Microsoft Office Word 2003兼容方法
- linux解压文件后重命名,tar 解压,重命名
- 一个优秀的网站首页是如何设计的?
- 隐函数存在定理1及求导公式_20160505
- 开发Enterprise JavaBeans
- 叉乘点乘混合运算公式_初中数学根式运算法则公式
热门文章
- oracle数据库升级失败,Oracle 11.2.0.1 rac 升级失败后,数据库降级方案(flashback database)...
- 我所知道的Ribbon库
- 台式计算机欢迎界面下不去,Win7系统开机不显示欢迎界面的方法
- linux javaweb环境单价,linux(centos)下Java Web环境开发
- python迭代器使用_Python迭代器的用法
- java 监控 native 内存_JVM NativeMemoryTracking 分析堆外内存泄露
- python能不能用c打开文件_C/C++/Python等 使用二进制模式打开文件与不使用二进制模式的区别...
- sqlserver迁移数据到mysql_SQLServer数据库之将ABP的数据库从SQLSERVER迁移到MySql
- sql显示前10行数据_SPL 简化 SQL 案例详解:计算各组前 N 行
- CSS属性选择器温故-4