模式识别:最小错误率贝叶斯决策分类

2023-05-16

一、引言

1.用贝叶斯决策理论分类要事先知道两个条件及要求:

①.各类的先验概率:P(w_i)

及特征向量的条件概率密度:p(x|w_i)

或后验概率:P(w_i|x)

②.决策分类的类别一定

2.解决的问题:

已知一定数目的样本,设计分类器,对未知样本进行分类。

3.基于样本的两步贝叶斯决策

①首先根据样本估计P(w_i)p(x|w_i)

记为\widehat{P}(w_i)\widehat{p}(x|w_i)

②然后用估计的概率密度设计贝叶斯分类器

前提:训练样本的分布能代表样本的真实分布。每个样本集中的样本都是所谓独立同分布的随机变量,且有充分的训练样本

假设:当样本数N →∞时,如此得到的分类器收敛于理论上的最优解。 即满足:

\widehat{P}(w_i)P(w_i)\widehat{p}(x|w_i)p(x|w_i)

4.先验概率与条件概率密度估计

①类的先验概率估计:可依靠经验或训练数据中各类出现的频率估计,交容易实现;

②类条件概率密度的估计:概率密度函数包含了一个随机变量的全部信息,估计起来比较困难。

5.概率密度估计的两种基本方法

①参数估计:根据对问题的一般性的认识,假设随机变量服从某种分布,分布函数的参数通过训练数据来估计。如:ML 估计,Bayesian估计

②非参数估计:不用模型,而只利用训练数据本身对概率密度做估计。如:Parzen窗法,kn-近邻估计法。

下面只着重介绍参数估计

二、最大似然估计与贝叶斯参数估计

1.最大似然估计基本原理

先做以下假设:

①估计的参数记为:\theta。它是确定但未知的量(多个参数时为向量);

②每类的样本集记作:\chi_ii=1,2,...,c,

其中样本都是从密度为p(x|w_i)的总体中独立抽取出来的,满足独立同分布条件;

③类条件概率密度p(x|w_i)具有某种确定的函数形式,只是其中的参数\theta未知;

④各类样本只包含本类的分布信息,不同类别的参数是独立的,这样就可以分别对每一类单独处理。

现有以下样本:\chi=\{x_1,x_2,...,x_N\}

有了以上假设,则获得以上样本的概率即出现样本中各个样本的联合概率是:

l(\theta)=p(\chi|\theta)=p(x_1,x_2,...,x_N)=\prod_{i=1}^{N}{p(x_i|\theta)}

最大似然估计,通俗的理解,即为:参数为多少时观测值出现的概率最大。

最大似然估计量:\widehat{\theta}=arg \space max\space l(\theta)

还可以定义对数似然函数:

H(\theta)=lnl(\theta)=ln\prod_{i=1}^{N}{p(x_i|\theta)}=\sum_{i=1}^{N}{lnp(x_i|\theta)}

2.最大似然估计的求解

①若待估参数为一维变量,即待估参数只有一个,其最大似然估计量就是如下微分方程的解:

\frac{dl(\theta)}{d\theta}=0\frac{dH(\theta)}{d\theta}=0

当待估参数为多个未知参数组成的向量时,即:\theta=[\theta_1;...;\theta_s]

求解似然函数的最大值就需要对该参数的每一维分别求导,即用下面的梯度算子:

\nabla_\theta=[\frac{\partial}{\partial\theta_1};...,\frac{\partial}{\partial\theta_s}]

\nabla_\theta{l(\theta)}=0

\nabla_\theta{H(\theta)}=\sum_{i=1}^{N}{\nabla_\theta{lnp(x_i|\theta)}}=0

3.正态分布下的最大似然估计

仅以单变量正态分布情况估计其均值与方差:\theta=[\theta_1;\theta_2]=[\mu;\sigma^2]

单变量正态分布如下:

p(x|\theta)=\frac{1}{\sqrt{2\pi}\sigma}exp[-\frac{1}{2}(\frac{x-\mu}{\sigma})^2]

从上述正太分布式可以得到:

lnp(x_k|\theta)=-\frac{1}{2}ln2\pi\theta_2-\frac{1}{2\theta_2}(x_k-\theta_1)^2

分别对两个位置参数求偏导,得到:

\nabla_\theta{lnp(x_k|\theta)}=[\frac{1}{\theta_2}(x_k-\theta_1);-\frac{1}{2\theta_2}+\frac{1}{2\theta_2^2}(x_k-\theta_1)^2]

最大似然估计应该是以下方程组的解:

\sum_{k=1}^{N}\frac{1}{\widehat\theta_2}(x_k-\widehat\theta_1)=0与 -\sum_{k=1}^{N}\frac{1}{\widehat\theta_2}+\sum_{k=1}^{N}\frac{(x_k-\widehat\theta_1)^2}{\widehat\theta_2^2}=0

解得:

\widehat\mu=\widehat\theta_1=\frac{1}{N}\sum_{k=1}^{N}x_k......................(2.1)      

\widehat{\sigma^2}=\widehat\theta_2=\frac{1}{N}\sum_{k=1}^{N}(x_k-\widehat\mu)^2..........(2.2)

