<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<?php
/*
*Apriori算法(关联规则算法的实现)
*/ /*
*项目集X支持G个数小于等于1去除
*/
//--------------------------------------------------------------------
function first($train)
{
$new_array = $train;
$array_count = array(NULL);
array_splice($array_count,0,1);
for($i=1;$i<count($train[0]);$i++)
{
$count = 0;
for($j=1;$j<count($train);$j++)
{
if($train[$j][$i]==1)
{
$count++;
}
} if($count==1){//非频繁项目集
array_push($array_count,$i);
}
} for($i=count($array_count)-1;$i>=0;$i--)
{
for($j=0;$j<count($train);$j++)
{
array_splice($new_array[$j],$array_count[$i],1);
} } return $new_array;
}
//-------------------------------------------------------------------- /*
*总事务D中包含事务X的数量
*/
//--------------------------------------------------------------------
function search($train,$array)
{
$array_num = array();
array_splice($array_num,0,1);
for($i=0;$i<count($array);$i++)
{
for($j=1;$j<count($train[0]);$j++)
{ if($train[0][$j]==$array[$i])
{
array_push($array_num,$j);
break;
}
}
}
$count = 0;//用于统计满足数据项集X的事务个数
for($i=1;$i<count($train);$i++)
{
$flags = true;
for($j=0;$j<count($array_num);$j++)
{
if($train[$i][$array_num[$j]]==0)
{
$flags = false;
break;
}
}
if($flags)$count++; }
return $count;
}
//-------------------------------------------------------------------- /*
*合并两数组,除去其中相同的元素
*/
//--------------------------------------------------------------------
function merge($arrayA,$arrayB)
{
$array = array(NULL);
array_splice($array,0,1); //将两数组中的元素合并
for($i=0;$i<count($arrayA)+count($arrayB);$i++)
{
if($i<count($arrayA))
{
array_push($array,$arrayA[$i]);
}
else {
array_push($array,$arrayB[$i-count($arrayA)]);
}
} $array = array_unique($array);//删除两数组中重复的元素 //对新的数组下标重新进行排序
foreach($array as $value)
{
$newarray[]=$value;
}
return $newarray;
}
//-------------------------------------------------------------------- /*
*判断两个一维数组是否相等(不考虑键的位置,也不考虑数组中有重复的元素)
*/
//--------------------------------------------------------------------
function judgeequal($arrayA,$arrayB)
{ if(count($arrayA)!=count($arrayB))
{
$flags = false;
}else{
$flags2 = true;
for($i=0;$i<count($arrayA);$i++)
{
if(!in_array($arrayA[$i],$arrayB,true))
{
$flags2 = false;
break;
}
}
if($flags2)
{
$flags = true;
}else {
$flags = false;
}
}
return $flags;
}
//-------------------------------------------------------------------- /*
*求支持度和置信度
*/
//--------------------------------------------------------------------
function support_confidence($arrayA,$arrayB,$train,&$support,&$confidence)
{
$newarray = merge($arrayA,$arrayB);
$countxy = search($train,$newarray);
$support = $countxy / (count($train)-1);//项集X的支持度
$countx = search($train,$arrayA);
$confidence = $countxy / $countx;
return 0; }
//-------------------------------------------------------------------- /*
*Apriori算法
*/
//--------------------------------------------------------------------
function Apriori($train,$sup,$con)
{
$aprioriAll = array();//存储所有的关联
array_splice($aprioriAll,0,1);
$apriori = array();
array_splice($apriori,0,1);
$train = first($train);
for($i=1;$i<count($train[0])-1;$i++)
{
$arrayA[0] =$train[0][$i];
for($j=$i+1;$j<count($train[0]);$j++)
{
$arrayB[0] =$train[0][$j];
support_confidence($arrayA,$arrayB,$train,$support,$confidence);
if(($support>=$sup)&&($confidence>=$con))
{
$Meg = merge($arrayA,$arrayB);
array_push($apriori,$Meg);
}
}
}
array_push($aprioriAll,$apriori);
while(count($apriori)>1)
{
$array = array();
array_splice($array,0,1);
for($i=0;$i<count($apriori)-1;$i++)
{
for($j=$i+1;$j<count($apriori);$j++)
{
$arrayB = merge($apriori[$i],$apriori[$j]);
support_confidence($apriori[$i],$arrayB,$train,$support,$confidence);
if(($support>=$sup)&&($confidence>=$con))
{
/* echo "<pre>";
print_r($arrayA);
echo "<pre>";
print_r($arrayB);
*/
array_push($array,$arrayB);
} }
}
$apriori = $array;
for($i=0;$i<count($apriori)-1;$i++)
{
for($j=count($apriori)-1;$j>=$i+1;$j--)
{
if(judgeequal($apriori[$i],$apriori[$j]))
{
array_splice($apriori,$j,1);
}
}
}
foreach($apriori as $value)
{
$newarray[]=$value;
}
$apriori = $newarray;
array_push($aprioriAll,$apriori);
}
return $aprioriAll;
}
//-------------------------------------------------------------------- /*
*把.txt中的内容读到数组中保存
*$filename:文件名称
*/
//--------------------------------------------------------------------
function getFileContent($filename)
{
$array = array(null);
$content = file_get_contents($filename);
$result = explode("\r\n",$content);
//print_r(count($result));
for($j=0;$j<count($result);$j++)
{
//print_r($result[$j]."<br>");
$con = explode(" ",$result[$j]);
array_push($array,$con);
}
array_splice($array,0,1);
return $array;
}
//-------------------------------------------------------------------- /*
*把数组中内容写到.txt中保存
*$result:要存储的数组内容
*$filename:文件名称
*/
//--------------------------------------------------------------------
function Array_Totxt($result,$filename)
{
$fp= fopen($filename,'wb');
for($i=0;$i<count($result);$i++)
{ for($j=0;$j<count($result[$i]);$j++)
{ $temp = NULL;
for($k=0;$k<count($result[$i][$j]);$k++){
$temp = $result[$i][$j][$k]."\t";
fwrite($fp,$temp);
}
fwrite($fp,"\r\n");
} }
fclose($fp);
}
//--------------------------------------------------------------------
$train = getFileContent("train.txt");
// $train = getFileContent("er.txt");
$apriori = Apriori($train,0.5,0.6);
echo "<pre>";
print_r($apriori);
Array_Totxt($apriori,"result.txt")
// Array_Totxt($apriori,"erresult.txt")
?>

