亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? classification.cpp

?? 貝葉斯分類
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// Classification.cpp: implementation of the Classification class.
// 2005.1.13-16:02 By Superman 
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
//#include "DSPLIT.h"
#include "Classification.h"
#include "matrix.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Classification::Classification()
{

}

Classification::~Classification()
{

}



/******************************************************************
*   函數名稱:LeastDistance()
*   函數類型:number_no,結構體
*   函數功能:最小距離法 ,返回數字類別和編號
******************************************************************/
number_no Classification::LeastDistance()
{
	double min=10000000000;
	number_no number_no;
	for(int n=0;n<10;n++)
	{
		for(int i=0;i<pattern[n].number;i++)
		{
			if(pipei(pattern[n].feature[i],testsample)<min)
			{
				//匹配的最小值
				min=pipei(pattern[n].feature[i],testsample);
				number_no.number=n;//樣品類別
				number_no.no=i;//樣品序號
			}
		}
	}
	return number_no;//返回手寫數字的類別和序號
}

/******************************************************************
*   函數名稱:Fisher_2Classes(int Class0, int Class1)
*   函數類型:int 
*   參數說明:Class0,Class1:0~9中的任意兩個類別
*   函數功能:兩類Fisher分類器,返回Class0,Class1中的一個
******************************************************************/
int Classification::Fisher_2Classes(int Class0, int Class1)
{
	double Xmeans[2][25];//兩類的均值
	double S[2][25][25];//樣品類內離散度矩陣
	double Sw[25][25];//總類間離散度矩陣
	double Sw_[25][25];//Sw的逆矩陣
	double W[25];//解向量w*
	double difXmeans[25];//均值差
	double X[25];//未知樣品
	double m0,m1;//類樣品均值
	double y0;//閾值y0
	int i,j,k;

	for(i=0;i<2;i++)
		for(j=0;j<25;j++)
			Xmeans[i][j]=0;
	int num0,num1;		//兩類樣品的個數
	//兩類樣品特征
	double mode0[200][25],mode1[200][25];
	//兩類樣品個數
	num0=40;//pattern[Class0].number;
	num1=40;//pattern[Class1].number;
	for(i=0;i<num0;i++)
	{
		for(j=0;j<25;j++)
		{
			Xmeans[0][j]+=pattern[Class0].feature[i][j];
			mode0[i][j]=pattern[Class0].feature[i][j];
		}
	}

	for(i=0;i<num1;i++)
	{
		for(j=0;j<25;j++)
		{
			Xmeans[1][j]+=pattern[Class1].feature[i][j];	
			mode1[i][j]=pattern[Class1].feature[i][j];
		}
	}
	//求得兩個樣品均值向量
	for(i=0;i<25;i++)	
	{
		Xmeans[0][i]/=(double)num0;
		Xmeans[1][i]/=(double)num1;
	}
	//求兩類樣品類內離散度矩陣
	for(i=0;i<25;i++)
	for(j=0;j<25;j++)
	{
		double s0=0.0,s1=0.0;
		for(k=0;k<num0;k++)
			s0=s0+(mode0[k][i]-Xmeans[0][i])*(mode0[k][j]-Xmeans[0][j]);
		s0=s0/(double)(num0-1);
		S[0][i][j]=s0;//第一類
		for(k=0;k<num1;k++)
			s1=s1+(mode1[k][i]-Xmeans[1][i])*(mode1[k][j]-Xmeans[1][j]);
		s1=s1/(double)(num1-1);
		S[1][i][j]=s1;//第二類		
	}
	//總類間離散度矩陣
	for(i=0;i<25;i++)
	for(j=0;j<25;j++)
	{
		Sw[i][j]=S[0][i][j]+S[1][i][j];
	}
	//Sw的逆矩陣
	for(i=0;i<25;i++)
		for(j=0;j<25;j++)
			Sw_[i][j]=Sw[i][j];	
	double(*p)[25]=Sw_;	
	brinv(*p,25);		//Sw的逆矩陣Sw_
	//計算w*  w*=Sw_×(Xmeans0-Xmeans1)
	for(i=0;i<25;i++)
		difXmeans[i]=Xmeans[0][i]-Xmeans[1][i];
	for(i=0;i<25;i++)
		W[i]=0.0;
	brmul(Sw_,difXmeans,25,W);//計算出W*
	
	//各類樣品均值
	m0=0.0;
	m1=0.0;
	for(i=0;i<num0;i++)
	{
		m0+=brmul(W,mode0[i],25);
	}
	for(i=0;i<num1;i++)
	{
		m1+=brmul(W,mode1[i],25);
	}
	m0/=(double)num0;
	m1/=(double)num1;
	y0=(num0*m0+num1*m1)/(num0+num1);//閾值y0
	
	//對于任意的手寫數字X
	for(i=0;i<25;i++)
		X[i]=testsample[i];
	double y;//X在w*上的投影點
	y=brmul(W,X,25);
	if (y>=y0) 
		return Class0;
	else
		return Class1;
}

