模式识别课程,统计了学生的身高体重鞋码等数据,利用贝叶斯分类器,分别计算协方差为单位阵、协方差为一样、协方差不同时候的准确率,以下为实现代码。代码很乱。。
数据下载:
链接:https://pan.baidu.com/s/1s5eQwivZQD941UB8QQvI0A
提取码:uhaz

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import mglearn
import sklearn
from sklearn import metrics
import math
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import MinMaxScaler
path='C:/pypractise/4/liver_patient_prediction/survey_data.xls'#文件路径
def preprocessing_data(data): #将数据缩放到0-1之间(程序中未使用)scaler=MinMaxScaler()scaler.fit(data)data_scaled=scaler.transform(data)return data_scaled
def pro_xiema():#处理鞋号统一成厘米数xiema=[]data=pd.read_excel(path)data_xiema=data['鞋码']data_np=np.array(data_xiema)for i in data_np:if i<30:xiema.append(float(i))elif i<45:i=(i+10)/2xiema.append(float(i))else:i=i/10xiema.append(float(i))return xiema
def read_data(path):#读数据   data=pd.read_excel(path)data['鞋码'] = pro_xiema()                   return data
def calculate_cov(height,weight,feet):#计算协方差和逆,输入为身高体重脚长,返回值为协方差矩阵和其逆xx=np.cov(height)yy=np.cov(weight)zz=np.cov(feet)xy=np.cov(height,weight)xz=np.cov(height,feet)yz=np.cov(weight,feet)cov=[[xx,xy[0,1],xz[0,1]],[xy[0,1],yy,yz[0,1]],[xz[0,1],yz[0,1],zz]]cov=np.array(cov,dtype=float)cov_inverse = np.linalg.inv(cov)return cov,cov_inverse
def bayes_net1(X_train): ###贝叶斯网络计算协方差为单位阵,输入为train——身高体重鞋码的数据np.transpose(X_train)   #贝叶斯多维正太分布似然函数I=[[1,0,0],[0,1,1],[0,0,1]]data=read_data(path)
#  分别求男女的  协方差data_b=data[data['性别']==0]   #男生数据data_g=data[data['性别']==1]   #女生数据
#    #得到女生的参数data_g=np.array(data_g)data_b=np.array(data_b)height_g=data_g[:,2]   #得到女生的身高体重鞋码weight_g=data_g[:,3]feet_g=data_g[:,5]
#    #得到男生的参数height_b=data_b[:,2]   #得到男生的身高体重鞋码weight_b=data_b[:,3]feet_b=data_b[:,5]   ########****************************#############以上为读数据        #计算男生的均值矩阵u_b=[np.mean(height_b),np.mean(weight_b),np.mean(feet_b)]  #计算女生的均值矩阵u_g=[np.mean(height_g),np.mean(weight_g),np.mean(feet_g)]u_b=np.array([u_b])   #数组化u_g=np.array([u_g])   #数组化
#########****************************############以上为求u  #计算整体的公式#协方差为单位阵时候q1=math.log(np.linalg.det(I))q2=np.dot(np.dot((X_train-u_b),I),np.transpose(X_train-u_b))q3=3*math.log(2*3.14)q4=math.log(np.linalg.det(I))q5=np.dot(np.dot((X_train-u_g),I),np.transpose(X_train-u_g))ln_b=-1/2*(q1+q2+q3)ln_g=-1/2*(q4+q5+q3)       #进行预测,并返回男生还是女生if ln_b-ln_g>0:pre=0else:pre=1    return pre
def bayes_net2(X_train): ###贝叶斯网络(协方差一样)计算,输入为train——身高体重鞋码的数据np.transpose(X_train)   data=read_data(path)#分别的得到身高体重鞋码的数据data_h=data['身高']   data_w=data['体重']data_x=data['鞋码']
#  分别求男女的u值data_b=data[data['性别']==0]   #男生数据data_g=data[data['性别']==1]   #女生数据
#    #得到女生的参数data_g=np.array(data_g)data_b=np.array(data_b)height_g=data_g[:,2]   #得到女生的身高体重鞋码weight_g=data_g[:,3]feet_g=data_g[:,5]
#    #得到男生的参数height_b=data_b[:,2]   #得到男生的身高体重鞋码weight_b=data_b[:,3]feet_b=data_b[:,5]
########****************************#############以上为读数据 #计算男生的均值矩阵u_b=[np.mean(height_b),np.mean(weight_b),np.mean(feet_b)]  #计算女生的均值矩阵u_g=[np.mean(height_g),np.mean(weight_g),np.mean(feet_g)]u_b=np.array([u_b])   #数组化u_g=np.array([u_g])   #数组化 #    计算整体协方差和逆cov_all,cov_all_inversed=calculate_cov(data_h,data_w,data_x)
#########****************************############以上为求u和协方差矩阵    #计算整体的公式q1=math.log(np.linalg.det(cov_all))q2=np.dot(np.dot((X_train-u_b),cov_all_inversed),np.transpose(X_train-u_b))q3=3*math.log(2*3.14)q4=math.log(np.linalg.det(cov_all))q5=np.dot(np.dot((X_train-u_g),cov_all_inversed),np.transpose(X_train-u_g))    ln_b=-1/2*(q1+q2+q3)ln_g=-1/2*(q4+q5+q3)       #进行预测,并返回男生还是女生if ln_b-ln_g>0:pre=0else:pre=1 return pre
def bayes_net3(X_train): ###贝叶斯网络计算(分开求cov),输入为train——身高体重鞋码的数据np.transpose(X_train)   data=read_data(path)#分别的得到身高体重鞋码的数据
#  分别求男女的  协方差data_b=data[data['性别']==0]   #男生数据data_g=data[data['性别']==1]   #女生数据
#    #得到女生的参数data_g=np.array(data_g)data_b=np.array(data_b)height_g=data_g[:,2]   #得到女生的身高体重鞋码weight_g=data_g[:,3]feet_g=data_g[:,5]
#    #得到男生的参数height_b=data_b[:,2]   #得到男生的身高体重鞋码weight_b=data_b[:,3]feet_b=data_b[:,5]
########****************************#############以上为读数据       #计算男生的均值矩阵u_b=[np.mean(height_b),np.mean(weight_b),np.mean(feet_b)]  #计算女生的均值矩阵u_g=[np.mean(height_g),np.mean(weight_g),np.mean(feet_g)]u_b=np.array([u_b])   #数组化u_g=np.array([u_g])   #数组化#求男生的协方差矩阵和其逆矩阵,输入参数为男身高体重鞋码cov_b,cov_b_inversed=calculate_cov(height_b,weight_b,feet_b) #求女生的协方差矩阵和其逆矩阵,输入参数为女身高体重鞋码cov_g,cov_g_inversed=calculate_cov(height_g,weight_g,feet_g)      #########****************************############以上为求u和协方差矩阵
#    协方差为各自求的时候算Lnq1=math.log(np.linalg.det(cov_b))q2=np.dot(np.dot((X_train-u_b),cov_b_inversed),np.transpose(X_train-u_b))q3=3*math.log(2*3.14)q4=math.log(np.linalg.det(cov_g))q5=np.dot(np.dot((X_train-u_g),cov_g_inversed),np.transpose(X_train-u_g))ln_b=-1/2*(q1+q2+q3)ln_g=-1/2*(q4+q5+q3)       #进行预测,并返回男生还是女生if ln_b-ln_g>0:pre=0else:pre=1 return pre
def data_scatter(x,y):   data=read_data(path)   data_b=data[data['性别']==0]   #男生数据data_g=data[data['性别']==1]   #女生数据data_b=np.array(data_b) data_g=np.array(data_g) #特征: 2为身高  3为体重,4为年龄,5为鞋码plt.scatter(data_b[:,x],data_b[:,y],c='r',label="boy",s=60)plt.scatter(data_g[:,x],data_g[:,y],c='b',label="girl",s=60)plt.xlabel('height')plt.ylabel('xiema')plt.legend(loc='upper right')plt.show()
def train1():    #机器学习的贝叶斯分类feature= ['身高', '体重', '鞋码']     data=read_data(path)X=data[feature]    y=data['性别']        X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.30)            from sklearn.naive_bayes import GaussianNBclf = GaussianNB()clf = clf.fit(X_train, y_train)y_pred=clf.predict(X_test)print("样本总数: %d 错误样本数 : %d" % (X_test.shape[0],(y_test != y_pred).sum()))print("sorce:{:.2f}".format(np.mean(y_pred==y_test)))def train2():count=0feature= ['身高', '体重', '鞋码']     data=read_data(path)X=data[feature]    y=data['性别']X=np.array(X) y=np.array(y)for i in range(len(y)):shuju=X[i:i+1]  #依次取数据(身高 体重 脚长)进行预测 y_pre=bayes_net3(shuju)if y_pre==y[i]:count+=1        #预测正确就加一acc=count/len(y)        #计算准确率print("准确率是:{}".format(acc))train2()
#特征: 2为身高  3为体重,4为年龄,5为鞋码
#data_scatter(2,3)

