• 关于天气分类的贝叶斯预测


    #include<iostream>
    #include<list>
    #include<cstring>
    #include<string>
    #include<vector>
    #include<map>
    #include<sstream>
    #include<iomanip>
    #include<cmath>
    #include<fstream>
    #include<algorithm>
    #include<set>
    #include<queue>
    using namespace std;
    
    class Bayes
    {
    private:
    	vector<string> attribute;
    	vector<vector<string>>data;
    	double GetPosPrior()
    	{
    		int count=0;
    		for(vector<vector<string>>::iterator iter=data.begin();iter!=data.end();++iter)
    		{
    			if((*iter)[4]=="yes")
    				count++;
    		}
    		return (double)count/data.size();
    	}
    	double GetNegPrior()
    	{
    		int count=0;
    		for(vector<vector<string>>::iterator iter=data.begin();iter!=data.end();++iter)
    		{
    			if((*iter)[4]=="no")
    				count++;
    		}
    		return (double)count/data.size();
    	}
    	// 求条件概率
    	double ConPro(int attr,string value,bool pos)
    	{
    		if(pos)
    		{
    			int count1=0,count2=0;
    			for(vector<vector<string>>::iterator iter=data.begin();iter!=data.end();++iter)
    			{
    				if((*iter)[4]=="yes")
    				{
    					count1++;
    					if((*iter)[attr]==value)
    						count2++;
    				}
    				
    			}
    			return (double)count2/(count1);
    		}
    		else
    		{
    			int count1=0,count2=0;
    			for(vector<vector<string>>::iterator iter=data.begin();iter!=data.end();++iter)
    			{
    				if((*iter)[4]=="no")
    				{
    					count1++;
    					if((*iter)[attr]==value)
    						count2++;
    				}
    				
    			}
    			return (double)count2/(count1);
    		}
    	}
    public:
    	Bayes()
    	{
    		// 从文件中加载数据
    		ifstream in("playData.txt");
    		if(in==NULL)
    		{
    			cout<<"fail to open file!"<<endl;
    			return;
    		}
    		string line,str;
    		getline(in,line);
    		istringstream istring(line);
    		while(!istring.eof())
    		{
    			istring>>str;
    			attribute.push_back(str);
    		}
    		while(!in.eof())
    		{
    			getline(in,line);
    			vector<string> vecStr;
    			istringstream istring(line);
    			while(!istring.eof())
    			{	
    				istring>>str;
    				vecStr.push_back(str);
    			}
    			data.push_back(vecStr);
    		}
    		in.close();
    	}
    	// 传递4个元组的例子
    	string run(string a[])// 返回贝叶斯的预测结果
    	{
    		string result;
    
    		double posPr=this->GetPosPrior();
    		double negPr=this->GetNegPrior();
    		for(int i=0;i<4;i++)
    		{
    			posPr*=ConPro(i,a[i],true);
    			negPr*=ConPro(i,a[i],false);
    		}
    		if(posPr>negPr)
    			result="yes";
    		else
    			result="no";
    
    		return result;
    	}
    	
    };
    	string out[]={"sunny","overcast","rainy"};
    	string temp[]={"hot","mild"};
    	string humidity[]={"high","hot","normal"};
    	string windy[]={"TRUE","FALSE"};
    	string *s[]={out,temp,humidity,windy};
    	void writeAll()
    	{
    
    	}
    int main()
    {
    
    
    
    
    
    	Bayes bay;
    	string ex[4];
    	cin>>ex[0]>>ex[1]>>ex[2]>>ex[3];
    
    
    	cout<<"分类的结果:";
    	cout<<bay.run(ex);
    	system("pause");
    
    	return 0;
    }
    

      

  • 相关阅读:
    【转载】NHibernate的hbm.xml的配置文件大全
    C#读取文本播放相应语音【转】
    Convert.ToInt32、int.Parse(Int32.Parse)、int.TryParse三者之间的区别
    to_date()与24小时制表示法及mm分钟的显示
    DataGridView隔行显示不同的颜色
    Oracle锁表了如何处理
    自1月4号起,不再在博客园更新笔记
    Spring 自定义注解+Aspect切面实现日志记录
    Spring @webFilter注解实现过滤器 省略配置xml
    druid配置随手记
  • 原文地址:https://www.cnblogs.com/dyc0113/p/3247943.html
Copyright © 2020-2023  润新知