ML估计总结:

①简单性

②收敛性:无偏或者渐近无偏

③如果假设的类条件概率模型正确,则通常能获得较好的结果。但果假设模型出现偏差,将导致非常差的估计结果。

4.贝叶斯估计基本原理

可以把概率密度函数的参数估计问题看作一个贝叶斯决策问题,但这里决策的不是离散类别,而是参数的值,是在连续空间里做的决策。

在用于分类的贝叶斯决策中,最优的条件可以是最小错误率或者最小风险。对连续变量:\theta,我们假定把它估计为:\widehat\theta

所带来的损失函数为:\lambda(\widehat\theta,\theta)

定义在样本x下的条件风险为:R(\widehat\theta|x)=\int_{\Theta}{\lambda(\widehat\theta,\theta)}p(\theta|x)d\theta

则估计时总期望风险为:R=\int_{E^d}{R(\widehat\theta|x)}p(x)dx

现在的目标是对期望风险求最小,而条件风险都是非负的,求期望风险最小就等价于对所有可能的x求条件风险最小。在有限样本集合的情况下,我们所作的就是对所有的样本求条件风险最小,即:\theta^*=arg \space \min_{\widehat\theta}\space R(\widehat\theta|\chi)=\int_{\Theta}{\lambda(\widehat\theta,\theta)}p(\theta|\chi)d\theta

在决策分类时,需要事先定义决策表即损失表,连续情况下需要定义损失函数,最常用的损失函数是平方误差损失函数,即:\lambda(\widehat\theta,\theta)=(\theta-\widehat\theta)^2

可以证明,如果采用平方误差损失函数,则θ 的贝叶斯估计量θ*是在给定x 时θ 的条件期望,即:\theta^*=E[\theta|x]=\int_{\Theta}{\theta}p(\theta|x)d\theta

在许多情况下 ,最小方差贝叶斯估计是最理想的,是贝叶斯的最优估计。

5.求贝叶斯估计的方法:(平方误差损失下)

①确定未知参数θ的先验分布密度 p(θ)

②求样本集的联合分布:p(\chi|\theta)=\prod_{i=1}^{N}{p(x_i|\theta)}

③利用贝叶斯公式求θ的 后验概率分布:p(\theta|\chi)=\frac{p(\chi|\theta)p(\theta)}{\int_{\Theta}p(\chi|\theta)p(\theta)d\theta}

④求θ的贝叶斯估计量是:\theta^*=\int_{\Theta}{\theta}p(\theta|\chi)d\theta

6.正态分布时的贝叶斯估计

以最简单的一维正态分布模型为例来说明贝叶斯估计的应用。假设均值u为待估计参数,方差为已知。

均值u的先验分布也是正态分布,即:p(\mu)=\frac{1}{\sqrt{2\pi}\sigma_0}exp[-\frac{1}{2}(\frac{\mu-\mu_0}{\sigma_0})^2]

求μ的后验概率:p(\mu|\chi)=\frac{p(\chi|\mu)p(\mu)}{\int_{\Theta}p(\chi|\mu)p(\mu)d\mu}

分母只是用来对估计的后验概率进行归一化的常数项,可以暂时不考虑:

p(\mu|\chi)=\alpha\space p(\chi|\mu)p(\mu)=\alpha\space \frac{1}{\sqrt{2\pi}\sigma_0}exp[-\frac{1}{2}(\frac{\mu-\mu_0}{\sigma_0})^2]\prod_{i=1}^{N}{ \frac{1}{\sqrt{2\pi}\sigma}exp[-\frac{1}{2}(\frac{x_i-\mu}{\sigma})^2]}

整理得:

p(\mu|\chi)=\alpha^,\space exp(-\frac{1}{2}((\frac{N}{\sigma^2}+\frac{1}{\sigma_0^2})\mu^2-2(\frac{1}{\sigma^2}\sum_{k=1}^{N}x_i+\frac{\mu_0}{\sigma_0^2})\mu)))=\frac{1}{\sqrt{2\pi}\sigma_N}exp[-\frac{1}{2}(\frac{\mu-\mu_N}{\sigma_N})^2]

由两式指数项中对应的系数相等得:

\frac{1}{\sigma_N^2}=\frac{N}{\sigma^2}+\frac{1}{\sigma_0^2}\frac{\mu_N}{\sigma_N^2}=\frac{N}{\sigma^2}\widehat\mu_N+\frac{\mu_N}{\sigma_0^2}

其中,\widehat\mu_N=\frac{1}{N}\sum_{i=1}^{N}x_i

求解上述方程组得:

\mu_N=\frac{N\sigma_0^2}{N\sigma_0^2+\sigma^2}\widehat\mu_N+\frac{\sigma^2}{N\sigma_0^2+\sigma^2}\mu_0

\sigma_N^2=\frac{\sigma^2\sigma_0^2}{N\sigma_0^2+\sigma^2}

求μ的贝叶斯估计值:μ 的期望

