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

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

?? classification.cpp

?? 此程序詳細的列出模式識別中的最基本的一些方法,是初學模式識別的人很好的教材,全部用C++實現
?? 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免费| 911精品产国品一二三产区| 亚洲欧美在线视频观看| 国产福利91精品一区| 精品少妇一区二区三区免费观看| 亚洲专区一二三| 色呦呦国产精品| 国产精品成人一区二区艾草| 国产在线播放一区| 日韩一级黄色大片| 天堂av在线一区| 欧美三级在线视频| 亚洲一区二区四区蜜桃| 91久久奴性调教| 一区二区在线电影| 色综合天天综合网天天看片| 亚洲欧美在线aaa| 成人美女在线视频| 国产片一区二区| 国产成人av福利| 久久精品在这里| 国产高清亚洲一区| 国产日韩欧美综合在线| 成人一道本在线| 国产精品激情偷乱一区二区∴| 成人午夜电影小说| 最新久久zyz资源站| 日本精品免费观看高清观看| 亚洲精品视频免费看| 欧美性色黄大片手机版| 日日摸夜夜添夜夜添亚洲女人| 欧美日韩在线免费视频| 日韩高清国产一区在线| 精品国产区一区| 高清不卡一二三区| 亚洲乱码国产乱码精品精的特点| 91美女片黄在线观看91美女| 一区二区三区中文字幕| 欧美日本一区二区| 美女一区二区视频| 国产午夜精品美女毛片视频| 成人avav影音| 亚洲午夜久久久久久久久电影院 | 麻豆精品久久精品色综合| 日韩三级精品电影久久久| 国产一区二区电影| 自拍偷拍亚洲综合| 在线91免费看| 国产91在线看| 一区二区国产盗摄色噜噜| 日韩精品一区二区三区在线播放| 国产一区二区女| 亚洲综合成人在线视频| 久久综合九色综合欧美98| 99国产精品久久久久| 日韩精品成人一区二区三区| 久久―日本道色综合久久| 色一情一伦一子一伦一区| 青青青爽久久午夜综合久久午夜| 亚洲国产精品99久久久久久久久| 色香蕉成人二区免费| 久久精品国产99| 亚洲最新在线观看| 久久精品视频免费| 91麻豆精品国产91久久久久| 成人免费视频网站在线观看| 三级欧美在线一区| 国产精品久久久久久亚洲伦| 91精品在线麻豆| 日本久久精品电影| 成人国产精品免费观看动漫| 人人超碰91尤物精品国产| 亚洲日本va午夜在线影院| 精品不卡在线视频| 欧美精品777| 日本黄色一区二区| 不卡在线视频中文字幕| 国产麻豆日韩欧美久久| 蜜臀av一级做a爰片久久| 亚洲女与黑人做爰| 国产精品不卡视频| 久久精品亚洲精品国产欧美kt∨ | 亚洲黄色小视频| 国产视频视频一区| 欧美一区午夜精品| 欧美日韩中文字幕一区| 99精品国产一区二区三区不卡| 激情综合色丁香一区二区| 亚洲成人一区二区在线观看| 国产欧美日产一区| 久久久不卡影院| 精品国产一区二区三区忘忧草| 欧美精品第1页| 欧美日韩高清一区二区三区| 欧美午夜不卡在线观看免费| 91免费在线看| 色综合天天综合色综合av | 国产不卡一区视频| 国产一二精品视频| 国产一区二区三区免费看| 久久99国内精品| 免费观看一级特黄欧美大片| 爽好久久久欧美精品| 亚洲制服欧美中文字幕中文字幕| 亚洲精品久久7777| 亚洲国产精品久久不卡毛片| 一区二区视频免费在线观看| 亚洲午夜精品在线| 午夜欧美大尺度福利影院在线看| 一区二区三区在线免费视频| 亚洲一区二区高清| 午夜精品国产更新| 日本怡春院一区二区| 久久99国内精品| 不卡的av电影在线观看| 不卡区在线中文字幕| 91片在线免费观看| 欧美午夜不卡在线观看免费| 91精品婷婷国产综合久久| 日韩三区在线观看| 久久蜜桃av一区精品变态类天堂 | 精品一区二区免费视频| 国内不卡的二区三区中文字幕 | 亚洲综合图片区| 午夜精品福利久久久| 美女www一区二区| 岛国av在线一区| 欧洲精品一区二区| 日韩女优电影在线观看| 亚洲国产高清在线观看视频| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲欧美一区二区三区孕妇| 婷婷一区二区三区| 狠狠色狠狠色合久久伊人| 成人av电影在线播放| 欧美久久久久久久久| 久久久久久久久一| 亚洲国产精品尤物yw在线观看| 免费观看30秒视频久久| 不卡一区在线观看| 欧美一区二区三区在线看| 亚洲国产精品精华液ab| 亚洲第一福利视频在线| 91蜜桃网址入口| 日韩久久久久久| 亚洲精品免费在线| 国产又黄又大久久| 欧美日韩一区二区欧美激情| 久久精品人人做人人爽97| 亚洲第一电影网| 99久久综合精品| 久久综合九色综合97婷婷女人 | 日韩精品一级二级| av成人免费在线| 久久久av毛片精品| 亚洲国产精品久久艾草纯爱| 国产sm精品调教视频网站| 欧美精品欧美精品系列| 亚洲色欲色欲www在线观看| 免费看欧美美女黄的网站| 99久久久免费精品国产一区二区| 日韩欧美国产不卡| 午夜视频一区在线观看| av不卡在线观看| 久久久精品2019中文字幕之3| 午夜欧美电影在线观看| 91最新地址在线播放| 国产喂奶挤奶一区二区三区| 男人操女人的视频在线观看欧美| 欧洲在线/亚洲| 亚洲欧美日韩久久精品| 高清国产一区二区三区| www欧美成人18+| 免费看欧美美女黄的网站| 欧美日韩一本到| 亚洲免费观看高清完整版在线观看熊| 国产成人高清在线| 国产欧美视频一区二区| 国产一区二区久久| 欧美成人激情免费网| 看电影不卡的网站| 精品国产人成亚洲区| 国产一级精品在线| 久久精品一区二区| 成人午夜免费av| 国产精品美女一区二区三区|