贝叶斯函数编程,测试男女性别数据相关推荐

  1. 机器学习实战:朴素贝叶斯算法在新闻文本数据上的分类表现

    https://www.toutiao.com/a6647102437532369421/ 2019-01-17 08:01:00 大家好,今天跟大家学习一下通过sklearn的朴素贝叶斯模型实战.前 ...

  2. 使用说明 vector_Paddlepaddle学习|Ubuntu环境使用 Mahout 进行朴素贝叶斯模型的训练和测试...

    朴素贝叶斯算法是基于贝叶斯定理与特征条件独立假设的分类方法.分类是 将一个未知样本分到几个预先已知类的过程.解决数据分类问题有两步:第一步, 建立一个模型,描述预先的数据集或概念集,通过分析由属性描述 ...

  3. 清华团队通过监督贝叶斯嵌入,对单细胞染色质可及性数据进行细胞类型注释...

    本文约3200字,建议阅读9分钟 本文介绍了清华团队在单细胞技术的最新进展. 单细胞技术的最新进展使得能够在细胞水平上表征表观基因组异质性.鉴于细胞数量呈指数增长,迫切需要用于自动细胞类型注释的计算方 ...

  4. 【视频】线性回归中的贝叶斯推断与R语言预测工人工资数据|数据分享

    最近我们被客户要求撰写关于线性回归的研究报告,包括一些图形和统计输出. 在这个视频中,我们转向简单线性回归中的贝叶斯推断. 我们将使用一个参照先验分布,它提供了频率主义解决方案和贝叶斯答案之间的联系. ...

  5. 贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析免疫球蛋白、前列腺癌数据...

    原文链接:http://tecdat.cn/?p=22702 贝叶斯回归分位数在最近的文献中受到广泛关注,本文实现了贝叶斯系数估计和回归分位数(RQ)中的变量选择,带有lasso和自适应lasso惩罚 ...

  6. 自编程实现朴素贝叶斯算法,Navie Bayes程序(python),并对鸢尾花数据进行分类。

    自编程实现朴素贝叶斯算法,Navie Bayes程序(python),并对鸢尾花数据进行分类. 目录 自编程实现朴素贝叶斯算法,Navie Bayes程序(python),并对鸢尾花数据进行分类. 朴 ...

  7. 5 机器学习 朴素贝叶斯算法 高斯模型 多项式模型 伯努利模型 拉普拉普平滑系数 TfidfVectorizer

    机器学习 1 朴素贝叶斯算法 1.1 朴素贝叶斯算法介绍 朴素贝叶斯算法是一种衡量标签和特征之间概率关系的监督学习算法,是一种专注于分类的算法."朴素"二字表示这个算法基于一个朴素 ...

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

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

  9. [zt]数学之美番外篇:平凡而又神奇的贝叶斯方法

    数学之美番外篇:平凡而又神奇的贝叶斯方法 Tags: 数学, 机器学习与人工智能, 计算机科学 save it69 saved tags: 贝叶斯 math bayesian algorithm 数学 ...

