⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genrule.cpp

📁 数据挖掘关联规则 发现数据间的关系 如超市数据
💻 CPP
字号:
 #include "genrule.h"
 using namespace std;
 void cout_vec(vector<int> v)
 {
	 for(int i=0;i<v.size();i++)
		 cout<<v[i]<<" ";
	 cout<<endl;
 }
int read_a_line(ifstream& file,vector<int>& data )
{  
	if( file.eof() ) return 0;
    char          c;
    int      pos;
	int ret=0; 
    data.clear();
    do
    {
       int item = 0;
       pos = 0;
       file.get(c);
	   if(c=='<')  
	   {
           file.get(c);
		   file.get(c);
		   ret=-1;
		   return -1;
	   }
       while(file.good() && (c >= '0') && (c <= '9'))
       {
          item *= 10;
          item += int(c)-int('0');
          file.get(c);
          pos++;
		  ret=1;
       }
       if( pos  ) data.push_back(  item );
    }
    while( !file.eof() && c != '\n' );
    return ret;

}//EOF ret 0 < ret -1 normal ret 1
int include_vec(vector<int>& p,vector<int>& m)
{
	int pos=1;
	for(vector<int>::iterator i=p.begin()+1;i<p.end();i++)
	{		
		if(find(m.begin()+1,m.end(),*i)==m.end())
			pos*=0;
	}
	return pos;
}
void genrule(double c)
{
	ifstream infile("temp.dat");
	int num_of_record=0;
	int level=0;
	vector< int > t1;
	vector< vector<int>* >* p;
	vector< int >*q;
    vector <vector< vector<int>* >* > data;
	data.clear();
	read_a_line(infile,t1);
	num_of_record=t1[0];
    int ret;
    double cc;
	while(1)
	{
		ret=read_a_line(infile,t1);
		if(ret==-1)//meet a new level 
		{
			++level;
			p=new vector< vector<int>* >;
			data.push_back(p);
		}
		else if(ret==1)//normal
		{
			q=new vector< int >;
			(*q)=t1;
			p->push_back(q);
		}
		else if(ret==0)//meet end of file
		{
			break;
		}		
	}
	for(vector <vector< vector<int>* >* >::iterator i=data.begin();i<data.end();i++)
	{
	for(vector< vector<int>* >::iterator j=(**i).begin();j<(**i).end();j++)
	{	
 	for(vector <vector< vector<int>* >* >::iterator n=i+1;n<data.end();n++)
	{
 	for(vector< vector<int>* >::iterator m=(**n).begin();m<(**n).end();m++)
	{
	 	
		sort((**j).begin()+1,(**j).end());
         	 	
 	 	sort((**m).begin()+1,(**m).end());
 	 
       // if( includes((**j).begin()+1,(**j).end(),(**m).begin()+1,(**m).end()))
		if(include_vec((**j),(**m)))
		{	 
	//	cout<<"(1) ";cout_vec((**j));cout<<"occ "<<(**j)[0]<<"bb:"<<*(**j).begin()<<endl;
     //	cout<<"(2) ";cout_vec((**m));cout<<"occ "<<(**m)[0]<<"bb:"<<*(**m).begin()<<endl;
		cc=(*(**m).begin())/double((*(**j).begin()));
		if ( cc>=c)
		{
		t1.clear();
		t1=(**m);
        //cout_vec(t1);
		t1.erase(t1.begin());
	//	cout<<"before erase:";cout_vec(t1);cout<<endl;cout_vec((**j));
		for(int i=1;i<(**j).size();i++)
		{
			int g=(**j)[i];
			t1.erase(find(t1.begin(),t1.end(),(**j)[i]));
		}
	//	cout<<"after erase:";	cout_vec(t1);		cout<<endl;
		for(vector<int>::iterator n=t1.begin();n<t1.end();n++)
		cout<<*n<<" ";
		cout<<" <- ";
		for(n=(**j).begin()+1;n<(**j).end();n++)
		cout<<*n<<" ";
		cout<<setprecision(2)<<fixed<<"support:"<<double((*(**j).begin())*100)/num_of_record<<"%,confidence:"<<double(cc)*100<<"%\n";							
		}
	}
	}
	}
	}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -