朴树贝叶斯算法及截图.docx

上传人:b****6 文档编号:4560439 上传时间:2022-12-06 格式:DOCX 页数:8 大小:257.94KB
下载 相关 举报
朴树贝叶斯算法及截图.docx_第1页
第1页 / 共8页
朴树贝叶斯算法及截图.docx_第2页
第2页 / 共8页
朴树贝叶斯算法及截图.docx_第3页
第3页 / 共8页
朴树贝叶斯算法及截图.docx_第4页
第4页 / 共8页
朴树贝叶斯算法及截图.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

朴树贝叶斯算法及截图.docx

《朴树贝叶斯算法及截图.docx》由会员分享,可在线阅读,更多相关《朴树贝叶斯算法及截图.docx(8页珍藏版)》请在冰豆网上搜索。

朴树贝叶斯算法及截图.docx

朴树贝叶斯算法及截图

//naiveBayesClassify.cpp:

定义控制台应用程序的入口点。

//

#include"stdafx.h"

#include

#include

#include

#include

#include

usingnamespacestd;

 

//savethetrainingdata

typedefvector>strDVect;

//saveallpossibleconditionprobabilitys

typedefmap>>thriMap;

//serviceforthriMap

typedefmap>doubleMap;

typedefmapstrMap;

//savethekindofaimattributevalue

typedefmapaimMap;

//kindofeveryattributeincludingaimattributevalue

typedefmapattMap;

//constfordenominatorandnumerator

doubleK=1;

//sample

typedefvectorsampleVect;

//checkthethreedimensionsmapandreturn4states

intexistRecord(thriMapprob,stringaimValue,stringattName,stringattValue)

{

 thriMap:

:

const_iteratoriterThri= prob.find(aimValue);

 if(iterThri==prob.end())

  return1;

 doubleMap:

:

const_iteratoriterDouble=iterThri->second.find(attName);

 if(iterDouble==iterThri->second.end())

  return2;

 strMap:

:

const_iteratoriterSingle=iterDouble->second.find(attValue);

 if(iterSingle==iterDouble->second.end())

  return3;

 return4; 

}

voidshow(thriMapprob)

{

 thriMap:

:

iteratoriterThri=prob.begin();

 for(;iterThri!

=prob.end();iterThri++)

 { 

  doubleMap:

:

iteratoriterDouble=iterThri->second.begin();

  for(;iterDouble!

=iterThri->second.end();iterDouble++)

  {

   strMap:

:

iteratoriterSingle=iterDouble->second.begin();

   for(;iterSingle!

=iterDouble->second.end();iterSingle++)

   {

    cout<first<<""<first<<""<first<<""<second<

   }

  }

 }

}

//getallpossiblestatistics

//threedimensionshashprob,firstkeynotesaimattributevalue,secondkeynotesrefenceattributename,

//thirdkeynotesreferenceattributevalue,thevaluenotestherefenceattributevaluenumber

voidgetConditionStat(strDVectdatas,thriMap&prob,aimMap&aimNum)

