Aprori算法[关联规则算法]
<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算法[关联规则算法]的更多相关文章
- 关联规则算法Apriori的学习与实现
转自关联规则算法Apriori的学习与实现 首先我们来看,什么是规则?规则形如"如果-那么-(If-Then-)",前者为条件,后者为结果.关联规则挖掘用于寻找给定数据集中项之间的 ...
- HotSpot关联规则算法(2)-- 挖掘连续型和离散型数据
本篇代码可在 http://download.csdn.net/detail/fansy1990/8502323下载. 前篇<HotSpot关联规则算法(1)-- 挖掘离散型数据>分析了离 ...
- Fp关联规则算法计算置信度及MapReduce实现思路
说明:參考Mahout FP算法相关相关源代码. 算法project能够在FP关联规则计算置信度下载:(仅仅是单机版的实现,并没有MapReduce的代码) 使用FP关联规则算法计算置信度基于以下的思 ...
- Python机器学习算法 — 关联规则(Apriori、FP-growth)
关联规则 -- 简介 关联规则挖掘是一种基于规则的机器学习算法,该算法可以在大数据库中发现感兴趣的关系.它的目的是利用一些度量指标来分辨数据库中存在的强规则.也即是说关联规则挖掘是用于知识发现,而非预 ...
- GMM算法k-means算法的比较
1.EM算法 GMM算法是EM算法族的一个具体例子. EM算法解决的问题是:要对数据进行聚类,假定数据服从杂合的几个概率分布,分布的具体参数未知,涉及到的随机变量有两组,其中一组可观测另一组不可观测. ...
- 简单易学的机器学习算法——EM算法
简单易学的机器学习算法——EM算法 一.机器学习中的参数估计问题 在前面的博文中,如“简单易学的机器学习算法——Logistic回归”中,采用了极大似然函数对其模型中的参数进行估计,简单来讲即对于一系 ...
- 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)(转)
一,问题描述 在英文单词表中,有一些单词非常相似,它们可以通过只变换一个字符而得到另一个单词.比如:hive-->five:wine-->line:line-->nine:nine- ...
- 重新想象 Windows 8 Store Apps (31) - 加密解密: 哈希算法, 对称算法
原文:重新想象 Windows 8 Store Apps (31) - 加密解密: 哈希算法, 对称算法 [源码下载] 重新想象 Windows 8 Store Apps (31) - 加密解密: 哈 ...
- Hash散列算法 Time33算法
hash在开发由频繁使用.今天time33也许最流行的哈希算法. 算法: 对字符串的每一个字符,迭代的乘以33 原型: hash(i) = hash(i-1)*33 + str[i] ; 在使用时.存 ...
随机推荐
- C# IL 指令集
跳转指令集合 Public field Static Beq 如果两个值相等,则将控制转移到目标指令.Public field Static Beq_S 如果两个值相等 ...
- SQL SERVER2012 无法连接远程服务器
SQL SERVER2012 无法连接远程服务器,报"尝试读取受保护的内存"错误. 解决方法: 运行CMD,输入 netsh winsock reset,回车.重启SSMS,搞定.
- 2014.12.01 B/S之windows8.1下安装IIS
1.打开 控制面板——程序——程序和功能——启用或关闭windows功能 2.找到Internet信息服务 3.等待安装完毕即可 4.控制面板——系统和安全——管理工具——Intern ...
- C# - 动态连接数据库字符串
String conStr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|数据库文件.mdf;Integrated ...
- 网络分析shell脚本(实时流量+连接统计)
介绍一个强大的分析网络的shell脚本,此脚本是从EZHTTP拆分出来的,觉得有必要单独介绍下.脚本运行效果截图: 此脚本包含的功能有: 1.实时监控任意网卡的流量 2.统计10秒内平均流量 3.统计 ...
- c++中basic_istream::getline()的返回值何时为真
今天在看primer,17ch中的IO库再探,做课后练习,要求用ifstream.getline(char*, const unsigned, char)读取一个文件,用循环: while(ifs.g ...
- Android ORM SQL Top 5
If you are developing an Android application, you will likely need to store data somewhere. You may ...
- php中date函数获取当前时间的时区误差解决办法
例:echo date('Y-m-d H:i:s', time()); 输出时间:2008-10-12 02:32:17 但实际时间是:2008-10-12 10:32:17时间误差8个小时 PHP手 ...
- ALOS卫星介绍
ALOS卫星介绍 作者:ALOS 文章来源:ALOS 点击数: 更新时间:2013-6-21 摘要:日本地球观测卫星计划主要包括2个系列:大气和海洋观测系列以及陆地观测系列.先进对地 ...
- POJ1185 炮兵阵地 状态压缩
因为不知道不同的博客怎么转,就把别人的复制过来了,这个题解写的非常好,原地址为: http://hi.baidu.com/wangxustf/item/9138f80ce2292b8903ce1bc7 ...