\widehat\mu=\int{\mu}p(\mu|\chi)d\mu=\int{\mu}\frac{1}{\sqrt{2\pi}\sigma_N}exp[-\frac{1}{2}(\frac{\mu-\mu_N}{\sigma_N})^2]d\mu=\mu_N

①样本数目趋于无穷大时,第一项的系数趋于1,第二项系数趋于0,则估计的均值就是样本的算术平均,这与最大似然估计一致。

②当样本数目有限,若先验知识非常确定,则先验分布的方差就很小,则第一项系数就很小,第二项系数接近1,则估计主要由先验知识决定。

一般情况下,均值得贝叶斯估计是样本算术平均与先验分布均值之间进行加权平均。

总结:通过观察数据集X ,将先验概率密度P(θ) 转化为后验概率密度 P(θ|X) ,并期望其在真实的θ 值处有一个尖峰

7.ML估计和Bayesian估计的比较

①ML估计

1.参数为未知确定变量

2.没有利用参数先验信息

3.估计的概率模型与假设模型一致

4.可理解性好

5.计算简单

②Bayesian估计

1.参数为未知随机变量

2.利用参数的先验信息

3.估计的概率模型相比于假设模型会发生变化

4.可理解性差

5.计算复杂

三、分类器设计

1.常用概念

c类分类决策问题:按决策规则把d维特征空间分为 为c个决策区域。

决策面:划分决策域的边界面称为决策面,数学上用决策面方程表示。

判别函数:表达决策规则的函数,称为判别函数。

2.具体的判别函数、决策面方程、分类器设计

①定义一组判别函数:g_i(x) \space\space\space i=1,2,...,c

根据决策规则:g_i(x)>g_j(x) \space\space j\neq i,即:g_i(x)=\max_{j=1,2,...,c}g_j(x) \space\space x\epsilon w_i

例如基于最小错误率贝叶斯判决规则,判别函数可定义为:

g_i(x)=P(w_i|x)\space or \space g_i(x)=p(x|w_i)p(w_i) \space or \space g_i(x)=lnp(x|w_i)+lnp(w_i)

②决策面方程

类型w i 与w j 的 区域相邻,它们之间的决策面方程为:g_i(x)=g_j(x)

一维特征空间的两个决策区域(d=1),决策面为分界点;

二维特征空间的两个决策区域(d=2),决策面为曲线;

三维特征空间,分界处是曲面;d维特征空间,分界处是超曲面。

3.正态分布下的最小错误率贝叶斯判别函数和决策面

1.判别函数:g_i(x)=p(x|w_i)p(w_i)

其中:p(x|w_i)服从:N(\mu_i,\Sigma{_i}) \space i=1,2,...,c

p(x|w_i)=\frac{1}{(2\pi)^{d/2}|\Sigma{_i}|^{1/2}}exp[-\frac{1}{2}(x-\mu_i)^T\Sigma{_i}^{-1}(x-\mu_i)]

进行单调的对数变换,则判别函数为:

g_i(x)=ln[p(x|w_i)p(w_i)]=-\frac{1}{2}(x-\mu_i)^T\Sigma{_i}^{-1}(x-\mu_i)-\frac{d}{2}ln2\pi-ln\frac{1}{2}|\Sigma{_i}|+lnp(w_i)

2.决策方程:

g_i(x)-g_j(x)=-\frac{1}{2}[(x-\mu_i)^T\Sigma{_i}^{-1}(x-\mu_i)-(x-\mu_j)^T\Sigma{_j}^{-1}(x-\mu_j)]-ln\frac{1}{2}\frac{|\Sigma{_i}|}{|\Sigma{_j}|}+ln\frac{p(w_i)}{p(w_j)}=0

四、实验举例

1.实验内容

1.以身高为例,画出男女生身高的直方图并做对比;

2.采用最大似然估计方法,求男女生身高以及体重分布的参数;

3.采用贝叶斯估计方法,求男女生身高以及体重分布的参数(注明自己选定的参数情况);

4.采用最小错误率贝叶斯决策,画出类别判定的决策面。并判断某样本的身高体重分别为(160,45)时应该属于男生还是女生?为(178,70)时呢?

2.具体步骤

1.通过python的xlrd包相应的库函数来读取excel文件中的数据,并将需要处理的数据存储与数组中,并通过matplotlib库函数画出男生和女生的身高分布直方图,如图一:

                                                                                                图一

结果分析:从图中可以看,男女生的身高分布没有完全服从正态分布,主要由于样本数量比较少。很多时候,正态分布模型是一个合理假设。在特征空间中,某类样本较多分布在这类均值附近,远离均值的样本较少,一般用正态分布模型是合理的。在后续的实验分析中都将运用正态分布特性对男女生的样本进行分析。

2.采用最大似然估计方法,求男女生身高以及体重分布的参数;

假设身高体重相互独立并且都满足正态分布,采用最大似然法估计其参数,根据公式2.1、2.2求出男女生身高和体重的均值和方差。所求得的参数如表一所示:

 

女生身高

女生体重

男生身高

男生体重

均值(μ)

162.3125

50.7447

173.7388

66.0923

方差(σ2)

17.3606

21.1978

27.9827

86.5551

