• 大小: 8KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-26
  • 语言: C/C++
  • 标签:

资源简介

机器学习,朴素贝叶斯算法分类,c++实现

资源截图

代码片段和文件信息

// naiveBayesClassify.cpp : 定义控制台应用程序的入口点。
//

//#include “stdafx.h“
#include
#include
#include
#include
#include
#include 
//#include

using namespace std;

 

//save the training data
typedef vector> strDVect;
//save all possible condition probabilitys
typedef map>> thriMap;
//service for thriMap
typedef map> doubleMap;
typedef map strMap;
//save the kind of aim attribute value
typedef map aimMap;
//kind of every attribute including aim attribute value
typedef map attMap;
//const for denominator and numerator
double K = 1;
//sample
typedef vector sampleVect;


//check the three dimensions map and return 4 states
int existRecord(thriMap probstring aimValuestring attNamestring attValue)
{
 thriMap::const_iterator iterThri =  prob.find(aimValue);
 if(iterThri == prob.end())
  return 1;
 doubleMap::const_iterator iterDouble = iterThri->second.find(attName);
 if(iterDouble == iterThri->second.end())
  return 2;
 strMap::const_iterator iterSingle = iterDouble->second.find(attValue);
 if(iterSingle == iterDouble->second.end())
  return 3;
 return 4; 
}

void show(thriMap prob)
{
 thriMap::iterator iterThri = prob.begin();
 for(;iterThri != prob.end(); iterThri++)
 { 
  doubleMap::iterator iterDouble = iterThri->second.begin();
  for(;iterDouble != iterThri->second.end(); iterDouble++)
  {
   strMap::iterator iterSingle = iterDouble->second.begin();
   for(;iterSingle != iterDouble->second.end(); iterSingle++)
   {
    cout << iterThri->first << “ “ << iterDouble->first << “ “ << iterSingle->first << “ “ << iterSingle->second << endl;
   }
  }
 }
}

//get all possible statistics
//three dimensions hash prob first key notes aim attribute valuesecond key notes refence attribute name
//third key notes reference attribute value the value notes the refence attribute value number
void getConditionStat(strDVect datasthriMap &probaimMap &aimNum)
{
 int ijkmn;
 m = datas.size();
 n = datas[0].size();
   
    doubleMap doubleMapIns;
 strMap strMapIns;
 thriMap::iterator iterThri;
 doubleMap::iterator iterDouble;
 for(i=1; i < m; i++)
 {
  //save all possible statistics
  for(j = 0; j < n-1; j++)
  {
   switch(existRecord(probdatas[i][n-1]datas[0][j]datas[i][j]))
   {
   case 1:
    //must clear
    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;
   case 2:
    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;
   case 3:
    prob.find(datas[i][n-1])->second.find(datas[0][j])->second.insert(make_pair

评论

共有 条评论