最新文章

  1. ls:显示指定目录的详细信息
  2. 浏览器获取文件MD5值
  3. 做为技术人员为什么要写博客?
  4. r导出html怎么保存,做植物谱系图,用Phylomatic软件将网页中的输出结果拷贝到文本文件中, 并另存为phylo...
  5. 统计数字字符个数(信息学奥赛一本通-T1129)
  6. C语言---链表的基本应用
  7. HTML DOM 对象简单介绍
  8. C/C++中struct结构体定义变量的3种方法及初始化
  9. 如何打开KML和KMZ文件并与卫星影像叠加
  10. JAVA实现类泡泡屏保效果
  11. wps插入C/C++代码
  12. 【TPU和GPU,谁将一统AI芯片】摩尔定律之后一万倍,10万+热文引爆激辩
  13. python全排列,递归
  14. Java Web篇:导出等比例图片到Excel
  15. windows下安装lxml
  16. python语音计算信噪比
  17. Matlab计算语音信噪比
  18. shop源码PHP免授权,ShopsN五核全网免费开源电商系统 v2.4.0(拼团)
  19. 提高与高权重网站交换友情链接成功率
  20. word文档中画垂直或水平的线条

热门文章

  1. ABAP EWM模拟 /SCWM/ADGI过账更改HU数量
  2. 基于windows中委派的攻击思路(下)-基于资源的约束性委派
  3. Sharding-Sphere的应用性能监控实践
  4. java 断言 assert 初步使用:断言开启、断言使用
  5. Javascript实现扫雷游戏
  6. Istio服务网格详解
  7. 关于电脑外设键盘的讲解
  8. 【NOIP2012提高组】国王游戏
  9. (OK) Android命令行测试BT,WIFI,Sensor工作状态 — svc
  10. #ifndef的神仙用法