Aprior算法的实现

本文介绍了Aprior算法的原理和实现过程,包括样本数据的二维数组存储、一元频繁集和多元频繁集的查找,以及关联规则的生成。通过对代码的研究,详细解析了从数据遍历到支持度和置信率计算的步骤。
摘要由CSDN通过智能技术生成

        终于把Aprior的算法过程看懂了,Aprior算法的原理其实很简单,但是当真正写起代码来还是比较麻烦,在百度文库了,下了一个C++版的Aprior算法,用来研究。

       算法思想:1,先对样本数据,用二维数组保存。2,找一元频繁集,先遍历一下样本数组,保存成一列的形式cur[n][],然后再扫描那一列,提取不重复元素保存起来curL1[][],再次遍历样本列,把每个不重复元素的个数记录下来,也就是CountL1[],3找二元频繁集,for循环数组,对每一行分析:对其中元素进行排列组成成2元形式,进行保存cur[n][],提取不重复元素保存起来curL2[][],再次遍历样本列,把每个不重复元素的个数记录下来,也就是CountL2[],3,三元,四元类似分析.....4,关联规则:先是通过支持度删选,对于已经满足条件的三元数据进行分析,对三元数据求其真子集,然后对子集中长度为1,和长度为2的组合求其置信率;5,最后对其进行筛选。

算法源码:(参考别人的代码)

//支持度不小于2,置信度不小于0.8
#include "stdio.h"
#include "iostream.h"
#include "string.h"
//定义全局变量
char curL1[20][2];//实现出现的一维子集
int countL1[10];//找到各一维频繁子集出现的次数。

char curL2[20][3];  //出现的二维子集
int countL2[10];    //各二维频繁子集出现的次数

char curL3[20][4];  //出现的三维子集
int countL3[10];    //各三维频繁子集出现的次数

char cur[50][4];//临时二维数组,用于保存中间产生的变量
//定义int SizeStr(char* m) 得到字符串的长度。实现代码如下:
int SizeStr(char* m)
{
	int i=0;
	while(*(m+i)!=0)
	{
		i++;
	}
	return i;
}
//比较两个字符串,如果相等返回true,否则返回false
bool OpD(char* x,char* y)
{
	int i=0;
	if(SizeStr(x)==SizeStr(y))
	{
		while(*(x+i)==*(y+i))
		{
			i++;
			if(*(x+i)==0 && *(y+i)==0)
				return true;
		}
	}
	return false;
}
//通过void LoadItemL1(char **p) 得到所有1元的字串和各自出现的次数
void LoadItemL1(char **p)//p二维指针保存二维样本数组
{
	int i,j,n=0,k=0;
	char ch;
	char* s;
	int f;
	memset(cur,0,sizeof(cur));
	for(i=0;i<20;i++)
	{
		curL1[i][0]=0;
		curL1[i][1]=0;
	}
	for(j=0;j<10;j++)
		countL1[j]=0;
	//将样本数组中的数值提取出来,保存在cur[n][0]中,相当于把所有样本保存成一列;
	for(i=0;i<10;i++)
	{
		for(j=0;j<4;j++)
		{
			ch=*(*(p+i)+j);
			if(ch==0)
				break;
			cur[n][0]=ch;
			//printf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值