樸素貝葉斯分類算法代碼實(shí)現(xiàn)_第1頁
樸素貝葉斯分類算法代碼實(shí)現(xiàn)_第2頁
樸素貝葉斯分類算法代碼實(shí)現(xiàn)_第3頁
樸素貝葉斯分類算法代碼實(shí)現(xiàn)_第4頁
樸素貝葉斯分類算法代碼實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

樸素貝葉斯分類算法?貝葉斯分類的原理貝葉斯分類器的分類原理是通過某對象的先驗(yàn)概率,利用貝葉斯公式計(jì)算出其后驗(yàn)概率,即該對象屬于某一類的概率,選擇具有最大后驗(yàn)概率的類作為該對象所屬的類。也就是說,貝葉斯分類器是最小錯誤率意義上的優(yōu)化。貝葉斯分類器是用于分類的貝葉斯網(wǎng)絡(luò)。該網(wǎng)絡(luò)中應(yīng)包含類結(jié)點(diǎn)C,其中C的取值來自于類集合(cl,c2, ,cm),還包含一組結(jié)點(diǎn)X=(XI,X2,...,Xn),表示用于分類的特征。對于貝葉斯網(wǎng)絡(luò)分類器,若某一待分類的樣本D,其分類特征值為x=(xl,x2, ,xn),則樣本D屬于類別ci的概率P(C=ci|XI=xl,X2=x2,...,Xn=xn),(i=1,2,...,m)應(yīng)滿足下式:P(C=ci|X=x)=Max{P(C=cl|X=x),P(C=c2|X=x),,P(C=cm|X=x)}貝葉斯公式:P(C=ci|X=x)=P(X=x|C=ci)*P(C=ci)/P(X=x)其中,P(C=ci)可由領(lǐng)域?qū)<业慕?jīng)驗(yàn)得至I],而P(X=x|C=ci)和P(X=x)的計(jì)算則較困難。二.貝葉斯偽代碼整個(gè)算法可以分為兩個(gè)部分,“建立模型”與“進(jìn)行預(yù)測”,其建立模型的偽代碼如下:numAttrValues等簡單的數(shù)據(jù)從本地?cái)?shù)據(jù)結(jié)構(gòu)中直接讀取構(gòu)建兒個(gè)關(guān)鍵的計(jì)數(shù)表for(為每一個(gè)實(shí)例){for(每個(gè)屬性){為numClassAndAttr中當(dāng)前類,當(dāng)前屬性,當(dāng)前取值的單元加1為attFrequencies中當(dāng)前取值單元加1))預(yù)測的偽代碼如下:for(每一個(gè)類別){for(對每個(gè)屬性xj){for(對每個(gè)屬性xi){

if(F(xi)小于m){出現(xiàn)的次數(shù)沒有超過閥值,}else{查if(F(xi)小于m){出現(xiàn)的次數(shù)沒有超過閥值,}else{查numClassAndAttr計(jì)算))查numClassAndAttr計(jì)算)不予考慮F(y,xi,F(y,xi)xj)計(jì)算公式(7)中的評價(jià)函數(shù),記錄下這個(gè)類別的評價(jià)函數(shù)值)得到了各個(gè)類別上的條件概率,再帶入貝葉斯公式算出最后的概率三、算法實(shí)現(xiàn)代碼(1)建立模型voidGetModel::TrainModel0intSplitVal;Cache。;〃為模型分配內(nèi)存for(inti=0;i<=gi->MaxAttNo;i++)if(!gi->MaxAttValNoLil)SplitPoint[i]=gi->SplitContinuousAtt(i);}for(inti=0;i<=gi->MaxItemNo;i++)for(intj=0;j<=gi->MaxAttNo;j++)(if(gi->MaxAttValNo[j])PostFreq.gi">MaxAttNo+l..DiscrValue][j][gi->ItemLi][j].DiscrValue]++?else(if(gi*>ItemLil[j].continuousVal<=SplitPointEj])SplitVal=l;elseSplitVal=2;PostFreq[gi->Item[i]Lgi">MaxAttNo+lLDiscrValue][j][SplitVal]++;)voidGetModel::Cache0{PostFreq=(float***)calloc(gi->MaxClassNo+l,sizeof(float**));for(inti=0;i<=gi->MaxClassNo;i++){PostFreq.i.=(float**)calloc(gi->MaxAttNo+l,sizeof(float*));for(intj=0;j<=gi->MaxAttNo;j++)(if(gi->MaxAttValNo[j])PostFreqEi][j]=(float*)calloc(gi->MaxAttValNo[j]+1,sizeof(float));elsePostFreqEi][jj=(float*)calloc(3,sizeof(float));)}SplitPoint=(float*)calloc(gi->MaxAttNo+l,sizeof(float));)⑵預(yù)測PredictClass::PredictClass(GetInfo*i,GetModel*m,stringname,stringAttname):MaxClassNo(-1),MaxDiscrValNo(2),MaxAttNo(-1){gi二i;gm=m;filename=name;this">Inc=1024;AttFi1eName=Attname;)voidPredictClass::Predict(){float*prob;intBestl=-1;floatMaxProb=0;intj;GetName0;GetDataO;prob=(float*)calloc(MaxClassNo+1,sizeof(float));for(inti=0;i<=MaxClassNo;i++)prob[i]=l.0;for(inti=0;i<=MaxItemNo;i++)for(j=0;j<=MaxClassNo;j++)(for(intk=0;k<=MaxAttNo;k++)(if(MaxAttValNo[k])prob[j]*=(gm->PostFreq[j][k]EltemEiZ[kJ.DiscrValue]/gi->ClassFreq[j]);else{if(ItemLil[k].continuousVal<=gm->SplitPoint[k])prob[j]*=(gm->PostFreq[j][k][l]/gi">ClassFreq[j]);elseprob[j]*=(gm->PostFreq[j][k][2]/gi->ClassFreq[j]);))prob[*=(gi->ClassFreq[j]/(gi->MaxItemNo+l));if(prob[j]>MaxProb)(MaxProb=prob[j];Bestl=j;))概率最大“〈〈MaxProb<X〃類別=“〈〈ClassName[Bestl]?endl;ItemLil[MaxAttNo+1].DiscrValue=BestI;/*重置*/(Bestl=-1;MaxProb=0;for(inti=0;i<=MaxClassNo;i++)probZi]=l.0;)}show();)voidPredictClass::show(){inti,j;for(i=0;i<=MaxItemNo;i++)(for(j=0;j<=MaxAttNo;j++)(if(MaxAttValNo[j])cout<<A11VaIName[j] [j].DiscrValue] ;elsecout<<Item[i][j].continuousVal<<,z}cout<<〃預(yù)測結(jié)果為:,,?ClassName[Item[i][j].DiscrValue]<<endl;})voidPredictClass::GetData(){FILE*Nf;charFn[50];fi1ename=fi1ename+,z.data”;filename,copy(Fn,filename,length0);Fn[filename,length0J=NULL;if(!(Nf=fopen(Fn,"r")))Error(0,Fn,〃“);intItemNo=0;intItemSpace=0;do{MaxItemNo=ItemNo;/*Makesurethereisroomforanotheritem*/if(ItemNo>=ItemSpace){if(ItemSpace)(ItemSpace+=Inc;Item = (Description *)realloc(Item,ItemSpace*sizeof(Description));}else(Item = (Description*)malloc((ItemSpace=Inc)*sizeof(Description));)}ItemritemNo]=GetDescription(Nf);}while(ItemEltemNo]!=0&&++ItemNo);fclose(Nf);Max11emNo=11emNo-1;)void PredictClass::Error(intn,stringsi,strings2)/* */cout?"ERR0R:switch(n)case0:cout?/zcannotopenfilez,<<sl?s2?endl;break;case1:cout?/zcolonexpectedafterattributename,z?sl?endl;break;case2:cout?/zunexpectedEOFwhilereadingattributesl?endl;break;:cout<<,zattribute hasonlyonevalue,z?endl;break;cout?z,caseMaxItemNo+l?/z,svalueof' forattributez,?sl?z/isillegal,z?endl;//Error(4,AttName[AttNo],name);break;case5:cout?,zcase/z?MaxItemNo+l?,z,sclassof' isillegalz,?endl;break;)cout?z,processstop!,z?endl;exit(1);)DescriptionPredictClass::GetDescription(FILE*Df){intAttNo;/*attributenumber,0..MaxAttNo*/charname[50],*endname;intDv;floatCv;DescriptionDvec;if(ReadName(Df,name)){Dvec=(Description)calloc(MaxAttNo+2,sizeof(AttValue));〃因?yàn)閍MaxAttN。是從a開始計(jì)數(shù)的在加上類別屬性,所以+2for(AttNo=0;AttNo<=MaxAttNo;AttNo++){if(Ma^ttValNoEAttNo])(/*Discretevalue*/Dv=Which(name,AttValName[AttNo],1,MaxAttValNo[AttNo]);if(!Dv)Error(4,AttName[AttNo],name);DvecTAttNo].DiscrValue=Dv;else(/*Continuousvalue*/Cv=(float)strtod(name,&endname);if(endname=nameI|*endname!='\0')Error(4,AttName[AttNo],name);DvecLAttNo].continuousVal=Cv;)ReadName(Df,name);}returnDvec;)else{return0;))voidPredictClass::GetName0{FILE*Nf;charBuffer[1000.;charFn[100];intAttCeiling=100;intClassCeiling=100;intValCeiling;AttFileName,copy(Fn,AttFileName.length0);FnEAttFileName.length()]=NULL;strcat_s(Fn,"?names");if(!(Nf=fopen(Fn,"r")))Error(0,Fn,;ClassName=(string*)calloc(ClassCeiling,sizeof(string));do{ReadName(Nf,Buffer);if(++MaxClassNo>=ClassCeiling){ClassCeiling+=100;realloc(ClassName,ClassName = (string *)realloc(ClassName,ClassCeiling*sizeof(string));}ClassName[MaxClassNo]=string(Buffer);)while(Delimiter= );/*Getattributeandattributevaluenamesfromnamesfile*/AttName=(string*)calloc(AttCeiling,sizeof(string));MaxAttValNo=(short*)calloc(AttCeiling,sizeof(short));AttValName=(string**)calloc(AttCeiling,sizeof(string*));//SpecialStatus=(char*)malloc(AttCeiling);while(ReadName(Nf,Buffer)){if(Delimiter!=':')Error(1,Buffer,");if(++MaxAttNo>=AttCeiling)〃擴(kuò)大空間{AttCeiling+=100;AttName=(string*)realloc(AttName,AttCeiling*sizeof(string));MaxAttValNo=(short*)realloc(MaxAttValNo,AttCeiling*sizeof(short));AttValName=(string**)realloc(AttValName,AttCeiling*sizeof(string*));//SpecialStatus=(char*)realloc(SpecialStatus,AttCeiling);}AttName[MaxAttNo.=string(Buffer);//SpecialStatus[MaxAttNo]=0;MaxAttValNo[MaxAttNo]=0;ValCeiling=100;AttValName.MaxAttNo.=(string*)calloc(ValCeiling,sizeof(string));do{if(!(ReadName(Nf,Buffer)))Error(2,AttName[MaxAttNo],“〃);if(++MaxAttValNo[MaxAttNo]>=ValCeiling)(ValCeiling+:100;AttValName[MaxAttNo.=(string*)realloc(AttValName[MaxAttNo],ValCeiling*sizeof(string));)AttValName[MaxAttNoZ[MaxAttValNoZMaxAttNoZ]=string(Buffer);}while(Delimiter=;if(MaxAttValNo[MaxAttNo]=1){/*Checkforspecialtreatment*/if(!strcmp(Buffer,“continuous"))//MaxContAttNo++;else(/*Cannothaveonlyonediscretevalueforanattribute*/Error(3,AttName[MaxAttNo],");)MaxAttValNo[MaxAttNo]=0;}elseif(MaxAttValNo[MaxAttNo]>MaxDiscrValNo)MaxDiscrValNo=MaxAttValNo[MaxAttNoJ;)fclose(Nf);)boolPredictClass::ReadName(FILE*f,char*Buffer){registerchar*Sp=Buffer;registerintc;while((c=getc(f))=''Ispace(c)){if(c='')SkipComment;)if(c==EOF){Delimiter=EOF;returnfalse;)〃讀數(shù)據(jù)while(c &&c &&c!='\n'&&c!='|'&&c!=EOF){if(c='.'){if((c=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論