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

📄 main.cpp

📁 贝叶斯算法实现
💻 CPP
字号:
#include<iostream.h>
#include<conio.h>
#include"bayes.h"

//这个宏仅为了少写些代码
#define test(arx)                     \
{                                     \
	for(int i=0; i<50; i++){          \
	Matrix x(d,1,arx[i]);             \
	bayesDepart(X, Pw, x, c, name);   \
	cout << ' ';                      \
	if((i+1)%5 == 0) cout << endl;    \
	}                                 \
	cout << "--------------\n";       \
}                                     \
	
void main()
{
	cout << "\n==============\n";
	//样本集分为 2 个类别,特征空间维数为 2,每个类别 25 个样本
	const int c = 2, d = 4, n = 50;
	//类别名称分别为 w1 和 w2
	char* name[c] = {"w1", "w2"};
	//两个类别的先验概率,可以给予不同的值,观察结果变化
	double   Pw[c] = { 0.5, 0.5 };
	//数组 X[i]为 i 类别的样本集,X 为总样本集
	Matrix* X = new Matrix[c];
	
	//类别 w1 的样本数据,
	//特征值 1 集中在 4|5附近,特征值 2 集中在 13 附近
	double ar0[] = {
			5.1 , 3.5 , 1.4 , 0.2 , 
			4.9 , 3.0 , 1.4 , 0.2 , 
			4.7 , 3.2 , 1.3 , 0.2 ,
			4.6 , 3.1 , 1.5 , 0.2 ,
			5.0 , 3.6 , 1.4 , 0.2 ,
			5.4 , 3.7 , 1.5 , 0.2 ,
			4.6 , 3.4 , 1.4 , 0.3 ,
			5.0 , 3.4 , 1.5 , 0.2 ,
			4.4 , 2.9 , 1.4 , 0.2 ,
			4.9 , 3.1 , 1.5 , 0.1 ,
			5.4 , 3.7 , 1.5 , 0.2 ,
			4.8 , 3.4 , 1.6 , 0.2 ,
			4.8 , 3.0 , 1.4 , 0.1 ,
			4.3 , 3.0 , 1.1 , 0.1 ,
			5.8 , 4.0 , 1.2 , 0.2 ,
			5.7 , 4.4 , 1.5 , 0.4 ,
			5.4 , 3.9 , 1.3 , 0.4 ,
			5.1 , 3.5 , 1.4 , 0.3 ,
			5.7 , 3.8 , 1.7 , 0.3 ,
			5.1 , 3.8 , 1.5 , 0.3 ,
			5.4 , 3.4 , 1.7 , 0.2 ,
			5.1 , 3.7 , 1.5 , 0.4 ,
			4.6 , 3.6 , 1.0 , 0.2 ,
			5.1 , 3.3 , 1.7 , 0.5 ,
			4.8 , 3.4 , 1.9 , 0.2 ,
			5.0 , 3.0 , 1.6 , 0.2 ,
			5.0 , 3.4 , 1.6 , 0.4 ,
			5.2 , 3.5 , 1.5 , 0.2 ,
			5.2 , 3.4 , 1.4 , 0.2 ,
			4.7 , 5.2 , 1.6 , 0.2 ,
			4,8 , 3.1 , 1.6 , 0.2 ,
			5.4 , 3.4 , 1.5 , 0.4 ,
			5.2 , 4.1 , 1.5 , 0.1 , 
			5.5 , 4.2 , 1.4 , 0.2 , 
			4.9 , 3.1 , 1.5 , 0.2 ,
			5.0 , 3.2 , 1.2 , 0.2 ,
			4.9 , 3.6 , 1.4 , 0.1 ,
			4.4 , 3.0 , 1.3 , 0.2 ,
			5.1 , 3.4 , 1.5 , 0.2 ,
			5.0 , 3.5 , 1.3 , 0.3 ,
			4.5 , 2.3 , 1.3 , 0.3 ,
			4.4 , 3.2 , 1.3 , 0.2 ,
			5.0 , 3.5 , 1.6 , 0.6 ,
			5.1 , 3.8 , 1.9 , 0.4 , 
			4.8 , 3.0 , 1.4 , 0.3 ,
			5.1 , 3.8 , 1.6 , 0.2 ,
			4.6 , 3.2 , 1.4 , 0.2 ,
			5.3 , 3.7 , 1.5 , 0.2 ,
			5.0 , 3.3 , 1.4 , 0.2 };
		//类别 w2 的样本数据
		//特征值 1 集中在 7|8附近,特征值 2 集中在 19 附近  
		double ar1[] = {
			7.0 , 3.2 , 4.7 , 1.4 ,
			6.4 , 3.2 , 4.5 , 1.5 ,
			6.9 , 3.1 , 4.9 , 1.5 ,
			5.5 , 2.3 , 4.0 , 1.3 ,
			6.5 , 2.8 , 4.6 , 1.5 ,
			5.7 , 2.8 , 4.5 , 1.3 ,
			6.3 , 3.3 , 4.7 , 1.6 ,
			4.9 , 2.4 , 3.3 , 1.0 ,
			6.6 , 2.9 , 4.6 , 1.3 ,
			5.2 , 2.7 , 3.9 , 1.4 ,
			5.0 , 2.0 , 3.5 , 1.0 ,
			5.9 , 3.0 , 4.2 , 1.5 ,
			6.0 , 2.2 , 4.0 , 1.0 ,
			6.1 , 2.9 , 4.7 , 1.4 ,
			5.6 , 2.9 , 3.9 , 1.3 ,
			6.7 , 3.1 , 4.4 , 1.4 ,
			5.6 , 3.0 , 4.5 , 1.5 ,
			5,8 , 2.7 , 4.1 , 1.0 ,
			6.2 , 2.2 , 4.5 , 1.5 ,
			5.6 , 2.5 , 2.9 , 1.1 ,
			5.9 , 3.2 , 4.8 , 1.8 ,
			6.1 , 2.8 , 4.0 , 1.3 ,
			6.3 , 2.5 , 4.9 , 1.5 ,
			6.1 , 2.8 , 4.7 , 1.2 ,
			6.4 , 2.9 , 4.3 , 1.3 ,
			6.6 , 3.0 , 4.4 , 1.4 ,
			6.8 , 2.8 , 4.8 , 1.4 ,
			6.7 , 3.0 , 5.0 , 1.7 ,
			6.0 , 2.9 , 4.5 , 1.5 ,
			5.7 , 2.6 , 3.5 , 1.0 ,
			5.5 , 2.4 , 3.8 , 1.1 ,
			5.5 , 2.4 , 3.7 , 1.0 ,
			5.8 , 2.7 , 3.9 , 1.2 ,
			6.0 , 2.7 , 5.1 , 1.6 ,
			5.4 , 3.0 , 4.5 , 1.5 ,
			6.0 , 3.4 , 4.5 , 1.6 ,
			6.7 , 3.1 , 4.7 , 1.5 ,
			6.3 , 2.3 , 4.4 , 1.3 ,
			5.6 , 3.0 , 4.1 , 1.3 ,
			5.5 , 2.5 , 4.0 , 1.3 ,
			5.5 , 2.6 , 4.4 , 1.2 ,
			6.1 , 3.0 , 4.6 , 1.4 ,
			5.8 , 2.6 , 4.0 , 1.2 ,
			5.0 , 2.3 , 3.3 , 1.0 ,
			5.6 , 2.7 , 4.2 , 1.3 ,
			5.7 , 3.0 , 4.2 , 1.2 ,
			5.7 , 2.9 , 4.2 , 1.3 ,
			6.2 , 2.9 , 4.3 , 1.3 ,
			5.1 , 2.5 , 3.0 , 1.1 ,
	        5.7 , 2.8 , 4.1 , 1.3 };
			//将两个类别的样本数组构造为矩阵  
			Matrix X0(n,d,ar0);
			Matrix X1(n,d,ar1);
			//放入总样本集中便于下面的参数传递
			X[0] = X0; 
			X[1] = X1;
			
			//测试样本数据,其中前两个与原样本相同,第三个为随机输入
			//可以改变第三个样本中的数据值,观察结果变化
			
			double arx0[50][4] = {
				5.1 , 3.5 , 1.4 , 0.2 , 
				4.9 , 3.0 , 1.4 , 0.2 , 
				4.7 , 3.2 , 1.3 , 0.2 ,
				4.6 , 3.1 , 1.5 , 0.2 ,
				5.0 , 3.6 , 1.4 , 0.2 ,
				5.4 , 3.7 , 1.5 , 0.2 ,
				4.6 , 3.4 , 1.4 , 0.3 ,
				5.0 , 3.4 , 1.5 , 0.2 ,
				4.4 , 2.9 , 1.4 , 0.2 ,
				4.9 , 3.1 , 1.5 , 0.1 ,
				5.4 , 3.7 , 1.5 , 0.2 ,
				4.8 , 3.4 , 1.6 , 0.2 ,
				4.8 , 3.0 , 1.4 , 0.1 ,
				4.3 , 3.0 , 1.1 , 0.1 ,
				5.8 , 4.0 , 1.2 , 0.2 ,
				5.7 , 4.4 , 1.5 , 0.4 ,
				5.4 , 3.9 , 1.3 , 0.4 ,
				5.1 , 3.5 , 1.4 , 0.3 ,
				5.7 , 3.8 , 1.7 , 0.3 ,
				5.1 , 3.8 , 1.5 , 0.3 ,
				5.4 , 3.4 , 1.7 , 0.2 ,
				5.1 , 3.7 , 1.5 , 0.4 ,
				4.6 , 3.6 , 1.0 , 0.2 ,
				5.1 , 3.3 , 1.7 , 0.5 ,
				4.8 , 3.4 , 1.9 , 0.2 ,
				5.0 , 3.0 , 1.6 , 0.2 ,
				5.0 , 3.4 , 1.6 , 0.4 ,
				5.2 , 3.5 , 1.5 , 0.2 ,
				5.2 , 3.4 , 1.4 , 0.2 ,
				4.7 , 5.2 , 1.6 , 0.2 ,
				4,8 , 3.1 , 1.6 , 0.2 ,
				5.4 , 3.4 , 1.5 , 0.4 ,
				5.2 , 4.1 , 1.5 , 0.1 , 
				5.5 , 4.2 , 1.4 , 0.2 , 
				4.9 , 3.1 , 1.5 , 0.2 ,
				5.0 , 3.2 , 1.2 , 0.2 ,
				4.9 , 3.6 , 1.4 , 0.1 ,
				4.4 , 3.0 , 1.3 , 0.2 ,
				5.1 , 3.4 , 1.5 , 0.2 ,
				5.0 , 3.5 , 1.3 , 0.3 ,
				4.5 , 2.3 , 1.3 , 0.3 ,
				4.4 , 3.2 , 1.3 , 0.2 ,
				5.0 , 3.5 , 1.6 , 0.6 ,
				5.1 , 3.8 , 1.6 , 0.2 ,
				4.6 , 3.2 , 1.4 , 0.2 ,
				5.3 , 3.7 , 1.5 , 0.2 ,
				5.0 , 3.3 , 1.4 , 0.2 };
				double arx1[50][4] = {
				7.0 , 3.2 , 4.7 , 1.4 ,
				6.4 , 3.2 , 4.5 , 1.5 ,
				6.9 , 3.1 , 4.9 , 1.5 ,
				5.5 , 2.3 , 4.0 , 1.3 ,
				6.5 , 2.8 , 4.6 , 1.5 ,
				5.7 , 2.8 , 4.5 , 1.3 ,
				6.3 , 3.3 , 4.7 , 1.6 ,
				4.9 , 2.4 , 3.3 , 1.0 ,
				6.6 , 2.9 , 4.6 , 1.3 ,
				5.2 , 2.7 , 3.9 , 1.4 ,
				5.0 , 2.0 , 3.5 , 1.0 ,
				5.9 , 3.0 , 4.2 , 1.5 ,
				6.0 , 2.2 , 4.0 , 1.0 ,
				6.1 , 2.9 , 4.7 , 1.4 ,
				5.6 , 2.9 , 3.9 , 1.3 ,
				6.7 , 3.1 , 4.4 , 1.4 ,
				5.6 , 3.0 , 4.5 , 1.5 ,
				5,8 , 2.7 , 4.1 , 1.0 ,
				6.2 , 2.2 , 4.5 , 1.5 ,
				5.6 , 2.5 , 2.9 , 1.1 ,
				5.9 , 3.2 , 4.8 , 1.8 ,
				6.1 , 2.8 , 4.0 , 1.3 ,
				6.3 , 2.5 , 4.9 , 1.5 ,
				6.1 , 2.8 , 4.7 , 1.2 ,
				6.4 , 2.9 , 4.3 , 1.3 ,
				6.6 , 3.0 , 4.4 , 1.4 ,
				6.8 , 2.8 , 4.8 , 1.4 ,
				6.7 , 3.0 , 5.0 , 1.7 ,
				6.0 , 2.9 , 4.5 , 1.5 ,
				5.7 , 2.6 , 3.5 , 1.0 ,
				5.5 , 2.4 , 3.8 , 1.1 ,
				5.5 , 2.4 , 3.7 , 1.0 ,
				5.8 , 2.7 , 3.9 , 1.2 ,
				6.0 , 2.7 , 5.1 , 1.6 ,
				5.4 , 3.0 , 4.5 , 1.5 ,
				6.0 , 3.4 , 4.5 , 1.6 ,
				6.7 , 3.1 , 4.7 , 1.5 ,
				6.3 , 2.3 , 4.4 , 1.3 ,
				5.6 , 3.0 , 4.1 , 1.3 ,
				5.5 , 2.5 , 4.0 , 1.3 ,
				5.5 , 2.6 , 4.4 , 1.2 ,
				6.1 , 3.0 , 4.6 , 1.4 ,
				5.8 , 2.6 , 4.0 , 1.2 ,
				5.0 , 2.3 , 3.3 , 1.0 ,
				5.6 , 2.7 , 4.2 , 1.3 ,
				5.7 , 3.0 , 4.2 , 1.2 ,
				5.7 , 2.9 , 4.2 , 1.3 ,
				6.2 , 2.9 , 4.3 , 1.3 ,
				5.1 , 2.5 , 4.1 , 1.3 };
					double arx2[50][4] = {
				6.3 , 3.3 , 6.0 , 2.5 ,
				5.8 , 2.7 , 5.1 , 1.9 ,
				7.1 , 3.0 , 5.9 , 2.1 ,
				6.3 , 2.9 , 5.6 , 1.8 ,
				6.5 , 3.0 , 5.8 , 2.2 ,
				7.6 , 3.0 , 6.6 , 2.1 ,
				4.9 , 2.5 , 4.5 , 1.7 ,
				7.3 , 2.9 , 6.3 , 1.8 ,
				6.7 , 2.5 , 5.8 , 1.8 ,
				7.2 , 3.6 , 6.1 , 2.5 ,
				6.5 , 3.2 , 5.1 , 2.0 ,
				6.4 , 2.7 , 5.3 , 1.9 ,
				6.8 , 3.0 , 5.5 , 2.1 , 
				5.7 , 2.5 , 5.0 , 2.0 ,
				5.8 , 2.8 , 5.1 , 2.4 ,
				6.4 , 3.2 , 5.3 , 2.3 ,
				6.5 , 3.0 , 5.5 , 1.8 ,
				7.7 , 3.8 , 6.7 , 2.2 ,
				7.7 , 2.6 , 6.9 , 2.3 ,
				6.0 , 2.2 , 5.0 , 1.5 ,						
				6.9 , 3.2 , 5.7 , 2.3 ,
				5.6 , 2.8 , 4.9 , 2.0 ,
				7.7 , 2.8 , 6.7 , 2.0 ,
				6.3 , 2.7 , 4.9 , 1.8 ,
				6.7 , 3.3 , 5.7 , 2.1 ,
				7.2 , 3.2 , 6.0 , 1.8 ,
				6.2 , 2.8 , 4.8 , 1.8 ,
				6.1 , 3.0 , 4.9 , 1.8 ,
				6.4 , 2.8 , 5.6 , 2.1 ,
				7.2 , 3.0 , 5.8 , 1.6 ,
				7.4 , 2.8 , 6.1 , 1.9 ,
				7.9 , 3.8 , 6.4 , 2.0 ,
				6.4 , 2.8 , 5.6 , 2.2 ,
				6.3 , 2.8 , 5.1 , 1.5 ,
				6.1 , 2.6 , 5.6 , 1.4 ,
				7.7 , 3.0 , 6.1 , 2.3 ,
				6.3 , 3.4 , 5.6 , 2.4 ,
				6.4 , 3.1 , 5.5 , 1.8 ,
				6.0 , 3.0 , 4.8 , 1.8 ,
				6.9 , 3.1 , 5.4 , 2.1 ,
				6.7 , 3.1 , 5.6 , 2.4 ,
				6.9 , 3.1 , 5.1 , 2.3 ,
				5.8 , 2.7 , 5.1 , 1.9 ,
				6.8 , 3.2 , 5.9 , 2.3 ,
				6.7 , 3.3 , 5.7 , 2.5 ,
				6.7 , 3.0 , 5.2 , 2.3 ,
				6.3 , 2.5 , 5.0 , 1.9 ,
				6.5 , 3.0 , 5.2 , 2.0 ,
				5.9 , 3.0 , 5.1 , 1.8};
				test(arx0);
				test(arx1);
				test(arx2);
				
				//试着输入与(4|5,13)接近的样本,看结果是否为 w1
				//试着输入与(7|8,19)接近的样本,看结果是否为 w2
				//改变先验概率,看结果是否发生改变
				double testAr[4];
				char ch = ' ';
				while(ch != 'q'){
					if(ch == 'p'){
						cout << "Please enter Pw[1] and Pw[2]:\n";
						cin   >> Pw[0] >> Pw[1];
					}
					cout << "Please enter what you want test :\n";
					cin   >> testAr[0] >> testAr[1]>> testAr[2]>> testAr[3];
					
					Matrix x(d,1,testAr);
					bayesDepart(X, Pw, x, c, name);
					
					cout << "\nPress any key to continue\n";
					cout << "q to exit\n";
					cout << "p to change Pw[i]\n";
					ch = getch();
				}
}


⌨️ 快捷键说明

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