/******************************************************************
*   函數名稱:Fisher()
*   函數類型:int 
*   函數功能:Fisher分類器,返回手寫數字的類別
******************************************************************/
int Classification::Fisher()
{
	int i,j,number,maxval,num[10];
	for(i=0;i<10;i++)
		num[i]=0;
	for(i=0;i<10;i++)
		for(j=0;j<i;j++)
			num[Fisher_2Classes(i,j)]++;
	maxval=num[0];
	number=0;
	for(i=1;i<10;i++)
	{
		if(num[i]>maxval)
		{
			maxval=num[i];
			number=i;
		}
	}
	return number;
}

/******************************************************************
*   函數名稱:BayesErzhishuju()
*   函數類型:int 
*   函數功能:基于二值數據的Bayes分類器 ,返回手寫數字的類別
******************************************************************/
int Classification::BayesErzhishuju()
{
	double Pw[10];//先驗概率P(wj)=Nj/N
	double P[10][25];//Pj(wi)wi:wi類,j:第j個特征
	double PXw[10];//類條件概率P(X|wj)
	double PwX[10];//后驗概率P(wj|X)

	int i,j;

	//求先驗概率
	int n[10];//各類樣品數
	int N=0;//樣品總數
	for(i=0;i<10;i++)
	{
		//各數字類別樣品數
		n[i]=pattern[i].number;
		N+=n[i];//樣品總數
	}
	for(i=0;i<10;i++)
		Pw[i]=(double)n[i]/(double)N;//先驗概率
	
	//求類條件概率
	for(i=0;i<10;i++)
	{
		for(j=0;j<25;j++)
		{
			int numof1=0;//二值數據中1的個數
			for(int k=0;k<pattern[i].number;k++)
				numof1+=pattern[i].feature[k][j]>0.1?1:0;
			P[i][j]=(double)(numof1+1)/(double)(n[i]+2);
		}
	}

	for(i=0;i<10;i++)
	{
		double p=1;
		for(int j=0;j<25;j++)
		{
			p*=(testsample[j]>0.1)?P[i][j]:1-P[i][j];
		}
		PXw[i]=p;
	}

	//求后驗概率
	double PX=0.0,maxP=0.0;
	int number;
	for(i=0;i<10;i++)
	{
		PX+=Pw[i]*PXw[i];
	}

	for(i=0;i<10;i++)
	{
		PwX[i]=Pw[i]*PXw[i]/PX;
		if(PwX[i]>maxP)
		{
			maxP=PwX[i];
			number=i;
		}
	}
	return number;
}

