<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. web开发 - 从零开始 - 01 - 常见样式

    1.width  &  height 2.background : a.background-color b.background-image:url() c.background-repea ...

  2. Sql Server数据库--》事务

    事务:更多的是一种处理机制(同生共死) 事务是对增删改而言的(因为她们会改变数据) 事务是对多条语句而言,多个sql语句组成,整体执行 事务的4个特点叫做ACID:分别为: 1,A:原子性->事 ...

  3. AngularJS学习资源

    图灵社区 : 图书 : AngularJS入门教程 http://www.ituring.com.cn/book/1206 AngularJS 教程 | 菜鸟教程 http://www.runoob. ...

  4. GCD 的初步认识

    1.什么是 GCD? GCD为Grand Central Dispatch的缩写 (GCD)是Apple开发的一个多核编程的较新的解决方法.它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统 ...

  5. MySql Error 2006

    导入长字段时出现2006错误 在my.ini最后添加 max_allowed_packet = 10M 问题解决. max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度.

  6. 如何获取fragment里的控件

    不能在onCreate函数中获取控件,以为fragment还没有start,你可以在onStart函数中获取: @Overrideprotected void onStart() { super.on ...

  7. UIKit之浅析UIButton

    UIButton * button =[[UIButton alloc]init]; button.backgroundColor=[UIColor redColor]; [button setTit ...

  8. 求一个int型整数的两种递减数之和(华为2015笔试题及答案)

    给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数:2.递减数中各位数之和最大的数)之和. 递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同 ...

  9. 坑爹JDK8,可怜的XP

    如题: 看看这个: http://stackoverflow.com/questions/20965564/installing-jdk8-on-windows-xp-advapi32-dll-err ...

  10. 使用MIDAS访问远程Access数据库

    使用MIDAS访问远程Access数据库         Allen Tao(http://blog.csdn.net/allentao/) 2005-5-3 本文源码下载 访问远程数据库常用的办法是 ...