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] ; 在使用时.存 ...
随机推荐
- struts2 模型驱动的action赋值优先顺序
struts2 模型驱动的action赋值优先顺序: 1.优先设置model的属性. 2.如果model属性中没有对应的成员变量,则向上冒泡,寻找action中的属性进行set. 如果action中的 ...
- 关于智能指针auto_ptr
智能指针auto_ptr和shared_ptr也是面试中经常被问到的一个 感觉看auto_ptr的源码反而更加容易理解一些,因为源码的代码量并不大,而且比较容易理解. 本篇主要介绍auto_ptr 其 ...
- poj1487
题目大意: 给一棵递归树,看链接图片,从根节点开始对于每个节点往它的子节点移动,直到叶子节点停止.每个节点选哪一个孩子节点继续往下走是随机的(等概率).然后叶子节点都会标记一个数值,记为走到该节点的得 ...
- JavaWeb核心编程之使用Eclipse开发JavaWEB项目
文章目录 1.eclipse切换到javaee项目 2.创建服务器(如果没有server选项, 怎么做) 3.定制新建面板内容 4.创建动态web工程 1.eclipse切换到javaee项目 如图 ...
- 如何将js与HTML完全脱离
先举出一个例子: var sound='Roar!'; function myOrneryBeast(){ alert(this); this.style.color='green';//this指代 ...
- python相似模块用例(一)
一:threading VS Thread 众所周知,python是支持多线程的,而且是native的线程,其中threading是对Thread模块做了包装,可以更加方面的被使用,threading ...
- hacker入门篇——相关书籍
1.<黑客大曝光:网络安全机密与解决方案(第7版)> 简介:这是一本老外写的书,比较适合入门看,内容包括一些基本的攻防流程,基本工具软件,网络安全的一些基本概念等,对整个网络安全和黑客入侵 ...
- 3000本IT书籍下载地址
http://www.shouce.ren/post/d/id/112300 黑客攻防实战入门与提高.pdfhttp://www.shouce.ren/post/d/id/112299 黑 ...
- HDU 5972 Regular Number(ShiftAnd+读入优化)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5972 [题目大意] 给出一个字符串,找出其中所有的符合特定模式的子串位置,符合特定模式是指,该子串 ...
- 关于微信的jsapi_ticket的获取方法;
对于一个从前端转到后端的开发人员来说,这个玩意儿开始的时候是有点郁闷:不过明白原理之后就简单了, 获取jsapi_ticket:必须先获取access_token; 微信开发文档说access_tok ...