/******************************************************************
*   函數名稱:BayesLeasterror()
*   函數類型:int 
*   函數功能:最小錯誤概率的Bayes分類器 ,返回手寫數字的類別
******************************************************************/
int Classification::BayesLeasterror()
{
	double X[25];//待測樣品
	double Xmeans[25];//樣品的均值
	double S[25][25];//協方差矩陣
	double S_[25][25];//S的逆矩陣
	double Pw;//先驗概率
	double hx[10];//判別函數
	
	int i,j,k,n;
	
	for(n=0;n<10;n++)//循環類別0~9
	{
		int num=pattern[n].number;//樣品個數
		//求樣品平均值
		for(i=0;i<25;i++)
			Xmeans[i]=0.0;
		for(k=0;k<num;k++)
		{
			for(i=0;i<25;i++)
				Xmeans[i]+=pattern[n].feature[k][i]>0.10?1.0:0.0;
		}
		for(i=0;i<25;i++)
			Xmeans[i]/=(double)num;
		//求協方差矩陣
		double mode[200][25];
		for(i=0;i<num;i++)
			for(j=0;j<25;j++)
				mode[i][j]=pattern[n].feature[i][j]>0.10?1.0:0.0;
		for(i=0;i<25;i++)
		for(j=0;j<25;j++)
		{
			double s=0.0;
			for(k=0;k<num;k++)
				s=s+(mode[k][i]-Xmeans[i])*(mode[k][j]-Xmeans[j]);
			s=s/(double)(num-1);
			S[i][j]=s;
		}
		//求先驗概率
		int total=0;
		for(i=0;i<10;i++)
			total+=pattern[i].number;
		Pw=(double)num/(double)total;
		//求S的逆矩陣
		for(i=0;i<25;i++)
			for(j=0;j<25;j++)
				S_[i][j]=S[i][j];

		double(*p)[25]=S_;

		brinv(*p,25);//S的逆矩陣
		//求S的行列式
		double (*pp)[25]=S;
		double DetS;
		DetS=bsdet(*pp,25);//S的行列式
		//求判別函數
		for(i=0;i<25;i++)
			X[i]=testsample[i]>0.10?1.0:0.0;
		for(i=0;i<25;i++)
			X[i]-=Xmeans[i];
		double t[25];
		for(i=0;i<25;i++)
			t[i]=0;
		brmul(X,S_,25,t);
		double t1=brmul(t,X,25);
		double t2=log(Pw);
		double t3=log(DetS+1);
		hx[n]=-t1/2+t2-t3/2;
	}

	double maxval=hx[0];
	int number=0;
	//判別函數的最大值
	for(n=1;n<10;n++)
	{
		if(hx[n]>maxval)
		{
			maxval=hx[n];
			number=n;
		}
	}
	return number;
}

/******************************************************************
*   函數名稱:BayesLeastRisk(double loss[10][10])
*   函數類型:double*
*   參數說明:double loss[10][10]:損失
*   函數功能:最小風險的Bayes分類器 ,返回各類的風險值
******************************************************************/
double* Classification::BayesLeastRisk(double loss[10][10])
{
	double X[25];//待測樣品
	double Xmeans[25];//樣品的均值
	double S[25][25];//協方差矩陣S
	double S_[25][25];//S的逆矩陣
	double P[10];//后驗概率
	double Pw;//先驗概率
	double hx[10];//判別函數
	
	int i,j,k,n;
	
	for(n=0;n<10;n++)//
	{
		int num=pattern[n].number;//樣品個數
		//求樣品均值
		for(i=0;i<25;i++)
			Xmeans[i]=0.0;
		for(k=0;k<num;k++)
		{
			for(i=0;i<25;i++)
				Xmeans[i]+=pattern[n].feature[k][i]>0.2?1.0:0.0;
		}
		for(i=0;i<25;i++)
			Xmeans[i]/=(double)num;
		//求協方差矩陣
		double mode[200][25];
		for(i=0;i<num;i++)
			for(j=0;j<25;j++)
				mode[i][j]=pattern[n].feature[i][j]>0.2?1.0:0.0;
		for(i=0;i<25;i++)
		for(j=0;j<25;j++)
		{
			double s=0.0;
			for(k=0;k<num;k++)
				s=s+(mode[k][i]-Xmeans[i])*(mode[k][j]-Xmeans[j]);
			s=s/(double)(num-1);
			S[i][j]=s;
		}
		//求先驗概率
		int total=0;//樣品總數
		for(i=0;i<10;i++)
			total+=pattern[i].number;
		Pw=(double)num/(double)total;
		//求S的逆矩陣
		for(i=0;i<25;i++)
			for(j=0;j<25;j++)
				S_[i][j]=S[i][j];

		double(*p)[25]=S_;

		brinv(*p,25);//S的逆矩陣
		//求S的行列式
		double (*pp)[25]=S;
		double DetS;
		DetS=bsdet(*pp,25);//S的行列式
		//求判別函數
		for(i=0;i<25;i++)
			X[i]=testsample[i]>0.2?1.0:0.0;
		for(i=0;i<25;i++)
			X[i]-=Xmeans[i];
		double t[25];
		for(i=0;i<25;i++)
			t[i]=0;
		brmul(X,S_,25,t);
		double t1=brmul(t,X,25);
		double t2=log(Pw);
		double t3=log(DetS+1);
		P[n]=-t1/2+t2-t3/2;
	}
	
	for(n=0;n<10;n++)
	{
		double t=0.0;
		for(i=0;i<10;i++)
			t+=loss[n][i]*P[i];
		hx[n]=t;
	}
	
	return (double*)hx;
}

