⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bayes.cpp

📁 classify using Bayes method. 使用Bayes方法进行两类分类
💻 CPP
字号:
// Bayes.cpp : Defines the entry point for the console application.


#include "stdafx.h"
#include <math.h>
#include <iostream.h>
#include <iomanip.h>
#include "Matrix.h"

#define m 2               //特征数
#define u 3               //样本数


void main()
{
	Matrix matrix;
	int a1[u][m];//存放第一类样本
	int a2[u][m];//存放第二类样本
	float aver1[m],aver2[m];//存放两类均值
	float **cov1;//第一类的协方差矩阵
	float **cov2;//第二类的协方差矩阵
    double **inve1;
	double **inve2;
	float P[2];//两类的先验概率
	int samp[2]={2,0};//待分类样本

	float gx;//判别函数值

	//输入第一类的样本
	cout<<"请输入第一类的样本:"<<endl;
	for(int i=0;i<u;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>a1[i][j];		   
		}
		cout<<endl;
	}    
	//输入第二类的样本
	cout<<"请输入第二类的样本:"<<endl;
	for(i=0;i<u;i++)
	{
		for(int j=0;j<m;j++)
		{			
			cin>>a2[i][j];
		}
		cout<<endl;
	}

	//分别计算两类均值
	for(i=0;i<m;i++)
	{
		aver1[i]=(float)(a1[0][i]+a1[1][i]+a1[2][i])/u;
	    aver2[i]=(float)(a2[0][i]+a2[1][i]+a2[2][i])/u;
	}    

	//分别计算两类的协方差矩阵
    cov1=matrix.cov(a1,aver1);
	cov2=matrix.cov(a2,aver2);    

	//求两协方差阵的逆
    inve1=matrix.inverse(cov1,m);
	inve2=matrix.inverse(cov2,m);    

	//先验概率
    P[0]=0.5;
	P[1]=0.5;
	double pRatio=log(P[0]/P[1]);

    float **covSum;//两协方差矩阵和
    double **inveSum;//协方差矩阵和的逆
	covSum = new float* [m];
	for(i=0; i<m; i++)
	{
		covSum[i] = new float[m];	
	} 
	for(i=0;i<m;i++)
	{
		for(int j=0;j<m;j++)
		{
			covSum[i][j]=cov1[i][j]+cov2[i][j];
		}
	}   
    inveSum=matrix.inverse(covSum,m); 

	//两类协方差相等
	cout<<"如果协方差矩阵相等:"<<endl;
	gx=samp[0]*((aver2[0]-aver1[0])*inveSum[0][0]+(aver2[1]-aver1[1])*inveSum[1][0])
	  +samp[1]*((aver2[0]-aver1[0])*inveSum[0][1]+(aver2[1]-aver1[1])*inveSum[1][1])
	  +1/2*(aver1[0]*aver1[0]*inveSum[0][0]+aver1[0]*aver1[1]*inveSum[1][0]+aver1[0]*aver1[1]*inveSum[0][2]+aver1[1]*aver1[1]*inveSum[1][1]
		   -aver2[0]*aver2[0]*inveSum[0][0]+aver2[0]*aver2[1]*inveSum[1][0]+aver2[0]*aver2[1]*inveSum[0][2]+aver2[1]*aver2[1]*inveSum[1][1]);
	
	/*	double covRatio=log(det(cov1,2)/det(cov2,2));    //假定协方差矩阵不等

	gx=1/2*covRatio-1/2*pRatio+1/2*((samp[0]-ave1[0])*(samp[0]-ave1[0])*cov1[0][0]+(samp[1]-ave1[1])*(samp[0]-ave1[0])*cov1[1][0]
	  +(samp[0]-ave1[0])*(samp[1]-ave1[1])*cov1[0][1]+(samp[1]-ave1[1])*(samp[1]-ave1[1])*cov1[1][0]); */

	if(gx<0)
		cout<<"sample (2,0) belongs to the first class"<<endl;
	
	else
         cout<<"sample (2,0) belongs to the second class"<<endl;  
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -