1、C+编程bayes算法运行界面:源代码:#include stdafx.h#include Bayes.h#include BayesClass.h#include #ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endifBayesClass:BayesClass(HWND h) hwnd =h; if(fout = fopen(result.txt, w) = NULL) exit(0);BayesClass:BayesClass() if(fout!= NULL) fclose
2、(fout); int i; for (i=0;imean.size();i+) if (NULL!=mean.at(i) delete mean.at(i); for (i=0;icovariance.size();i+) if (NULL!=covariance.at(i) delete covariance.at(i); for (i=0;iprama.size();i+) if (NULL!=prama.at(i) delete prama.at(i); for (i=0;ifaceprama.size();i+) if (NULL!=faceprama.at(i) delete fa
3、ceprama.at(i); for (i=0;icoefficient.size();i+) if (NULL!=coefficient.at(i) delete coefficient.at(i); for (i=0;icoefficientface.size();i+) if (NULL!=coefficientface.at(i) delete coefficientface.at(i); int BayesClass:LoadSamples(char *fname) FILE *InFile; int i,j; int x; if(InFile = fopen(fname, r) =
4、 NULL) return FAILURE; fscanf(InFile, %d, &num); fscanf(InFile, %d, &dim); fscanf(InFile, %d, &cls); for (i=0; inum; i+) vector temp; for (j=0; jdim; j+) fscanf(InFile,%d,&x); temp.push_back(x); samples.samples.push_back(temp); fscanf(InFile,%d,&x); samples.belong.push_back(x); /write the load resul
5、t to file FPEL(fout); FPS(fout,samples:); FPEL(fout); for (i=0; inum; i+) for (j=0; jdim; j+) FPI(fout,samples.samples.at(i).at(j),NEL); FPI(fout,samples.belong.at(i),NEL); FPEL(fout); return SUCCESS;void BayesClass:EstimateGauss() int i,j,k; int count; double sum; double meandim; /cal the guass mea
6、n for (i=1;i=cls;i+) double *temp=new doubledim; for(j=0;jdim;j+) count=0; sum=0.0; for (k=0;knum;k+) if (samples.belong.at(k)=i) count+; sum+=samples.samples.at(k).at(j); if (count=0) return; tempj=sum/count; preratio.push_back(double)count/num);/cal pre ratio Matrix *m=new Matrix(temp,dim); mean.p
7、ush_back(m); delete temp; /write the means to file FPEL(fout); FPS(fout,means:); FPEL(fout); for (i=0;iToString().c_str(); FPEL(fout); /cal the covariance matrix for (i=1;i=cls;i+) Matrix *m=mean.at(i-1); double *temp=new doubledim*dim; for (int tempi=0;tempidim*dim;tempi+) temptempi=0; for(j=0;jGet
8、Value(0,j); for (k=0;knum;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; / tempj*dim+j=sum/count; tempj*dim+j=sum/(count-1);/wait for change Matrix *c=new Matrix(temp,dim,dim); covariance.push_back(c); de
9、lete temp; /write the covariance to file FPEL(fout); FPS(fout,covariance:); FPEL(fout); for (i=0;iToString().c_str(); FPEL(fout); void BayesClass:CalDistPrama(int contype) this-contype=contype; switch(contype) case CON_EQUL: int i; double temp; / double a,b,c; Matrix total(0.0,dim); for (i=0;iT().T(
10、); FPEL(fout); FPS(fout,Total covariance:); FPEL(fout); FPS(fout,total.ToString().c_str(); FPEL(fout); for (i=0;iVi=(-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)-
11、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;iVi.ToString().c_str(); / FPEL(fout); FPS(fout,dp-Wi.ToString().c_str(); FPEL(fout); FPD(fout,dp-w0);
12、 FPEL(fout); break; case CON_NOTEQUL: int i; double temp; / double a,b,c; for (i=0;iVi=(-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();
13、/ 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;iVi.ToString().c_str(); FPEL(fout); FPS(fout,dp-Wi.ToString().c_str(); FPEL(fout); FPD(fout,dp-w0
14、); FPEL(fout); break; void BayesClass:CalDistFace() switch(contype) case CON_EQUL: int i,j; double temp; Matrix total(0.0,dim); for (i=0;iT().T(); for (i=0;icls;i+) for (j=i+1;jT()-mean.at(j)-T(); dfp-w=total.Contra()*tempm; temp=(tempm.T()*total.Contra()*tempm).GetFirstValue(); dfp-x0=(-1.0/2)-log(
15、preratio.at(i)/preratio.at(j)/temp)*tempm; faceprama.push_back(dfp); FPEL(fout); FPS(fout,DISTFACEPRAMA:); FPEL(fout); for (i=0;iw.ToString().c_str(); FPEL(fout); FPS(fout,dfp-x0.ToString().c_str(); FPEL(fout); break; case CON_NOTEQUL:/ / int i;/ double temp;/ for (i=0;iVi=(-1.0/2)*(covariance.at(i)
16、-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()+
17、log(preratio.at(i);/ prama.push_back(dp);/ / for (i=0;iVi.ToString().c_str();/ FPEL(fout);/ FPS(fout,dp-Wi.ToString().c_str();/ FPEL(fout);/ FPD(fout,dp-w0);/ FPEL(fout);/ / break; int BayesClass:DoDistOne(int *one,int n) SetOne(one,n); return DistOne();int BayesClass:DoDistOne(vector *test) if (tes
18、t-size()!=dim) return -1; int i; this-one.clear(); for (i=0;ione.push_back(test-at(i); return DistOne();void BayesClass:SetOne(int *one,int n) this-one.clear(); int d=(dimn)?n:dim; int i; for (i=0;ione.push_back(onei); /if n is less than dim, the left are filled with 0 for (i=d;ione.push_back(0); in
19、t BayesClass:DistOne() if (one.size()!=dim) return -1; double *ratio=new doublecls; int i; double *temp=new doubledim; for (i=0;idim;i+) tempi=one.at(i); Matrix m(temp,dim); delete temp;/ double a,b; for (i=0;iVi*m.T().GetFirstValue();/ b=(prama.at(i)-Wi.T()*m.T().GetFirstValue();/ ratioi=a+b+prama.
20、at(i)-w0; switch(contype) case CON_EQUL: ratioi=(prama.at(i)-Wi.T()*m.T().GetFirstValue()+prama.at(i)-w0; break; case CON_NOTEQUL: ratioi=(m*prama.at(i)-Vi*m.T().GetFirstValue()+(prama.at(i)-Wi.T()*m.T().GetFirstValue()+prama.at(i)-w0; break; for (i=0;icls;i+) FPD(fout,ratioi); /get the max double m
21、ax=ratio0; int index=0; for (i=1;icls;i+) if(maxratioi)max=ratioi;index=i; delete ratio; return index+1;void BayesClass:PrepareForDist(int contype) EstimateGauss(); CalDistPrama(contype);/ CalDistFace(); CalCoefficientFace();SAMPLE* BayesClass:GetSamples() return &samples;vector* BayesClass:GetDistP
22、rama() return &prama;void BayesClass:ConvertToEquation() if (dim!=2) return; int i; switch(contype) case CON_EQUL: for(i=0;ione1=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; case CON_NOTEQUL: for(i=0;itwo1=prama.at(i)-V
23、i.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; void BayesClass:CalCoefficientFace() if (dim!=2) return; int i,j; switch(contype) case CON_EQUL: for(i=0;icls;i+) for (j=i+
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1