3.采用贝叶斯估计方法,求男女生身高以及体重分布的参数(假定方差已知,作业请注明自己选定的一些参数情况)。

特殊情况1:(先验知识可靠,样本不起作用),即

'''
特殊情况1:
variance0=0时,mean_bayes=mean0
先验知识可靠,样本不起作用
#以男生身高为例,选定参数:mean0=20,variance=10,variance0=0
'''
man_height_mean_bayes=get_mean_bayes(man_height,20,0,10)
print(man_height_mean_bayes)
 

结果为:20.0

特殊情况2:(先验知识十分不确定,完全依靠样本信息),即:

'''
特殊情况2:
variance0>>variance时,mean_bayes=sample_mean
先验知识十分不确定,完全依靠样本信息,结果与最大似然估计结果近似
#以女生身高为例,选定参数:mean0=50,variance=1,variance0=100
'''
woman_height_mean_bayes=get_mean_bayes(woman_height,50,100,1)
print(woman_height_mean_bayes)
 

 

结果为:162.3008019997917

4.采用最小错误率贝叶斯决策,画出类别判定的决策面。并判断某样本的身高体重分别为(160,45)时应该属于男生还是女生?为(178,70)时呢?

假设男女生身高及体重满足二维正态分布,记男生为w1,女生为w2,根据男女学生的人数比例确定先验概率: P(w1)=203/149=0.7658536585365854,P(w2)=1-P(w1)=0.23414634146341462

#求男生、女生先验概率
man_priori_probability=manlen/(manlen+womanlen)
woman_priori_probability=1-man_priori_probability

求男女生的协方差矩阵:

#①本题输入类数为2:即男生、女生;特征数为2:即身高、体重
#②求协方差矩阵
def get_covariance_matrix_coefficient(arr1,arr2):#arr1与arr2长度相等
    datalength1=len(arr1)
    datalength2=len(arr2)
    sum_temp=[]
    for i in range(datalength1):
        sum_temp.append((arr1[i]-sum(arr1)/datalength1)*(arr2[i]-sum(arr2)/datalength2))
        c12=sum(sum_temp)
    covariance_matrix_c12=c12/(datalength1-1)
    return covariance_matrix_c12
​
man_c11=man_height_variance
man_c22=man_weight_variance
man_c12=man_c21=get_covariance_matrix_coefficient(man_height,man_weight)
man_covariance_matrix=np.matrix([[man_c11,man_c12],[man_c21,man_c22]])
woman_c11=woman_height_variance
woman_c22=woman_weight_variance
woman_c12=woman_c21=get_covariance_matrix_coefficient(woman_height,woman_weight)
woman_covariance_matrix=np.matrix([[woman_c11,woman_c12],[woman_c21,woman_c22]])

求其决策方程:

# 定义等高线高度函数
def f(sample_height, sample_weight):
    mytemp1=np.zeros(shape=(100,100))
    for i in range(100):
        for j in range(100):
            sample_vector=np.matrix([[sample_height[i,j]],[sample_weight[i,j]]])
            sample_vector_T=np.transpose(sample_vector)
            #定义决策函数
            mytemp1[i,j]=0.5*np.transpose(sample_vector-man_feature_mean_vector)*(np.linalg.inv(man_covariance_matrix))*\
            (sample_vector-man_feature_mean_vector)-0.5*np.transpose(sample_vector-woman_feature_mean_vector)*\
            (np.linalg.inv(woman_covariance_matrix))*(sample_vector-woman_feature_mean_vector)+\
            0.5*math.log((np.linalg.det(man_covariance_matrix))/(np.linalg.det(woman_covariance_matrix)))-\
            math.log(man_priori_probability/woman_priori_probability)
    return mytemp1

使用python库函数plt.contour画类别决策面,并将(160,45)与(178,70)打点与图上,可知(160,45)属于女生,(178,70)属于男生。结果如图二。

完整代码(初版)

import xlrd
import math 
import numpy as np
import scipy.stats as st 
import matplotlib.pyplot as plt
from scipy.stats import norm

'''
/**************************task1**************************/
Take the height as an example, draw a histogram of the 
height of the boys and girls and compare
/**************************task1**************************/
'''
mydata = xlrd.open_workbook('D:/program/py_code/data_2018.xls')
mysheet1 = mydata.sheet_by_name("Sheet1")

#获取行数、列数
nRows=mysheet1.nrows
nCols=mysheet1.ncols

#用于存取男生女生身高数据
man_height=[]
woman_height=[]

#获取第4列的内容:身高
for i in range(nRows):
	if i+1<nRows:
		if mysheet1.cell(i+1,1).value==1:
			man_height.append(mysheet1.cell(i+1,3).value)
		elif mysheet1.cell(i+1,1).value==0:
			woman_height.append(mysheet1.cell(i+1,3).value)

#获取男、女生的数量
manlen=len(man_height)
womanlen=len(woman_height)

