数据挖掘 关联规则算法
//关联规则算法#include "stdio.h"#include "string.h"#define AFFAIRS_NUMBER 9 //事务数#define COMMODITY_NUMBER 5//商品数 商品 a b c d e#define ITEMSETS_NUMBER10//项集数typedef struct{int number;//事务中的商品
·
//关联规则算法
#include "stdio.h"
#include "string.h"
#define AFFAIRS_NUMBER 9 //事务数
#define COMMODITY_NUMBER 5//商品数 商品 a b c d e
#define ITEMSETS_NUMBER 10//项集数
typedef struct
{
int number;//事务中的商品数
char commodity[COMMODITY_NUMBER];
}AFFAIRS,PAFFAIRS[AFFAIRS_NUMBER];
typedef struct
{
AFFAIRS affairs; //
int support;//支持度
}ITEMSETS,PITEMSETS[ITEMSETS_NUMBER];
int item_number;
void Init_Affairs(PAFFAIRS &pa)
{
pa[0].number=3;
pa[0].commodity[0]='a';
pa[0].commodity[1]='b';
pa[0].commodity[2]='e';
pa[1].number=2;
pa[1].commodity[0]='b';
pa[1].commodity[1]='d';
pa[2].number=2;
pa[2].commodity[0]='b';
pa[2].commodity[1]='c';
pa[3].number=3;
pa[3].commodity[0]='a';
pa[3].commodity[1]='b';
pa[3].commodity[2]='d';
pa[4].number=2;
pa[4].commodity[0]='a';
pa[4].commodity[1]='c';
pa[5].number=2;
pa[5].commodity[0]='b';
pa[5].commodity[1]='c';
pa[6].number=2;
pa[6].commodity[0]='a';
pa[6].commodity[1]='c';
pa[7].number=4;
pa[7].commodity[0]='a';
pa[7].commodity[1]='b';
pa[7].commodity[2]='c';
pa[7].commodity[3]='e';
pa[8].number=3;
pa[8].commodity[0]='a';
pa[8].commodity[1]='b';
pa[8].commodity[2]='c';
for(int i=0;i<AFFAIRS_NUMBER;i++)
{
pa[i].commodity[pa[i].number]='\0';
}
}
void Init_Itemsets(PITEMSETS &pi)
{
item_number = 2;
pi[0].affairs.commodity[0]='a';
pi[0].affairs.commodity[1]='b';
pi[0].affairs.commodity[2]='c';
pi[0].support=2;
pi[1].affairs.commodity[0]='a';
pi[1].affairs.commodity[1]='b';
pi[1].affairs.commodity[2]='e';
pi[1].support=2;
}
bool find_char(char *a,char b)
{
int alen = strlen(a);
for(int i=0;i<alen;i++)
{
if(a[i]==b)
return true;
}
return false;
}
bool find_string(char *a,char *b)//a字符串中是否存在b字符串中的所有字符
{
int blen =strlen(b);
int alen= strlen(a);
int count=0;
for(int i=0;i<blen;i++)
{
if(find_char(a,b[i]))
count++;
}
if(count==blen)
return true;
else
return false;
}
void show_affairs(PAFFAIRS pa)//显示所有事务
{
for(int j=0;j<9;j++)
{
pa[j].commodity[pa[j].number]='\0';
printf(" 事务%d:%s\n",j+1,pa[j].commodity);
}
}
void show_items(PITEMSETS &pi)//显示所有项集
{
for(int i=0;i<item_number;i++)
{
printf(" 频繁项集:%s:",pi[i].affairs.commodity);
printf(" 支持度%d\n",pi[i].support);
}
}
char * string_string(char *a,char *b)//得到两个字符串的所有部分
{
char c[20]="\0";
int alen = strlen(a);
int blen = strlen(b);
strcpy(c,a);
for(int i=0;i<blen;i++)
{
if(find_char(a,b[i]));
else
c[alen++]=b[i];
}
return c;
}
int subset_number=0;
void Get_Subset(ITEMSETS &it,char (*a)[10])
{
int i=0;
int len = strlen(it.affairs.commodity);
//printf("len=%d\n",len);
char c_a[5][10]={"\0","\0","\0","\0","\0"};
for(i=0;i<len;i++)
{
// c_a[i][0]=it.affairs.commodity[i];
// c_a[i][1]='\0';
a[i][0]=it.affairs.commodity[i];
a[i][1]='\0';
// printf("%s\n",a[i]);
}
char c_b[5][10]={"\0","\0","\0","\0","\0"};
for(int j=0;j<len;j++)
{
for(int k=j+1;k<len;k++)
{
//strcat(c_b[i],c_a[j]);
// strcat(c_b[i],c_a[k]);
strcat(a[i],a[j]);
strcat(a[i],a[k]);
//printf("%s\n",a[i]);
i++;
}
}
subset_number=i;
}
void Get_Subset_times(PAFFAIRS &pa,char (*a)[10],double *b)
{
printf(" 子集出现次数:\n");
for(int i=0;i<subset_number;i++)
{
for(int j=0;j<AFFAIRS_NUMBER;j++)
{
if(find_string(pa[j].commodity,a[i]))
b[i]++;
}
printf(" %s=%.0f\n",a[i],b[i]);
}
}
void Cal_Confidence(PAFFAIRS &pa,PITEMSETS &pi)
{
for(int i=0;i<item_number;i++)
{
printf("\n\n 频繁项目集%s:\n",pi[i].affairs.commodity);
char a[10][10]={"\0","\0","\0","\0","\0","\0","\0","\0","\0","\0"};//用来保存所有子集
double b[10]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};//用来保存所有子集在事务数据库中出现的次数
Get_Subset(pi[i],a);
Get_Subset_times(pa,a,b);
printf(" 关联规则和置信度为下:\n");
for(int j=0;j<3;j++)
{
for(int k=3;k<subset_number;k++)
{
if(find_string(a[k],a[j]));
else
{
printf(" %s=>%s,confidence=%.0f%\n",a[j],a[k],(2.0/b[j]*100));
printf(" %s=>%s,confidence=%.0f%\n",a[k],a[j],(2.0/b[k]*100));
}
}
}
}
}
void main()
{
PAFFAIRS pa;
PITEMSETS pi;
Init_Affairs(pa);
printf("\n\n关联规则算法\n 事务数据库:\n");
show_affairs(pa);
Init_Itemsets(pi);//直接初始apriori算法得到的频繁项集
printf(" 3频繁项集:\n");
show_items(pi);
Cal_Confidence(pa,pi);
}
更多推荐


所有评论(0)