Aprori算法[关联规则算法]的更多相关文章

  1. 关联规则算法Apriori的学习与实现

    转自关联规则算法Apriori的学习与实现 首先我们来看,什么是规则?规则形如"如果-那么-(If-Then-)",前者为条件,后者为结果.关联规则挖掘用于寻找给定数据集中项之间的 ...

  2. HotSpot关联规则算法(2)-- 挖掘连续型和离散型数据

    本篇代码可在 http://download.csdn.net/detail/fansy1990/8502323下载. 前篇<HotSpot关联规则算法(1)-- 挖掘离散型数据>分析了离 ...

  3. Fp关联规则算法计算置信度及MapReduce实现思路

    说明:參考Mahout FP算法相关相关源代码. 算法project能够在FP关联规则计算置信度下载:(仅仅是单机版的实现,并没有MapReduce的代码) 使用FP关联规则算法计算置信度基于以下的思 ...

  4. Python机器学习算法 — 关联规则(Apriori、FP-growth)

    关联规则 -- 简介 关联规则挖掘是一种基于规则的机器学习算法,该算法可以在大数据库中发现感兴趣的关系.它的目的是利用一些度量指标来分辨数据库中存在的强规则.也即是说关联规则挖掘是用于知识发现,而非预 ...

  5. GMM算法k-means算法的比较

    1.EM算法 GMM算法是EM算法族的一个具体例子. EM算法解决的问题是:要对数据进行聚类,假定数据服从杂合的几个概率分布,分布的具体参数未知,涉及到的随机变量有两组,其中一组可观测另一组不可观测. ...

  6. 简单易学的机器学习算法——EM算法

    简单易学的机器学习算法——EM算法 一.机器学习中的参数估计问题 在前面的博文中,如“简单易学的机器学习算法——Logistic回归”中,采用了极大似然函数对其模型中的参数进行估计,简单来讲即对于一系 ...

  7. 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)

    一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine- ...

  8. 重新想象 Windows 8 Store Apps (31) - 加密解密: 哈希算法, 对称算法

    原文:重新想象 Windows 8 Store Apps (31) - 加密解密: 哈希算法, 对称算法 [源码下载] 重新想象 Windows 8 Store Apps (31) - 加密解密: 哈 ...

  9. Hash散列算法 Time33算法

    hash在开发由频繁使用.今天time33也许最流行的哈希算法. 算法: 对字符串的每一个字符,迭代的乘以33 原型: hash(i) = hash(i-1)*33 + str[i] ; 在使用时.存 ...

随机推荐

  1. dropDownList之"请选择",同时设置默认选项

    dropDownList.Items.Insert(0, new ListItem("--请选择--", "-1"));dropDownList.Selecte ...

  2. 第八章: IO库

    一.IO类 1.iostream定义了读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型 2.不能拷贝IO对象,因此不能将形参或返回类型设置为 ...

  3. MIT6.828 虚拟地址转化为物理地址——二级分页

    这个分页,主要是在mit6.828的lab2的背景下来说的. Mit6.828 Lab2:http://pdos.csail.mit.edu/6.828/2014/labs/lab2/ lab2主要讲 ...

  4. Linux学习awk命令

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  5. Linux学习之域名解析命令

    (1) /etc/hosts :记录hostname对应的ip地址 /etc/resolv.conf :设置DNS服务器的ip地址 /etc/host.conf :指定域名解析的顺序(是从本地的hos ...

  6. js操作cookie,js判断浏览器属性,

    在默认情况下,只有设置cookie的网页才能读取该cookie.如果想让一个页面读取另一个页面设置的cookie,必须设置cookie的路径. http://www.jb51.net/article/ ...

  7. src 和 href 的区别

    因为理解不深,到写外部加载Javascript文件或者css文件的时候总是需要去找个例子,这样可不好.现在总结下 href 属性规定被链接文档的位置(URL). href是hyperrefresh的缩 ...

  8. silverlight依赖属性

    依赖属性(Dependency Property)和附加属性(Attached Property) 参考 http://www.cnblogs.com/KevinYang/archive/2010/0 ...

  9. 黑马程序员-- C语言交换两个整数变量值几种函数比较

    总结了C语言中几种交换两个整数数值的函数,欢迎交流 #include <stdio.h> 使用多种交换变量值的函数比较 方法一:使用第三方临时变量 这种函数a,b只是值传递,实质上不能修交 ...

  10. American tour(If you have a chance)

    去美国旅游,或出国旅游,英语不精没关系,词汇量不多也没关系,但有一些实用的口语一定要学会哟~ 酒店住宿常用英文 I would like to have a morning Call at 8:00 ...