#画男女生身高频谱图
plt.hist(man_height,manlen,align='left',color='red',label='boy')
plt.hist(woman_height,womanlen,align='right',label='girl')
plt.legend(loc=0)
plt.xlabel('height')
plt.xlim(min(man_height+woman_height)-1,max(man_height+woman_height)+1)
plt.ylabel('number')
plt.title('Boy height spectrum')
#xsticks与yticks:指定坐标轴的刻度
plt.xticks(np.arange(min(man_height+woman_height),max(man_height+woman_height)+1,1.0))
plt.yticks(np.linspace(0,50,26))
plt.show()

'''
/**************************task2**************************/
Using the maximum likelihood estimation method to find the 
parameters of height and weight distribution for boys and girls
/**************************task2**************************/
'''
#用于存取男生女生体重数据
man_weight=[]
woman_weight=[]

#将男女生体重数据从第5列中进行分离,并保存在上述空数组中
for i in range(nRows):
	if i+1<nRows:
		if mysheet1.cell(i+1,1).value==1:
			man_weight.append(mysheet1.cell(i+1,4).value)
		elif mysheet1.cell(i+1,1).value==0:
			woman_weight.append(mysheet1.cell(i+1,4).value)
#fit(data):Return MLEs for shape, location, and scale parameters from data
#norm.fit(x)就是将x看成是某个norm分布的抽样,求出其最好的拟合参数(mean, std)
man_height_mean, man_height_std 	= norm.fit(man_height)#男生升高分布参数
man_weight_mean, man_weight_std 	= norm.fit(man_weight)#男生体重分布参数
woman_height_mean, woman_height_std = norm.fit(woman_height)#女生升高分布参数
woman_weight_mean, woman_weight_std = norm.fit(woman_weight)#女生体重分布参数

man_height_variance=man_height_std**2
man_weight_variance=man_weight_std**2
woman_height_variance=woman_height_std**2
woman_weight_variance=woman_weight_std**2
print(man_height_mean,man_height_variance,man_weight_mean,man_weight_variance)
print(woman_height_mean,woman_height_variance,woman_weight_mean,woman_weight_variance)

'''
/**************************task3**************************/
采用贝叶斯估计方法,求男女生身高以及体重分布的参数(注明自己选定的参数情况)
/**************************task3**************************/
'''
man_height_mean_cntr, man_height_var_cntr, man_height_std_cntr=st.bayes_mvs(man_height)
man_weight_mean_cntr, man_weight_var_cntr, man_weight_std_cntr=st.bayes_mvs(man_weight)
woman_height_mean_cntr, woman_height_var_cntr, woman_height_std_cntr=st.bayes_mvs(woman_height)
woman_weight_mean_cntr, woman_weight_var_cntr, woman_weight_std_cntr=st.bayes_mvs(woman_weight)
#print(man_height_mean_cntr.statistic,man_weight_mean_cntr.statistic)
#print(woman_height_mean_cntr.statistic,woman_weight_mean_cntr.statistic)

def get_mean_bayes(arr,mean0,variance0,variance):
	datasum=sum(arr)
	datalen=len(arr)
	mean_bayes=(variance0*datasum+variance*mean0)/(datalen*variance0+variance)
	return mean_bayes

'''
特殊情况1:
variance0=0时,mean_bayes=mean0
先验知识可靠,样本不起作用
#以男生身高为例,选定参数:mean0=20,variance=10,variance0=0
'''
man_height_mean_bayes=get_mean_bayes(man_height,20,0,10)
print(man_height_mean_bayes)

'''
特殊情况2:
variance0>>variance时,mean_bayes=sample_mean
先验知识十分不确定,完全依靠样本信息,结果与最大似然估计结果近似
#以女生身高为例,选定参数:mean0=50,variance=1,variance0=100
'''
woman_height_mean_bayes=get_mean_bayes(woman_height,50,100,1)
print(woman_height_mean_bayes)

'''
/**************************task4**************************/
4.	采用最小错误率贝叶斯决策,画出类别判定的决策面。并判断某样本
的身高体重分别为(160,45)时应该属于男生还是女生?为(178,70)时呢?
/**************************task4**************************/
'''
#①本题输入类数为2:即男生、女生;特征数为2:即身高、体重
#②求协方差矩阵
def get_covariance_matrix_coefficient(arr1,arr2):#arr1与arr2长度相等
	datalength1=len(arr1)
	datalength2=len(arr2)
	sum_temp=[]
	for i in range(datalength1):
		sum_temp.append((arr1[i]-sum(arr1)/datalength1)*(arr2[i]-sum(arr2)/datalength2))
		c12=sum(sum_temp)
	covariance_matrix_c12=c12/(datalength1-1)
	return covariance_matrix_c12

man_c11=man_height_variance
man_c22=man_weight_variance
man_c12=man_c21=get_covariance_matrix_coefficient(man_height,man_weight)
man_covariance_matrix=np.matrix([[man_c11,man_c12],[man_c21,man_c22]])
woman_c11=woman_height_variance
woman_c22=woman_weight_variance
woman_c12=woman_c21=get_covariance_matrix_coefficient(woman_height,woman_weight)
woman_covariance_matrix=np.matrix([[woman_c11,woman_c12],[woman_c21,woman_c22]])
print(woman_covariance_matrix)

