朴素贝叶斯
2021/11/6 23:45:18
本文主要是介绍朴素贝叶斯,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include <iostream> #include <fstream> #include <string> #include <vector> #include <map> using namespace std; vector<string>split(const string& src,const string& delimiter); void rejudge(); vector<vector<string> >vect; map<string,int>category; map<string,double>pro_map; int main() { string strLine; ifstream readfile("data.txt"); if(!readfile) { cout<<"Fail to open file data!"<<endl; cout<<getchar(); return 0; } else { cout<<"读取原数据如下:"<<endl; vector<vector<string> >::size_type st_x; vector<string>::size_type st_y; vector<string>temp_vect; while(getline(readfile,strLine)) { cout<<strLine<<endl; temp_vect=split(strLine,","); vect.push_back(temp_vect); temp_vect.clear(); } string temp_string; vector<string>::size_type temp_size1=vect.size()-1; vector<string>::size_type temp_size2=vect[0].size(); for(st_x=1; st_x<temp_size1+1; st_x++) { for(st_y=0; st_y<temp_size2; st_y++) { if(st_y!=temp_size2-1) { temp_string=vect[0][st_y]+"="+vect[st_x][st_y]+"|"+vect[0][temp_size2-1]+"="+vect[st_x][temp_size2-1]; pro_map[temp_string]++; } else { temp_string=vect[0][temp_size2-1]+"="+vect[st_x][temp_size2-1]; pro_map[temp_string]++; category[vect[st_x][temp_size2-1]]=1; } temp_string.erase(); } } string::size_type st; cout<<"统计过程如下:"<<endl; for(map<string,double>::iterator it=pro_map.begin(); it!=pro_map.end(); it++) { cout<<it->first<<":"<<it->second<<endl; if((st=it->first.find("|"))!=string::npos) { it->second=it->second/pro_map[it->first.substr(st+1)]; } } cout<<"计算概率过程如下:"<<endl; for(map<string,double>::iterator it2=pro_map.begin(); it2!=pro_map.end(); it2++) { if((st=it2->first.find("|"))!=string::npos) { pro_map[it2->first]=pro_map[it2->first]/(double)temp_size1; } cout<<it2->first<<":"<<it2->second<<endl; } rejudge(); } cout<<getchar(); return 0; } vector<string>split(const string& src,const string& delimiter) { string::size_type st; if(src.empty()) { throw "Empty string!"; } if(delimiter.empty()) { throw "Empty delimiter!"; } vector<string>vect; string::size_type last_st=0; while((st=src.find_first_of(delimiter,last_st))!=string::npos) { if(st!=last_st) { vect.push_back(src.substr(last_st,st-last_st)); } last_st=st+1; } if(last_st!=src.size()) { vect.push_back(src.substr(last_st,string::npos)); } return vect; } void rejudge() { string temp_string; double temp_pro; map<string,double>temp_map; cout<<"经过朴素贝叶斯算法重新分类的结果如下:"<<endl; for(vector<vector<string> >::size_type st_x=1; st_x<vect.size(); st_x++) { for(map<string,int>::iterator it=category.begin(); it!=category.end(); it++) { temp_pro=1.0; temp_string=vect[0][vect[0].size()-1]+"="+it->first; temp_pro*=pro_map[temp_string]; temp_string.erase(); for(vector<string>::size_type st_y=0; st_y<vect[st_x].size(); st_y++) { if(it==category.begin()&&st_y!=vect[st_x].size()-1) { cout<<vect[st_x][st_y]<<" "; } if(st_y!=vect[st_x].size()-1) { temp_string=vect[0][st_y]+"="+vect[st_x][st_y]+"|"+vect[0][vect[0].size()-1]+"="+it->first; temp_pro*=pro_map[temp_string]; temp_string.erase(); } } temp_map[it->first]=temp_pro; } string temp_string2; temp_pro=0; cout<<"后验概率:"; for(map<string,double>::iterator it2=temp_map.begin(); it2!=temp_map.end(); it2++) { cout<<it2->first<<":"<<it2->second<<" "; if(it2->second>temp_pro) { temp_string2.erase(); temp_string2=it2->first; temp_pro=it2->second; } } cout<<"归类:"<<vect[0][vect[0].size()-1]<<"="<<temp_string2<<endl; } }
这篇关于朴素贝叶斯的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南