使用数据利用贝叶斯决策理论设计分类决策面
模式识别作业,老师收集了全班学生的性别身高体重和脚长信息等数据来设计分类决策面。python 编程实现分类决策面,数据集在这里下载
编程代码比较简单,实现的是模式识别第三版(张学工老师)28页的理论。
协方差矩阵有三种情况:
1.每一类的协方差矩阵都相同,且都等于对角阵。
2.每一类的协方差矩阵都相同。
3.各类协方差矩阵不相同。
条件的限制一步步放松,所以也越来越难编写。本程序未编写第一类情况,请读者自行编写。
有任何问题请留言或发邮件18125081@bjtu.edu.cn
case2分类器图片:
case3分类器图片:
该分类器和模式识别第三版课本32页的(d)图的决策面形式相同。
代码如下
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import preprocessing as process
from sklearn.metrics import roc_curve, auc
'''
data_process 功能:
输入:文件路径,
输出:男女的归一化样本数据矩阵
'''
def data_process(load_road):
X = pd.read_excel(load_road)
del X['序号']
del X['年龄']
num = len(X['性别'])
gender = X['性别'].tolist()
height = X['身高'].tolist()
weight = X['体重'].tolist()
food_length = X['脚长'].tolist()
#--------------性别数据处理函数实现----------------
for i in range(num):
if gender[i] == '女':
gender[i] = 0
elif gender[i] == '男':
gender[i] = 1
#--------------身高数据处理函数实现----------------
for i in range(num):
height[i] = str(height[i])
height[i] = height[i].replace('m', '')
height[i] = height[i].replace('M', '')
height[i] = height[i].replace('米', '')
if float(height[i]) > 100:
height[i] = float(height[i]) / 100
height[i] = float(height[i])
# --------------体重数据处理函数实现----------------
for i in range(num):
weight[i] = str(weight[i])
weight[i] = weight[i].replace('千克', '')
weight[i] = weight[i].replace('KG', '')
weight[i] = weight[i].replace('kg', '')
weight[i] = weight[i].replace('Kg', '')
weight[i] = weight[i].replace('kG', ''