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

📄 贝叶斯分类器.cpp

📁 一个用C++写的贝叶斯分类器的程序源代码
💻 CPP
字号:
//贝叶斯分类器:2006/11/13
#include <iostream>
#include <conio.h>
#include "bayes.h"

//这个宏仅为了少写些代码
#define test(arx)                     \
{                                     \
for(int i=0; i<25; 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 = 2, n = 25;
//类别名称分别为 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[] = {
    1,11.45, 2,12.46, 3,13.78, 3,13.62, 4,13.84,
    4,11.26, 4,15.28, 4,17.29, 4,21.36, 5,15.46,
    5,13.63, 5,13.78, 5,12.29, 5,14.55, 5,21.73,
    5,14.12, 5,15.34, 6,13.66, 6,13.21, 6,14.02,
    7,12.16, 7,19.88, 7,10.21, 8,12.29, 9,15.52 };
//类别 w2 的样本数据
//特征值 1 集中在 7|8附近,特征值 2 集中在 19 附近  
double ar1[] = {
    1,19.76, 2,21.43, 3,18.79, 4,19.84, 5,18.75,
    5,21.45, 5,18.78, 6,19.72, 7,19.04, 7,21.27,
    7,20.01, 7,18.99, 7,19.67, 8,17.98, 8,14.26,
    8,18.99, 8,15.67, 8,22.01, 8,21.91, 8,19.03,
    9,18.97, 9,18.92, 9,19.34, 9,19.28, 9,17.63 };
//将两个类别的样本数组构造为矩阵  
Matrix X0(n,d,ar0);
Matrix X1(n,d,ar1);
//放入总样本集中便于下面的参数传递
X[0] = X0; 
X[1] = X1;

   //测试样本数据,其中前两个与原样本相同,第三个为随机输入
   //可以改变第三个样本中的数据值,观察结果变化
  
   double arx0[25][2] = {
    1,11.45, 2,12.46, 3,13.78, 3,13.62, 4,13.84,
    4,11.26, 4,15.28, 4,17.29, 4,21.36, 5,15.46,
    5,13.63, 5,13.78, 5,12.29, 5,14.55, 5,21.73,
    5,14.12, 5,15.34, 6,17.66, 6,13.21, 6,14.02,
    7,12.16, 7,19.88, 8,10.21, 9,12.29, 10,15.52 };
double arx1[25][2] = {
    1,19.76, 2,21.43, 3,18.79, 4,19.84, 5,18.75,
    5,21.45, 5,18.78, 6,19.72, 7,19.04, 7,21.27,
    7,20.01, 7,18.99, 7,19.67, 8,17.98, 8,14.26,
    8,18.99, 8,15.67, 8,22.01, 8,21.91, 8,19.03,
    9,18.97, 9,18.92, 10,19.34,10,19.28,11,17.63 };
double arx2[25][2] = {
    3,14.56, 5,12.35, 7,19.89, 8,25.37, 11,26.10,
    3,14.29, 6,29.28, 5,16.19, 5,21.19, 8,27.19,
    8,18.28, 7,17.15, 6,14.12, 6,14.13, 1,25.10,
    5,16.29, 6,19.80, 10,19.34, 8,15.09,6,17.20,
    6,12.20, 8,19.21, 2,19.29, 5,16.10, 7,18.23 };
test(arx0);
test(arx1);
test(arx2);

//试着输入与(4|5,13)接近的样本,看结果是否为 w1
//试着输入与(7|8,19)接近的样本,看结果是否为 w2
//改变先验概率,看结果是否发生改变
double testAr[2];
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];

   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 + -