#求男生、女生先验概率
man_priori_probability=manlen/(manlen+womanlen)
woman_priori_probability=1-man_priori_probability
#print(woman_priori_probability)

man_feature_mean_vector=np.matrix([[man_height_mean],[man_weight_mean]])
woman_feature_mean_vector=np.matrix([[woman_height_mean],[woman_weight_mean]])

# 定义等高线高度函数
def f(sample_height, sample_weight):
    mytemp1=np.zeros(shape=(100,100))
    for i in range(100):
    	for j in range(100):
            sample_vector=np.matrix([[sample_height[i,j]],[sample_weight[i,j]]])
            sample_vector_T=np.transpose(sample_vector)
            #定义决策函数
            mytemp1[i,j]=0.5*np.transpose(sample_vector-man_feature_mean_vector)*(np.linalg.inv(man_covariance_matrix))*\
            (sample_vector-man_feature_mean_vector)-0.5*np.transpose(sample_vector-woman_feature_mean_vector)*\
            (np.linalg.inv(woman_covariance_matrix))*(sample_vector-woman_feature_mean_vector)+\
            0.5*math.log((np.linalg.det(man_covariance_matrix))/(np.linalg.det(woman_covariance_matrix)))-\
            math.log(man_priori_probability/woman_priori_probability)
    return mytemp1

sample_height = np.linspace(150, 180, 100)
sample_weight = np.linspace(40, 80, 100)
# 将原始数据变成网格数据
Sample_height, Sample_weight = np.meshgrid(sample_height, sample_weight)
# 填充颜色
plt.contourf(Sample_height, Sample_weight, f(Sample_height,Sample_weight), 0, alpha = 0)
# 绘制等高线,圈内为女生,圈外为男生
C = plt.contour(Sample_height, Sample_weight, f(Sample_height,Sample_weight), 0, colors = 'black',linewidths=0.6)
# 显示各等高线的数据标签
plt.clabel(C, inline = True, fontsize = 10)

#显示男女生样本散点图

p1=plt.scatter(man_height, man_weight,c='g', marker = '*',linewidths=0.4)
p2=plt.scatter(woman_height, woman_weight,c='r', marker = '*',linewidths=0.4)


# 定义显示坐标函数
def Display_coordinates(m, n):
	plt.scatter(m, n, marker = 's',linewidths=0.4)
	plt.annotate((m,n), xy = (m, n))
	return

