模式识别与机器学习作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
•设以下模式类别具有正态概率密度函数:
ω1:{(0 0)T, (2 0)T, (2 2)T, (0 2)T}
ω2:{(4 4)T, (6 4)T, (6 6)T, (4 6)T}
(1)设P(ω1)= P(ω2)=1/2,求这两类模式之间的贝叶斯判别界面的方程式。
(2)绘出判别界面。
解:
•编写两类正态分布模式的贝叶斯分类程序。(可选例题或上述作业题为分类模式)
源程序如下:
#include
using namespace std;
void inverse_matrix(intT,double b[5][5])
{
double a[5][5];
for(int i=0;i for(int j=0;j<(2*T);j++) { if (j a[i][j]=b[i][j]; elseif (j==T+i) a[i][j]=1.0; else a[i][j]=0.0; } for(int i=0;i { for(int k=0;k { if(k!=i) { double t=a[k][i]/a[i][i]; for(int j=0;j<(2*T);j++) { double x=a[i][j]*t; a[k][j]=a[k][j]-x; } } } } for(int i=0;i { double t=a[i][i]; for(int j=0;j<(2*T);j++) a[i][j]=a[i][j]/t; } for(int i=0;i for(int j=0;j b[i][j]=a[i][j+T]; } voidget_matrix(intT,double result[5][5],double a[5]) { for(int i=0;i { for(int j=0;j { result[i][j]=a[i]*a[j]; } } } voidmatrix_min(intT,double a[5][5],int bb) { for(int i=0;i { for(int j=0;j a[i][j]=a[i][j]/bb; } } voidgetX(intT,double res[5],double a[5],double C[5][5]) { for(int i=0;i { double sum=0.0; for(int j=0;j sum+=a[j]*C[j][i]; res[i]=sum; } } int main() { int T; int w1_num,w2_num; double w1[10][5],w2[10][5],m1[5]={0},m2[5]={0},C1[5][5]={0},C2[5][5]={0}; cin>>T>>w1_num>>w2_num; for(int i=0;i { for(int j=0;j { cin>>w1[i][j]; m1[j]+=w1[i][j]; } } for(int i=0;i { for(int j=0;j { cin>>w2[i][j]; m2[j]+=w2[i][j]; } } for(int i=0;i m1[i]=m1[i]/w1_num; for(int i=0;i m2[i]=m2[i]/w2_num; for(int i=0;i { double res[5][5],a[5]; for(int j=0;j a[j]=w1[i][j]-m1[j]; get_matrix(T,res,a); for(int j=0;j { for(int k=0;k C1[j][k]+=res[j][k]; } } matrix_min(T,C1,w1_num); for(int i=0;i { double res[5][5],a[5]; for(int j=0;j a[j]=w2[i][j]-m2[j]; get_matrix(T,res,a); for(int j=0;j { for(int k=0;k C2[j][k]+=res[j][k]; } } matrix_min(T,C2,w2_num); inverse_matrix(T,C1); inverse_matrix(T,C2); double XX[5]={0},C_C1[5]={0},C_C2[5]={0}; double m1_m2[5];