{

 inti,j,k,m,n;

 m=datas.size();

 n=datas[0].size();

   

   doubleMapdoubleMapIns;

 strMapstrMapIns;

 thriMap:

:

iteratoriterThri;

 doubleMap:

:

iteratoriterDouble;

 for(i=1;i

 {

  //saveallpossiblestatistics

  for(j=0;j

  {

   switch(existRecord(prob,datas[i][n-1],datas[0][j],datas[i][j]))

   {

   case1:

    //mustclear

    strMapIns.clear();

    doubleMapIns.clear();

    strMapIns.insert(make_pair(datas[i][j],1));

    doubleMapIns.insert(make_pair(datas[0][j],strMapIns));

    prob.insert(make_pair(datas[i][n-1],doubleMapIns));

    break;

   case2:

    strMapIns.clear();

    strMapIns.insert(make_pair(datas[i][j],1));

    prob.find(datas[i][n-1])->second.insert(make_pair(datas[0][j],strMapIns));

    break;

   case3:

    prob.find(datas[i][n-1])->second.find(datas[0][j])->second.insert(make_pair(datas[i][j],1));

    break;

   case4:

    prob.find(datas[i][n-1])->second.find(datas[0][j])->second.find(datas[i][j])->second++;

    break;

   }

  }

  //savethekindofaimattributevalue

  if(aimNum.find(datas[i][n-1])!

=aimNum.end())

  {

   aimNum.find(datas[i][n-1])->second++;

  }

  else

  {

   aimNum.insert(make_pair(datas[i][n-1],1));

  }

 }

}

voidgetConditionProb(thriMap&prob,aimMapaimNum,attMapattKind)

{

 //saveallpossibleconditionprobabilitys

 thriMap:

:

iteratoriterThri=prob.begin();

 for(;iterThri!

=prob.end();iterThri++)

 { 

  doubleMap:

:

iteratoriterDouble=iterThri->second.begin();

  for(;iterDouble!

=iterThri->second.end();iterDouble++)

  {

   strMap:

:

iteratoriterSingle=iterDouble->second.begin();

   for(;iterSingle!

=iterDouble->second.end();iterSingle++)

   {

    //addconstK,Lto denominatorandnumerator

    //thepartof"attKind.find(iterDouble->first)->second*K"addtheweightofkindofrefenceattribute。

    iterSingle->second=(iterSingle->second +K)/(attKind.find(iterDouble->first)->second*K+aimNum.find(iterThri->first)->second);

   }

  }

 }

}

voidgetClassification(strDVectdatas,thriMapprob,aimMapaimNum,attMapattKind,sampleVectsampleIns,intrecords)

{

 

 //savealltheprobability

 doublesum=0;

 doublemax=0;

 doublepp;

 stringclassKind;

 //获得极大后验假设

 doubleh_map;

 aimMap:

:

const_iteratoriterAim=aimNum.begin();

 for(;iterAim!

=aimNum.end();iterAim++)

 {

  //getpriorprobability

  //thepartof"((--attKind.end())->second*K"addtheweightofthekindofaimattribute。

  pp=(double)(iterAim->second+K)/((--attKind.end())->second*K+records);

  //获得极大使然假设

  doubleh_ml=1;

  for(inti=0;i

  {

   if(existRecord(prob,iterAim->first,datas[0][i],sampleIns.at(i))!

=4)

   {

    cout<<"thereisnovalueofattrubute"<

    h_ml*=K;

   }

   else

   {

    h_ml*=prob.find(iterAim->first)->second.find(datas[0][i])->second.find(sampleIns.at(i))->second;

   }

  }

  h_map=pp*h_ml;

  if(h_map>max)

  {

   max=h_map;

   classKind=iterAim->first;

  }

  sum+=h_map;

 }

 //normalize

 max=max/sum;

 cout<<"thethemostclassis"<

 

}

int_tmain(intargc,_TCHAR*argv[])

{

 inti,j,m,n;

 //m:

numberoftrainingdata,n:

numberofattributes

 m=15;n=5;

 strDVectdatas(m);

 for(i=0;i

 {

  datas[i].resize(n);

 }

 //firstrowsaveattributes

 datas[0][0]="age";

 datas[0][1]="inco";

 datas[0][2]="student";

 datas[0][3]="credit_rating";

 datas[0][4]="class:

buys_computer";

   

   datas[1][0]="<=30";

 datas[1][1]="high";

 datas[1][2]="no";

 datas[1][3]="fair";

 datas[1][4]="no";

 datas[2][0]="<=30";

 datas[2][1]="high";

 datas[2][2]="no";

 datas[2][3]="excellent";

 datas[2][4]="no";

 datas[3][0]="31..40";

 datas[3][1]="high";

 datas[3][2]="no";

 datas[3][3]="fair";

 datas[3][4]="yes";

 datas[4][0]=">40";

 datas[4][1]="medi";

 datas[4][2]="no";

 datas[4][3]="fair";

 datas[4][4]="yes";

 datas[5][0]=">40";

 datas[5][1]="low";

 datas[5][2]="yes";

 datas[5][3]="fair";

 datas[5][4]="yes";

 datas[6][0]=">40";

 datas[6][1]="low";

 datas[6][2]="yes";

 datas[6][3]="excellent";

 datas[6][4]="no";

 datas[7][0]="31..40";

 datas[7][1]="low";

 datas[7][2]="yes";

 datas[7][3]="excellent";

 datas[7][4]="yes";

 datas[8][0]="<=30";

 datas[8][1]="medi";

 datas[8][2]="no";

 datas[8][3]="fair";

 datas[8][4]="no";

 datas[9][0]="<=30";

 datas[9][1]="low";

 datas[9][2]="yes";

 datas[9][3]="fair";

 datas[9][4]="yes";

 datas[10][0]=">40";

 datas[10][1]="medi";

 datas[10][2]="yes";

 datas[10][3]="fair";

 datas[10][4]="yes";

 datas[11][0]="<=30";

 datas[11][1]="medi";

 datas[11][2]="yes";

 datas[11][3]="excellent";

 datas[11][4]="yes";

 datas[12][0]="31..40";

 datas[12][1]="medi";

 datas[12][2]="no";

 datas[12][3]="excellent";

 datas[12][4]="yes";

 datas[13][0]="31..40";

 datas[13][1]="high";

 datas[13][2]="yes";

 datas[13][3]="fair";

 datas[13][4]="yes";

 datas[14][0]=">40";

 datas[14][1]="medi";

 datas[14][2]="no";

 datas[14][3]="excellent";

 datas[14][4]="no";

 for(i=0;i

 {

  for(j=0;j

  {

   cout.width(15);

   cout<

:

left)<

  }

  cout<

 }

   thriMapprob;

 aimMapaimNum;

 attMapattKind;

 attKind.insert(make_pair("age",3));

 attKind.insert(make_pair("inco",3));

 attKind.insert(make_pair("student",2));

 attKind.insert(make_pair("credit_rating",2));

 attKind.insert(make_pair("class:

buys_computer",2));

   getConditionStat(datas,prob,aimNum);

 //initK

 K=(double)1/(m-1);

 getConditionProb(prob,aimNum,attKind);

 show(prob);

   sampleVectsampleIns;

 sampleIns.push_back("31..40");

   sampleIns.push_back("high");

 sampleIns.push_back("no");

 sampleIns.push_back("fair");

 getClassification(datas,prob,aimNum,attKind,sampleIns,m-1);

 return0;

}

 

 

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

当前位置:首页 > IT计算机 > 计算机硬件及网络

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

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