#并判断某样本的身高体重分别为(160,45)时应该属于男生还是女生?为(178,70)时呢
Display_coordinates(160,45)
Display_coordinates(178,70)
label=['boy','girl']
plt.legend([p1, p2],label,loc=0)
plt.xlabel('height/cm')
plt.ylabel('weight/kg')
plt.show()

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模式识别:最小错误率贝叶斯决策分类 的相关文章

  • 模式识别 一

    模式识别 教材选择模式识别基本概念模式识别的主要方法应用领域模式识别与机器学习的区别模式识别典型过程前修基础课程课后问题解答1 简述特征空间优化的方法2 简述分类器的设计准则3 简述分类器设计的基本方法4 简述在什么情况下分类器不可分5 分
  • 最小二乘曲线拟合——C语言算法实现一

    最小二乘曲线拟合 给定一组数据 我们要对这组数据进行曲线拟合 假定要拟合的曲线方程为 y a0 a1 x 1 a2 x 2 a3 x 3 an x n x y 0 995119 7 620000 2 001185 2 460000 2 99
  • 四:SVM

    硬间隔最大化SVM SVM 介绍 SVM转化为最优解问题 KKT KKT图解 KKT定理 KKT例子 求解SVM最优化问题 拉格朗日对偶 拉格朗日对偶例子 用拉格朗日对偶解决问题 KKT在SVM中的意义 测试 SVM 介绍 SVM是一种分类
  • CNN中感受野的计算

    感受野 receptive field 是怎样一个东西呢 从CNN可视化的角度来讲 就是输出featuremap某个节点的响应对应的输入图像的区域就是感受野 比如我们第一层是一个3 3的卷积核 那么我们经过这个卷积核得到的featurema
  • MMdetection3D学习系列(二)——KITTI数据集训练测试及可视化

    安装完环境以后 就可以进行测试了 这里我使用的是KITTI数据集进行测试 关于KITTI数据集 网上有很多介绍了 这里简单说一下在mmdet3d中它需要的文件层级样式吧 主要是针对RGB和点云数据进行检测 一般来说采用其中一侧的彩色摄像头的
  • 最大公约数、最小公倍数、辗转相除法的求解和证明

    两个正整数的最大公约数 Greatest Common Divisor GCD 在计算机中通常使用辗转相除法计算 最小公倍数 Least Common Multiple LCM 可以使用GCD来计算 下面首先介绍GCD和LCM 然后介绍辗转
  • 人工智能与机器学习著名会议

    转自论坛http www ieee org cn dispbbs asp BoardID 62 replyID 31567 id 29962 star 1 skin 0 作者好像是南大周志华老师 我知道的几个人工智能会议 一流 下面同分的按
  • 中文文本分类-朴素贝叶斯

    原创作品 出自 晓风残月xj 博客 欢迎转载 转载时请务必注明出处 http blog csdn net xiaofengcanyuexj 由于各种原因 可能存在诸多不足 欢迎斧正 最近在想怎么利用数据挖掘的方法进行评论自动审核 分类为垃圾
  • 什么是模式识别,模式识别主要识别什么?

    模式识别诞生于20实际20年代 随着40年代计算机的出现 50年代人工智能的兴起 模式识别在60年代初迅速发展成为一门学科 简单点说 模式识别是根据输入的原始数据对齐进行各种分析判断 从而得到其类别属性 特征判断的过程 为了具备这种能力 人
  • 统计学的基本概念

    转 浅谈协方差矩阵 一 统计学的基本概念 统计学里最基本的概念就是样本的均值 方差 标准差 首先 我们给定一个含有n个样本的集合 下面给出这些概念的公式描述 均值 标准差 方差 均值描述的是样本集合的中间点 它告诉我们的信息是有限的 而标准
  • 图像特征提取三大算法:HOG特征,LBP特征,Haar特征

    一 HOG特征 from http dataunion org 20584 html 1 HOG特征 方向梯度直方图 Histogram of Oriented Gradient HOG 特征是一种在计算机视觉和图像处理中用来进行物体检测的
  • 基于MATLAB的图片中字符的分割与识别

    基于MATLAB的字符的分割与识别 摘 要 本文主要介绍字符识别的基本原理 并且利用MATLAB工具软件实现图片中字符的分割和识别 对于满足一定要求的图片可以实现字符的分割与识别 通过图像读取 图像预处理 图像投影 字符分割 字符识别五个步
  • 模式识别、计算机视觉、机器学习领域的顶级期刊和会议(整理)

    部分AI刊物影响因子05 SCIIF 2005 2004 JMLR 4 027 5 952 机器学习 PAMI 3 810 4 352 模式识别 IJCV 3 657 2 914 计算机视觉 TOIS 4 529 4 097 AIJ 2 6
  • 最大熵算法及简单例子

    最近在学模式识别 正在看Introduction to Pattern Recognition这本书 挺不错的一本书 好 下面和大家一起来学习最大熵算法 首先 最大熵算法是干什么的呢 一般是用来估计一个分布 至于把分布估计出来之后用来干什么
  • 使用pytorch版faster-rcnn训练自己数据集

    使用pytorch版faster rcnn训练自己数据集 引言 faster rcnn pytorch代码下载 训练自己数据集 接下来工作 参考文献 引言 最近在复现目标检测代码 师兄强烈推荐FPN 但本文只针对Faster RCNN 大家
  • 目标检测mAp

    目标检测的mAp的计算是根据不同的IoU下的对应的recall和precision计算得到
  • 什么是模式识别,模式识别概念的基本介绍

    模式识别又常称作模式分类 从处理问题的性质和解决问题的方法等角度 模式识别分为有监督的分类 Supervised Classification 和无监督的分类 Unsupervised Classification 两种 模式还可分成抽象的
  • 算法笔记-DTW动态时间规整

    算法笔记 DTW动态时间规整 简介 简单的例子 定义 讨论 约束条件 步模式 标准化 点与点的距离函数 具体应用场景 分类 点到点匹配 算法笔记 DTW动态时间规整 动态时间规整 规划 Dynamic Time Warping DTW 是一
  • 模式识别学习笔记之一:模式识别的步骤及相关概念

    1 信息获取 2 预处理 对获取信号进行规范化等各种处理 3 特征提取与选择 将识别样本构造成便于比较 分析的描述量即特征向量 4 分类器设计 由训练过程将训练样本提供的信息变为判别事物的判别函数 5 分类决策 对样本特征分量按判别函数的计
  • 什么是模式、什么是模式识别、模式识别的方法、过程

    什么是模式 pattern 模式是存在于时间和空间中可观察的物体 如果可以区分相同或者相似的物体类别 可区分的物体称之为模式 模式不是指具体的物体 而是抽象的类别 例如 人这个类别是一种模式 自行车这个类别是一种模式 什么是模式识别 1 模