/******************************************************************
*   函數名稱:Jiangcheng()
*   函數類型:int 
*   函數功能:獎懲算法 ,返回手寫數字的類別
******************************************************************/
int Classification::Jiangcheng()
{
	double w[10][26];//權值
	double d[10];//迭代計算結果權矢量
	double x[26];//增1樣品
	double hx[10];//判別函數
	bool flag;
	int n,i,j,k;
	int c=0;//迭代次數

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人教育av在线| 欧美日本精品一区二区三区| av不卡在线播放| 在线视频欧美区| 欧美大黄免费观看| 国产精品第四页| 亚洲一区二区四区蜜桃| 久久99精品国产.久久久久 | 国产成人在线免费| 99v久久综合狠狠综合久久| 欧美最猛性xxxxx直播| 欧美电影免费观看高清完整版在 | 色哟哟精品一区| 欧美日韩精品三区| 国产日韩精品久久久| 亚洲综合在线第一页| 国产一区欧美二区| 欧美日韩视频在线观看一区二区三区 | 久久一夜天堂av一区二区三区| 中文字幕一区二区不卡 | 亚洲精品v日韩精品| 精品无码三级在线观看视频| 91啪在线观看| 欧美日韩国产另类不卡| 亚洲欧洲99久久| 国产精品中文字幕欧美| 欧美日韩国产欧美日美国产精品| 国产欧美一区二区精品秋霞影院| 午夜亚洲福利老司机| www.亚洲免费av| 亚洲资源中文字幕| 国产成人av资源| 欧美电影免费提供在线观看| 午夜电影一区二区三区| 国产乱一区二区| 日韩视频一区在线观看| 亚洲成人在线网站| 91极品美女在线| 日韩伦理av电影| eeuss鲁片一区二区三区| 久久久精品综合| 日韩avvvv在线播放| 欧美色精品在线视频| 亚洲免费av网站| 不卡电影一区二区三区| 国产精品嫩草99a| 粉嫩av一区二区三区| 精品国产乱子伦一区| 日本欧美在线观看| 欧美一区二区三区啪啪| 午夜精品免费在线观看| 欧美婷婷六月丁香综合色| 亚洲综合区在线| 国产91色综合久久免费分享| 欧美刺激午夜性久久久久久久| 日韩av在线免费观看不卡| 678五月天丁香亚洲综合网| 视频一区欧美日韩| 91国产免费看| 五月综合激情日本mⅴ| 91精品免费观看| 久久99精品国产91久久来源| 久久精品视频一区二区三区| 国产高清不卡一区| 综合亚洲深深色噜噜狠狠网站| 一本大道久久精品懂色aⅴ | 精品国产91乱码一区二区三区| 久久狠狠亚洲综合| 国产亚洲一区二区三区四区| 成人精品国产一区二区4080| 综合久久给合久久狠狠狠97色| 欧美性欧美巨大黑白大战| 日韩和欧美一区二区三区| 日韩欧美精品在线| 美女视频黄免费的久久 | 欧美日产在线观看| 黄网站免费久久| 中文字幕一区二区不卡| 欧洲精品一区二区| 偷窥国产亚洲免费视频| 久久色在线观看| 91视视频在线观看入口直接观看www| 亚洲一区二区三区三| 91成人网在线| 久久国产免费看| 中文字幕一区二区三区在线播放| 91福利在线导航| 久久电影网电视剧免费观看| 日韩欧美一级在线播放| 成人在线综合网站| 久久99精品国产麻豆婷婷洗澡| 亚洲国产精品精华液ab| 欧美精品日韩一本| 久久99精品久久久久婷婷| 精品成人a区在线观看| 色综合久久久久网| 麻豆精品视频在线观看| 亚洲精品视频在线看| 日韩精品一区二区三区四区| 在线观看亚洲精品| 最新成人av在线| 香蕉成人啪国产精品视频综合网| 精品国内二区三区| 日本电影亚洲天堂一区| 国产成人aaa| 日本成人在线看| 一区二区高清在线| 国产性色一区二区| 欧美一区二区精品| 欧美视频一区二区三区四区| 成人国产精品免费观看动漫| 狠狠网亚洲精品| 亚洲一区二区三区爽爽爽爽爽| 欧美电影免费观看高清完整版在线观看| av网站一区二区三区| 激情欧美一区二区三区在线观看| 亚洲国产精品久久久久婷婷884 | 一二三四社区欧美黄| 欧美激情一区二区三区蜜桃视频 | 91超碰这里只有精品国产| 91在线观看视频| 丁香六月久久综合狠狠色| 久久成人麻豆午夜电影| 奇米777欧美一区二区| 亚洲444eee在线观看| 国产精品拍天天在线| 国产女同互慰高潮91漫画| 精品剧情v国产在线观看在线| 欧美一区二区三区免费在线看| 欧美无乱码久久久免费午夜一区| 一本色道久久综合亚洲91| www.av亚洲| 丁香婷婷综合五月| 国产精品系列在线观看| 国产福利一区二区三区视频| 国产伦精品一区二区三区免费| 精品一区在线看| 国模一区二区三区白浆| 韩国视频一区二区| 国产在线精品不卡| 香蕉成人伊视频在线观看| 亚洲3atv精品一区二区三区| 欧美96一区二区免费视频| 国产黄色精品视频| 色综合久久久久久久久久久| 欧美视频三区在线播放| 日韩午夜av一区| 亚洲欧洲在线观看av| 天天爽夜夜爽夜夜爽精品视频| 韩国理伦片一区二区三区在线播放| 成人妖精视频yjsp地址| 欧美日产国产精品| 国产精品免费视频网站| 日本在线播放一区二区三区| 国产suv精品一区二区三区| 欧美中文字幕不卡| 久久久亚洲综合| 日韩国产一二三区| 欧美日韩中文精品| 精品国产乱码久久久久久图片 | 亚洲欧洲精品一区二区三区| 日韩中文字幕亚洲一区二区va在线| 国产精品一区二区你懂的| 91激情五月电影| 国产亚洲精品资源在线26u| 亚洲精品成人少妇| 国产xxx精品视频大全| 欧美日韩mp4| 亚洲色图欧美偷拍| 国产一区999| 欧美一区二区三区性视频| 亚洲天堂精品在线观看| 国产麻豆欧美日韩一区| 欧美久久久久免费| 亚洲精选视频在线| 国产精品一区二区91| 欧美一区二区三区婷婷月色| 亚洲蜜臀av乱码久久精品蜜桃| 国产高清精品久久久久| 精品va天堂亚洲国产| 免费在线成人网| 欧美日韩中文一区| 一区二区在线观看av| 成人涩涩免费视频| 久久久久一区二区三区四区| 日本系列欧美系列| 欧美日韩色综合| 一区二区久久久久| 91麻豆视频网站| 中文字幕一区二区日韩精品绯色| 国产精品538一区二区在线| 欧美xxxxx裸体时装秀| 日本三级亚洲精品| 8x8x8国产精品| 亚洲成人黄色影院| 欧美三区在线观看| 亚洲小说欧美激情另类| 欧美性猛交xxxxxx富婆| 亚洲国产精品久久久久婷婷884| 欧美中文字幕久久|