C++编程bayes算法.docx

上传人:b****4 文档编号:4992904 上传时间:2022-12-12 格式:DOCX 页数:21 大小:42.92KB
下载 相关 举报
C++编程bayes算法.docx_第1页
第1页 / 共21页
C++编程bayes算法.docx_第2页
第2页 / 共21页
C++编程bayes算法.docx_第3页
第3页 / 共21页
C++编程bayes算法.docx_第4页
第4页 / 共21页
C++编程bayes算法.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C++编程bayes算法.docx

《C++编程bayes算法.docx》由会员分享,可在线阅读,更多相关《C++编程bayes算法.docx(21页珍藏版)》请在冰豆网上搜索。

C++编程bayes算法.docx

C++编程bayes算法

运行界面:

源代码:

#include"stdafx.h"

#include"Bayes.h"

#include"BayesClass.h"

#include

#ifdef_DEBUG

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#definenewDEBUG_NEW

#endif

BayesClass:

:

BayesClass(HWNDh)

{

hwnd=h;

if((fout=fopen("result.txt","w"))==NULL)

exit(0);

}

BayesClass:

:

~BayesClass()

{

if(fout!

=NULL)

fclose(fout);

inti;

for(i=0;i

{

if(NULL!

=mean.at(i))

{

deletemean.at(i);

}

}

for(i=0;i

{

if(NULL!

=covariance.at(i))

{

deletecovariance.at(i);

}

}

for(i=0;i

{

if(NULL!

=prama.at(i))

{

deleteprama.at(i);

}

}

for(i=0;i

{

if(NULL!

=faceprama.at(i))

{

deletefaceprama.at(i);

}

}

for(i=0;i

{

if(NULL!

=coefficient.at(i))

{

deletecoefficient.at(i);

}

}

for(i=0;i

{

if(NULL!

=coefficientface.at(i))

{

deletecoefficientface.at(i);

}

}

}

intBayesClass:

:

LoadSamples(char*fname)

{

FILE*InFile;

inti,j;

intx;

if((InFile=fopen(fname,"r"))==NULL)

returnFAILURE;

fscanf(InFile,"%d",&num);

fscanf(InFile,"%d",&dim);

fscanf(InFile,"%d",&cls);

for(i=0;i

vectortemp;

for(j=0;j

fscanf(InFile,"%d",&x);

temp.push_back(x);

}

samples.samples.push_back(temp);

fscanf(InFile,"%d",&x);

samples.belong.push_back(x);

}

//writetheloadresulttofile

FPEL(fout);

FPS(fout,"samples:

");

FPEL(fout);

for(i=0;i

for(j=0;j

FPI(fout,samples.samples.at(i).at(j),NEL);

}

FPI(fout,samples.belong.at(i),NEL);

FPEL(fout);

}

returnSUCCESS;

}

voidBayesClass:

:

EstimateGauss()

{

inti,j,k;

intcount;

doublesum;

doublemeandim;

//caltheguassmean

for(i=1;i<=cls;i++)

{

double*temp=newdouble[dim];

for(j=0;j

{

count=0;

sum=0.0;

for(k=0;k

{if(samples.belong.at(k)==i)

{

count++;

sum+=samples.samples.at(k).at(j);

}

}

if(count==0)

{

return;

}

temp[j]=sum/count;

}

preratio.push_back((double)count/num);//calpreratio

Matrix*m=newMatrix(temp,dim);

mean.push_back(m);

delete[]temp;

}

//writethemeanstofile

FPEL(fout);

FPS(fout,"means:

");

FPEL(fout);

for(i=0;i

{

FPS(fout,mean.at(i)->ToString().c_str());

FPEL(fout);

}

//calthecovariancematrix

for(i=1;i<=cls;i++)

{

Matrix*m=mean.at(i-1);

double*temp=newdouble[dim*dim];

for(inttempi=0;tempi

{

temp[tempi]=0;

}

for(j=0;j

{

count=0;

sum=0.0;

meandim=m->GetValue(0,j);

for(k=0;k

{if(samples.belong.at(k)==i)

{

count++;

sum+=(samples.samples.at(k).at(j)-meandim)*(samples.samples.at(k).at(j)-meandim);

}

}

if(count==0)

{

return;

}

//temp[j*dim+j]=sum/count;

temp[j*dim+j]=sum/(count-1);//waitforchange

}

Matrix*c=newMatrix(temp,dim,dim);

covariance.push_back(c);

delete[]temp;

}

//writethecovariancetofile

FPEL(fout);

FPS(fout,"covariance:

");

FPEL(fout);

for(i=0;i

{

FPS(fout,covariance.at(i)->ToString().c_str());

FPEL(fout);

}

}

voidBayesClass:

:

CalDistPrama(intcontype)

{

this->contype=contype;

switch(contype)

{

caseCON_EQUL:

{

inti;

doubletemp;

//doublea,b,c;

Matrixtotal(0.0,dim);

for(i=0;i

{

total=total+covariance.at(i)->T().T();

}

FPEL(fout);

FPS(fout,"Totalcovariance:

");

FPEL(fout);

FPS(fout,total.ToString().c_str());

FPEL(fout);

for(i=0;i

{

DISTPRAMA*dp=newDISTPRAMA();

//dp->Vi=(-1.0/2)*(covariance.at(i)->Contra());

dp->Wi=(total.Contra())*(mean.at(i)->T());

temp=((mean.at(i)->T().T())*(total.Contra())*(mean.at(i)->T())).GetFirstValue();

//a=(-1.0/2)*log(covariance.at(i)->Arg());

//b=log(preratio.at(i));

//dp->w0=(-1.0/2)*temp-a+b;

dp->w0=(-1.0/2)*temp-(-1.0/2)*log(total.Arg())+log(preratio.at(i));

prama.push_back(dp);

}

FPEL(fout);

FPS(fout,"DISTPRAMA:

");

FPEL(fout);

for(i=0;i

{

DISTPRAMA*dp=prama.at(i);

//FPS(fout,dp->Vi.ToString().c_str());

//FPEL(fout);

FPS(fout,dp->Wi.ToString().c_str());

FPEL(fout);

FPD(fout,dp->w0);

FPEL(fout);

}

}

break;

caseCON_NOTEQUL:

{

inti;

doubletemp;

//doublea,b,c;

for(i=0;i

{

DISTPRAMA*dp=newDISTPRAMA();

dp->Vi=(-1.0/2)*(covariance.at(i)->Contra());

dp->Wi=(covariance.at(i)->Contra())*(mean.at(i)->T());

temp=((mean.at(i)->T().T())*(covariance.at(i)->Contra())*(mean.at(i)->T())).GetFirstValue();

//a=(-1.0/2)*log(covariance.at(i)->Arg());

//b=log(preratio.at(i));

//dp->w0=(-1.0/2)*temp-a+b;

dp->w0=(-1.0/2)*temp-(-1.0/2)*log(covariance.at(i)->Arg())+log(preratio.at(i));

prama.push_back(dp);

}

FPEL(fout);

FPS(fout,"DISTPRAMA:

");

FPEL(fout);

for(i=0;i

{

DISTPRAMA*dp=prama.at(i);

FPS(fout,dp->Vi.ToString().c_str());

FPEL(fout);

FPS(fout,dp->Wi.ToString().c_str());

FPEL(fout);

FPD(fout,dp->w0);

FPEL(fout);

}

}

break;

}

}

voidBayesClass:

:

CalDistFace()

{

switch(contype)

{

caseCON_EQUL:

{

inti,j;

doubletemp;

Matrixtotal(0.0,dim);

for(i=0;i

{

total=total+covariance.at(i)->T().T();

}

for(i=0;i

{

for(j=i+1;j

{

DISTFACEPRAMA*dfp=newDISTFACEPRAMA();

Matrixtempm=mean.at(i)->T()-mean.at(j)->T();

dfp->w=total.Contra()*tempm;

temp=(tempm.T()*total.Contra()*tempm).GetFirstValue();

dfp->x0=((-1.0/2)-log((preratio.at(i)/preratio.at(j))/temp))*tempm;

faceprama.push_back(dfp);

}

}

FPEL(fout);

FPS(fout,"DISTFACEPRAMA:

");

FPEL(fout);

for(i=0;i

{

DISTFACEPRAMA*dfp=faceprama.at(i);

FPS(fout,dfp->w.ToString().c_str());

FPEL(fout);

FPS(fout,dfp->x0.ToString().c_str());

FPEL(fout);

}

}

break;

caseCON_NOTEQUL:

//{

//inti;

//doubletemp;

//for(i=0;i

//{

//DISTPRAMA*dp=newDISTPRAMA();

//dp->Vi=(-1.0/2)*(covariance.at(i)->Contra());

//dp->Wi=(covariance.at(i)->Contra())*(mean.at(i)->T());

//temp=((mean.at(i)->T().T())*(covariance.at(i)->Contra())*(mean.at(i)->T())).GetFirstValue();

////a=(-1.0/2)*log(covariance.at(i)->Arg());

////b=log(preratio.at(i));

////dp->w0=(-1.0/2)*temp-a+b;

//dp->w0=(-1.0/2)*temp-(-1.0/2)*log(covariance.at(i)->Arg())+log(preratio.at(i));

//prama.push_back(dp);

//}

//for(i=0;i

//{

//DISTPRAMA*dp=prama.at(i);

//FPS(fout,dp->Vi.ToString().c_str());

//FPEL(fout);

//FPS(fout,dp->Wi.ToString().c_str());

//FPEL(fout);

//FPD(fout,dp->w0);

//FPEL(fout);

//}

//}

break;

}

}

intBayesClass:

:

DoDistOne(int*one,intn)

{

SetOne(one,n);

returnDistOne();

}

intBayesClass:

:

DoDistOne(vector*test)

{

if(test->size()!

=dim){

return-1;

}

inti;

this->one.clear();

for(i=0;i

{

this->one.push_back(test->at(i));

}

returnDistOne();

}

voidBayesClass:

:

SetOne(int*one,intn)

{

this->one.clear();

intd=(dim>n)?

n:

dim;

inti;

for(i=0;i

{

this->one.push_back(one[i]);

}

//ifnislessthandim,theleftarefilledwith0

for(i=d;i

{

this->one.push_back(0);

}

}

intBayesClass:

:

DistOne()

{

if(one.size()!

=dim)

{

return-1;

}

double*ratio=newdouble[cls];

inti;

double*temp=newdouble[dim];

for(i=0;i

{

temp[i]=one.at(i);

}

Matrixm(temp,dim);

delete[]temp;

//doublea,b;

for(i=0;i

{

//a=(m*prama.at(i)->Vi*m.T()).GetFirstValue();

//b=(prama.at(i)->Wi.T()*m.T()).GetFirstValue();

//ratio[i]=a+b+prama.at(i)->w0;

switch(contype)

{

caseCON_EQUL:

{

ratio[i]=(prama.at(i)->Wi.T()*m.T()).GetFirstValue()+prama.at(i)->w0;

}

break;

caseCON_NOTEQUL:

{

ratio[i]=(m*prama.at(i)->Vi*m.T()).GetFirstValue()+(prama.at(i)->Wi.T()*m.T()).GetFirstValue()+prama.at(i)->w0;

}

break;

}

}

for(i=0;i

{

FPD(fout,ratio[i]);

}

//getthemax

doublemax=ratio[0];

intindex=0;

for(i=1;i

{

if(max

}

delete[]ratio;

returnindex+1;

}

voidBayesClass:

:

PrepareForDist(intcontype)

{

EstimateGauss();

CalDistPrama(contype);

//CalDistFace();

CalCoefficientFace();

}

SAMPLE*BayesClass:

:

GetSamples()

{

return&samples;

}

vector*BayesClass:

:

GetDistPrama()

{

return&prama;

}

voidBayesClass:

:

ConvertToEquation()

{

if(dim!

=2)

{

return;

}

inti;

switch(contype)

{

caseCON_EQUL:

{

for(i=0;i

{

COEFFICIENT*co=newCOEFFICIENT();

co->one1=prama.at(i)->Wi.GetValue(0,0);

co->one2=prama.at(i)->Wi.GetValue(1,0);

co->zero=prama.at(i)->w0;

coefficient.push_back(co);

}

}

break;

caseCON_NOTEQUL:

{

for(i=0;i

{

COEFFICIENT*co=newCOEFFICIENT();

co->two1=prama.at(i)->Vi.GetValue(0,0)+prama.at(i)->Vi.GetValue(0,1);

co->two2=prama.at(i)->Vi.GetValue(1,0)+prama.at(i)->Vi.GetValue(1,1);

co->one1=prama.at(i)->Wi.GetValue(0,0);

co->one2=prama.at(i)->Wi.GetValue(1,0);

co->zero=prama.at(i)->w0;

coefficient.push_back(co);

}

}

break;

}

}

voidBayesClass:

:

CalCoefficientFace()

{

if(dim!

=2)

{

return;

}

inti,j;

switch(contype)

{

caseCON_EQUL:

{

for(i=0;i

{

for(j=i+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1