随机推荐

  • c++简单实现http协议服务器和客户端

    C 43 43 简单实现HTTP GET POST 请求 HTTP 超文本传输协议 是一种客户端与服务端的传输协议 xff0c 最早用于浏览器和服务器之间的通信 xff0c 后来因为其使用灵活 方便等特点 xff0c 广泛用于客户端与服务端
  • QT中设置背景颜色

    layout大小设置方法 xff1a reSize QSize 600 600 就ok了 xff0c 这个是设置主窗口的大小 xff0c layout会自动适应主窗口的 QWidget是所有用户界面对象的基类 xff0c 这意味着可以用同样
  • vs2013 Warning 44 warning LNK4099: PDB 'vc120.pdb' was not found with '

    Warning 20 warning LNK4099 PDB 39 vc120 pdb 39 was not found with 39 ABC lib XYZ obj 39 or at 39 E test Release vc120 pd
  • QT信号与槽的6种连接方式以及自定义参数传递

    前言 一 信号与槽的连接 二 connect的第五个参数 三 传递参数为自定义参数时 扩展 前言 QT提供了信号与槽机制来实现对象之间的通信 xff0c 只有QObject及其派生类才能使用信号和槽机制 xff0c 且在类之中还需要使用Q
  • QT中QThread的各个方法,UI线程关系,事件关系详解(2)

    QThread 的两种使用方法 1 不使用事件循环 这是官方的 Manual example 以及相关书籍中都介绍的一种的方法 a 子类化 QThread b 重载 run 函数 xff0c run函数内有一个 while 或 for 的死
  • QT或MFC中调用Opencv需要引用库时或自身的架构库时可以添加环境变量引用路径下文件的方式搭建环境避免可执行程序下文件过多显得臃肿

    在计算机系统环境变量中在Path里添加要引用的lib dll等库文件
  • C# 中delegate、event、Action、Func详解

    都属于委托 xff0c 只是展现的形式不同而已 xff0c 无论哪种 xff0c 其实都可以采用delegate实现 xff0c 为什么会出现另外的三种呢 xff1f 因为delegate是很宽泛的 xff0c 格式内容都不受限 xff0c
  • (吐了呀,相同代码,相同case测试结果不一样)1052 Linked List Sorting

    在刷PAT的过程中 xff0c 关于一个样例的疑问 include lt iostream gt include lt list gt include lt vector gt include lt unordered map gt inc
  • C# 委托,泛型委托,匿名委托,lambda表达式

    一 泛型的定义及作用 泛型 generic 是C 2 0推出的新语法 xff0c 它是专门为处理多段代码在不同的数据类型上执行相同的指令的情况而设计的 比如说编程时 xff0c 碰到功能非常相似的模块 xff0c 只是它们所处理的数据类型不
  • C#连接sqlServer数据库详解

    C 是如何跟SQL Server进行连接的 xff1f 在C NET程序设计中 xff0c 离不开ADO NET ADO NET是 NET连接数据库的重要组件 使用其可以很方便地访问数据库 xff0c ADO NET还可以访问Oracle数
  • C++ 如何用创建txt文件,并且写入内容(汇总)

    void CreatTxt char pathName unsigned char rBuffer int length 创建txt文件 char path 61 34 C 1 txt 34 你要创建文件的路径 ofstream fout
  • 常用邮箱的 IMAP/POP3/SMTP 设置

    通过网上查找的资料和自己的总结完成了下面的文章 xff0c 看完之后相信大家对这三种协议会有更深入的理解 如有错误的地方望指正 POP3 POP3是Post Office Protocol 3的简称 xff0c 即邮局协议的第3个版本 它规
  • Critical error detected c0000374

    最近发现一个新奇的情况导致这个问题出现 版本不一致 简单来说 xff0c 就是有一个类A xff0c 调用类B xff1b 但是这个类B有两个版本B1 xff0c B2 大小不一致 xff1b 类B包含两个类C D 在调用类B时 xff0c
  • 串口通信协议

    概念 串口通信 xff08 Serial Communications xff09 的概念非常简单 xff0c 串口按位 xff08 bit xff09 发送和接收字节 尽管比按字节 xff08 byte xff09 的并行通信慢 xff0
  • [二] Nuttx移植-星瞳pyboard开发板

    目录 一 Nuttx配置文件二 构建自己的配置文件1 include board h文件构建2 kernel amp amp scripts 构建3 nsh defconfig 构建4 src 构建5 Kconfig 构建 三 修改 nut
  • Parrot Bebop2 与ROS

    第二章 无人机平台与开发环境搭建 本章主要介绍无人机平台及相关开发环境的搭建 包括介绍Parrot Bebop2的相关规格与使用说明 xff0c 以及ROS的操作系统的简介 发展历程 安装流程 xff0c 还有ROS的数据通信方式和ROS的
  • python2与python3解析数据

    蓝牙模块接收到监测设备传输来的数据 xff0c 封装格式为十六进制的数据帧 xff0c 蓝牙模块将数据通过串口发送给wrtnode 2p xff0c wrtnode通过ser2net服务将数据转为网络数据 xff0c 可以通过监听192 1
  • 上传本地项目到github远程仓库

    前提已经注册github账号并在本地电脑安装git客户端 1 为Github账户设置SSH key 进入git bash xff0c 通过如下命令生成 ssh keygen t rsa C 34 github所绑定的邮箱 34 一路回车 x
  • 卫星导航定位技术二:由星历参数求解卫星时空位置

    卫星星历是描述卫星运动轨道的信息 也可以说卫星星历就是一组对应某一时刻的轨道参数及其变率 有了卫星星历就可以计算出任意时刻的卫星位置及其速度 GPS卫星星历分为预报星历和后处理星历 预报星历又称广播星历 GPS广播星历参数共有16个 xff
  • 模式识别:最小错误率贝叶斯决策分类

    一 引言 1 用贝叶斯决策理论分类要事先知道两个条件及要求 xff1a 各类的先验概率 xff1a 及特征向量的条件概率密度 xff1a 或后验概率 xff1a 决策分类的类别一定 2 解决的问题 xff1a 已知一定数目的样本 xff0c