Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将apriori php应用于CI_Php_Arrays_Dataset_Associations_Apriori - Fatal编程技术网

将apriori php应用于CI

将apriori php应用于CI,php,arrays,dataset,associations,apriori,Php,Arrays,Dataset,Associations,Apriori,我从www.vtwo.org下载了php上的apriori算法,但我想将其应用于我的CI框架,但不会调用输入值。所以它无法显示结果。我的CI代码更改有问题吗?请帮忙 这是我的apriori控制器(apriori.php) class-Apriori{ 私有$分隔符=','; 私人$minSup=2; 私有$minConf=50; private$rules=array(); private$table=array(); private$allthings=array(); 私有$allsups=

我从www.vtwo.org下载了php上的apriori算法,但我想将其应用于我的CI框架,但不会调用输入值。所以它无法显示结果。我的CI代码更改有问题吗?请帮忙

这是我的apriori控制器(apriori.php)

class-Apriori{
私有$分隔符=',';
私人$minSup=2;
私有$minConf=50;
private$rules=array();
private$table=array();
private$allthings=array();
私有$allsups=array();
private$keys=array();
私有$frequeitmsts=array();
私人$phase=1;
//最大相位>=2
私人$maxPhase=20;
私人$fiTime=0;
私人$arTime=0;
公共函数setDelimiter($char)
{
$this->delimiter=$char;
}
公共功能设置($int)
{
$this->minSup=$int;
}
公共函数setMinConf($int)
{
$this->minConf=$int;
}
公共函数setMaxScan($int)
{
$this->maxPhase=$int;
}
公共函数getDelimiter()
{
返回$this->delimiter;
}
公共函数getMinSup()
{
返回$this->minSup;
}
公共函数getMinConf()
{
返回$this->minConf;
}
公共函数getMaxScan()
{
返回$this->maxPhase;
}
/**
1. جدول آیتمها را می سازد
2. کلید دسترسی به هر آیتم را تولید می کند
3. تمامی آیتمها و تکرار آنها را محاسبه می کند - سطح 1
توجه: حداقل تکرار محاسبه میشود
**/
私有函数makeTable($db)
{ 
$table=array();
$array=array();
$counter=1;
如果(!是_数组($db))
{
$db=文件($db);
}
$num=计数($db);
对于($i=0;$idelimiter,$db[$i]);
$num1=计数($tmp);
$x=数组();
对于($j=0;$jkeys['v->k'][$x]))
{
$this->keys['v->k'][$x]=$counter;
$this->keys['k->v'][$counter]=$x;
$counter++;
} 
如果(!isset($array[$this->keys['v->k'][$x]]))
{
$array[$this->keys['v->k'][$x]]=1;
$this->allsups[$this->keys['v->k'][$x]]=1;
}
其他的
{
$array[$this->keys['v->k'][$x]]++;
$this->allsups[$this->按键['v->k'][$x]]++;
}
$table[$i][$this->keys['v->k'][$x]]=1;
} 
}
$tmp=array();
foreach($array as$item=>$sup)
{ 
如果($sup>=$this->minSup)
{
$tmp[]=数组($item);
}
}
$this->allthings[$this->phase]=$tmp;
$this->table=$table;
}
/**
1.مقدار سوپریموم را با توجه به ورودی شناسه آیتمها شمارش می کند
**/
专用函数扫描($arr,$infradearr='')
{ 
$cr=0;
如果($infradeArr)
{ 
如果(isset($this->allsups[$infradearr]))
{ 
返回$this->allsups[$introdearr];
}
}
其他的
{
排序($arr);
$IMPODEARR=内爆($this->delimiter,$arr);
如果(isset($this->allsups[$infradearr]))
{ 
返回$this->allsups[$introdearr];
}
} 
$num=count($this->table);
$num1=计数($arr);
对于($i=0;$iallsups[$implodeArr]=$cr;
返回$cr;
}
/**
1. ترکیب دو آرایه و حذف مقادیر اضافی
**/
专用功能联合收割机($arr1,$arr2)
{ 
$result=array();
$num=计数($arr1);
$num1=计数($arr2);
对于($i=0;$ikeys['k->v'][$arr[$j]];
}
返回$result;
}
//1-2=>2-3:错误
//1-2=>5-6:正确
私有函数检查规则($a,$b)
{ 
$a_num=计数($a);
$b_num=计数($b);
对于($i=0;$iphase>=$this->maxPhase)
{
打破
}
$num=count($this->allthings[$this->phase]);
$cr=0;
对于($i=0;$IALLTINGS[$this->phase][$i],$this->allthings[$this->phase][$j]);
排序(项目);
$IMPODEARR=内爆($this->delimiter,$item);
如果(!isset($this->frequeitmsts[$infradearr]))
{
$sup=$this->scan($item,$inpudearr);
如果($sup>=$this->minSup)
{
$this->allthings[$this->phase+1][]=$item;
$this->frequeitmsts[$inpulodearr]=1;
$cr++;
}
} 
}
}
如果($crphase++);
} 
//زیر مجموعه های مربوط به مجموعه های بزرگتر را حذف می کند 
foreach($this->frequeitmsts as$k=>v)
{
$arr=explode($this->delimiter,$k);
$num=计数($arr);
如果($num>=3)
{ 
$subsets=$this->subsets($arr);
$num1=计数(子集);
对于($i=0;$idelimiter,$subsets[$i]));
} 
其他的
{
打破
}
}
} 
}
$this->fiTime=$this->stopTimer($this->fiTime);
}
/**
1. قوانین نهایی را با توجه به مقدار حداقل کانفیندس محاسبه می کند
**/
公共职能流程($db)
{
$checked=$result=array();
$this->freqItemsets($db);
$this->arTime=$this->startTimer();
foreach($this->frequeitmsts as$k=>v)
{ 
$arr=explode($this->delimiter,$k);
$subsets=$this->subsets($arr);
$num=计数($subset);
对于($i=0;$irealName($i)子集);
$n2=$this->realName($j)子集);
class Apriori {
private $delimiter   = ','; 
private $minSup      = 2; 
private $minConf     = 50; 

private $rules       = array(); 
private $table       = array(); 
private $allthings   = array();
private $allsups     = array(); 
private $keys        = array(); 
private $freqItmsts  = array();    
private $phase       = 1;

//maxPhase>=2
private $maxPhase    = 20; 

private $fiTime      = 0;
private $arTime      = 0; 

public function setDelimiter($char)
{
   $this->delimiter = $char;
}

public function setMinSup($int)
{
   $this->minSup = $int;
}

public function setMinConf($int)
{
   $this->minConf = $int;
}

public function setMaxScan($int)
{
   $this->maxPhase = $int;
}

public function getDelimiter()
{
   return $this->delimiter;
}

public function getMinSup()
{
   return $this->minSup;
}

public function getMinConf()
{
   return $this->minConf;
}

public function getMaxScan()
{
   return $this->maxPhase;
}

/**
    1. جدول آیتمها را می سازد
    2. کلید دسترسی به هر آیتم را تولید می کند
    3. تمامی آیتمها و تکرار آنها را محاسبه می کند - سطح 1
    توجه: حداقل تکرار محاسبه میشود
**/
private function makeTable($db)
{ 
   $table   = array();
   $array   = array();
   $counter = 1;

   if(!is_array($db))
      {
         $db = file($db);
      }

   $num = count($db);  
   for($i=0; $i<$num; $i++) 
      {
         $tmp  = explode($this->delimiter, $db[$i]);
         $num1 = count($tmp);
         $x    = array();
         for($j=0; $j<$num1; $j++) 
            {
               $x = trim($tmp[$j]);
               if($x==='')
                  {
                     continue;
                  }

               if(!isset($this->keys['v->k'][$x]))
                  {
                     $this->keys['v->k'][$x]         = $counter;
                     $this->keys['k->v'][$counter]   = $x;
                     $counter++;
                  } 

               if(!isset($array[$this->keys['v->k'][$x]]))
                  {
                     $array[$this->keys['v->k'][$x]] = 1; 
                     $this->allsups[$this->keys['v->k'][$x]] = 1;                        
                  }
               else
                  {
                     $array[$this->keys['v->k'][$x]]++; 
                     $this->allsups[$this->keys['v->k'][$x]]++;
                  }

               $table[$i][$this->keys['v->k'][$x]] = 1; 
            } 
      }

   $tmp = array();
   foreach($array as $item => $sup) 
      { 
         if($sup>=$this->minSup)
            {

               $tmp[] = array($item);
            }
      }

   $this->allthings[$this->phase] = $tmp;
   $this->table = $table;  
}

/**
    1. مقدار سوپریموم را با توجه به ورودی شناسه آیتمها شمارش می کند
**/
private function scan($arr, $implodeArr = '')
{ 
   $cr = 0;

   if($implodeArr)
      { 
         if(isset($this->allsups[$implodeArr]))
            { 
               return $this->allsups[$implodeArr];
            }
      }
   else
      {
         sort($arr);
         $implodeArr = implode($this->delimiter, $arr);
         if(isset($this->allsups[$implodeArr]))
            { 
              return $this->allsups[$implodeArr];
            }
      } 

   $num  = count($this->table);
   $num1 = count($arr); 
   for($i=0; $i<$num; $i++)
      {
         $bool = true; 
         for($j=0; $j<$num1; $j++)
            {
               if(!isset($this->table[$i][$arr[$j]]))
                  {
                     $bool = false;
                     break;
                  }
            }

         if($bool)
            {
               $cr++;
            }
      }

   $this->allsups[$implodeArr] = $cr;

  return $cr;
}

/**
    1. ترکیب دو آرایه و حذف مقادیر اضافی
**/
private function combine($arr1, $arr2)
{ 
   $result = array();

   $num  = count($arr1);
   $num1 = count($arr2); 
   for($i=0; $i<$num; $i++)
      {
         if(!isset($result['k'][$arr1[$i]]))
            {
               $result['v'][] = $arr1[$i];
               $result['k'][$arr1[$i]] = 1;
            }
      }

   for($i=0; $i<$num1; $i++)
      {
         if(!isset($result['k'][$arr2[$i]]))
            {
               $result['v'][] = $arr2[$i];
               $result['k'][$arr2[$i]] = 1;
            }
      }

  return $result['v'];
} 

/**
    1. نام آیتم را با توجه به شناسه آیتم یا آیتمها بر می گرداند
       {1,2,3,4} => {A,B,C,D}
**/
private function realName($arr)
{ 
   $result = ''; 

   $num = count($arr);
   for($j=0; $j<$num; $j++)
      { 
         if($j)
           {
              $result .= $this->delimiter;
           }

         $result .= $this->keys['k->v'][$arr[$j]]; 
      }

  return $result;
}

//1-2=>2-3 : false
//1-2=>5-6 : true
private function checkRule($a, $b)
{ 
   $a_num = count($a); 
   $b_num = count($b); 
   for($i=0; $i<$a_num; $i++) 
      { 
         for($j=0; $j<$b_num; $j++) 
            {
               if($a[$i]==$b[$j])
                  {
                     return false;
                  }
            }
      }

  return true;
} 

private function confidence($sup_a, $sup_ab)
{
    return round(($sup_ab / $sup_a) * 100, 2);
}

private function subsets($items) 
{  
   $result  = array(); 
   $num     = count($items); 
   $members = pow(2, $num); 
   for($i=0; $i<$members; $i++) 
      { 
         $b   = sprintf("%0".$num."b", $i); 
         $tmp = array();  
         for($j=0; $j<$num; $j++) 
            { 
               if($b[$j]=='1') 
                  {  
                     $tmp[] = $items[$j];   
                  }
            } 

         if($tmp)
            { 
               sort($tmp);
               $result[] = $tmp; 
            }  
      } 

  return $result; 
}

/**
    1. آیتم ستهای تکراری را بر می گرداند
**/
private function freqItemsets($db)
{ 
   $this->fiTime = $this->startTimer();  
   $this->makeTable($db);   
   while(1)
      {
         if($this->phase>=$this->maxPhase)
            {
               break;
            }

         $num = count($this->allthings[$this->phase]);
         $cr  = 0;
         for($i=0; $i<$num; $i++)  
            {    
               for($j=$i; $j<$num; $j++) 
                  {  
                     if($i==$j)
                        {
                           continue;
                        }

                     $item = $this->combine($this->allthings[$this->phase][$i], $this->allthings[$this->phase][$j]); 
                     sort($item);  
                     $implodeArr = implode($this->delimiter, $item);
                     if(!isset($this->freqItmsts[$implodeArr]))
                        {
                           $sup = $this->scan($item, $implodeArr);
                           if($sup>=$this->minSup)
                              {
                                 $this->allthings[$this->phase+1][] = $item;
                                 $this->freqItmsts[$implodeArr] = 1;
                                 $cr++;
                              }
                        } 
                  }
            }

         if($cr<=1)
            {
               break;
            }

         $this->phase++;  
      } 

   //زیر مجموعه های مربوط به مجموعه های بزرگتر را حذف می کند 
   foreach($this->freqItmsts as $k => $v)
      {
         $arr = explode($this->delimiter, $k);
         $num = count($arr); 
         if($num>=3)
            { 
               $subsets = $this->subsets($arr);  
               $num1    = count($subsets); 
               for($i=0; $i<$num1; $i++)
                  {
                     if(count($subsets[$i])<$num)
                        {
                           unset($this->freqItmsts[implode($this->delimiter, $subsets[$i])]);   
                        } 
                     else
                        {
                           break;
                        }
                  }
            } 
      }

   $this->fiTime = $this->stopTimer($this->fiTime); 
}

/**
    1. قوانین نهایی را با توجه به مقدار حداقل کانفیندس محاسبه می کند
**/
public function process($db)
{
   $checked = $result = array();     

   $this->freqItemsets($db);
   $this->arTime = $this->startTimer();

   foreach($this->freqItmsts as $k => $v)
      { 
         $arr     = explode($this->delimiter, $k); 
         $subsets = $this->subsets($arr);    
         $num     = count($subsets); 
         for($i=0; $i<$num; $i++)
            {
               for($j=0; $j<$num; $j++)
                  {
                     if($this->checkRule($subsets[$i], $subsets[$j]))
                        {
                           $n1 = $this->realName($subsets[$i]);
                           $n2 = $this->realName($subsets[$j]);

                           $scan = $this->scan($this->combine($subsets[$i], $subsets[$j]));
                           $c1   = $this->confidence($this->scan($subsets[$i]), $scan);
                           $c2   = $this->confidence($this->scan($subsets[$j]), $scan); 

                           if($c1>=$this->minConf)
                              {
                                 $result[$n1][$n2] = $c1; 
                              }

                           if($c2>=$this->minConf)
                              { 
                                 $result[$n2][$n1] = $c2; 
                              } 

                           $checked[$n1.$this->delimiter.$n2] = 1;
                           $checked[$n2.$this->delimiter.$n1] = 1; 
                        }
                  }
            } 
      }

   $this->arTime = $this->stopTimer($this->arTime); 

  return $this->rules = $result;
}

public function printFreqItemsets()
{
   echo 'Time: '.$this->fiTime.' second(s)<br />===============================================================================<br />';

   foreach($this->freqItmsts as $k => $v)
      {
         $tmp  = '';
         $tmp1 = '';
         $k    = explode($this->delimiter, $k);
         $num  = count($k);
         for($i=0; $i<$num; $i++)
            {  
               if($i)
                  {
                     $tmp  .= $this->delimiter.$this->realName($k[$i]);
                     $tmp1 .= $this->delimiter.$k[$i];
                  }
               else
                  {
                     $tmp  = $this->realName($k[$i]);
                     $tmp1 = $k[$i];
                  } 
            }

         echo '{'.$tmp.'} = '.$this->allsups[$tmp1].'<br />'; 
      }
}   

public function saveFreqItemsets($filename)
{
   $content = '';

   foreach($this->freqItmsts as $k => $v)
      {
         $tmp  = '';
         $tmp1 = '';
         $k    = explode($this->delimiter, $k);
         $num  = count($k);
         for($i=0; $i<$num; $i++)
            {  
               if($i)
                  {
                     $tmp  .= $this->delimiter.$this->realName($k[$i]);
                     $tmp1 .= $this->delimiter.$k[$i];
                  }
               else
                  {
                     $tmp  = $this->realName($k[$i]);
                     $tmp1 = $k[$i];
                  } 
            }

         $content .= '{'.$tmp.'} = '.$this->allsups[$tmp1]."\n"; 
      }

    file_put_contents($filename, $content);
}

public function getFreqItemsets()
{
   $result = array();

   foreach($this->freqItmsts as $k => $v)
      {
         $tmp        = array();
         $tmp['sup'] = $this->allsups[$k];
         $k          = explode($this->delimiter, $k);
         $num        = count($k);
         for($i=0; $i<$num; $i++)
            {  
               $tmp[] = $this->realName($k[$i]); 
            }

         $result[] = $tmp; 
      }

  return $result;
} 

public function printAssociationRules()
{
   echo 'Time: '.$this->arTime.' second(s)<br />===============================================================================<br />';

   foreach($this->rules as $a => $arr)
      {
         foreach($arr as $b => $conf)
            { 
               echo "$a => $b = $conf%<br />";
            }
      }
}

public function saveAssociationRules($filename)
{
    $content = '';

   foreach($this->rules as $a => $arr)
      {
         foreach($arr as $b => $conf)
            { 
               $content .= "$a => $b = $conf%\n"; 
            }
      } 

    file_put_contents($filename, $content);
}

public function getAssociationRules()
{
    return $this->rules;
} 

private function startTimer()
{
   list($usec, $sec) = explode(" ", microtime());
   return ((float)$usec + (float)$sec);
}

private function stopTimer($start, $round=2)
{
   $endtime = $this->startTimer()-$start;
   $round   = pow(10, $round);
   return round($endtime*$round)/$round;
}}  ?>
class Welcome extends CI_Controller {

function __construct() {
    parent::__construct();
    include 'class.apriori.php';

}
// input page
public function index() {
    $this->load->view('welcome_message');
}

// minSup, minConf, maxScan value as input
public function ambilinput() {
    $minSup = $this->input->post('minSup', true);
    $minConf = $this->input->post('minConf', true);
    $maxScan = $this->input->post('maxScan', true);
    redirect("welcome/apriori/$minSup/$minConf/$maxScan");
}

//APRIORI on system
public function apriori($minSup, $minConf, $maxScan) {
    $Apriori = new Apriori();

    $Apriori->setMaxScan($maxScan);
    $Apriori->setMinSup($minSup);
    $Apriori->setMinConf($minConf);
    $Apriori->setDelimiter(',');

    $dataset = array();
    $dataset[] = array('A', 'B', 'C', 'D');
    $dataset[] = array('A', 'D', 'C');
    $dataset[] = array('B', 'C');
    $dataset[] = array('A', 'E', 'C');


    $Apriori->process($dataset);

   echo '<h1>Frequent Itemsets</h1>';
    $Apriori->printFreqItemsets();

    echo '<h3>Frequent Itemsets Array</h3>';
    print_r($Apriori->getFreqItemsets()); 

//Association Rules
    echo '<h1>Association Rules</h1>';
    $Apriori->printAssociationRules();

        echo '<h3>Association Rules Array</h3>';
print_r($Apriori->getAssociationRules()); 
    }

}
<head>
    <meta charset="utf-8">
    <title>Input 1</title>
</head>
<body>

    <div>
        <form action="<?php echo base_url(); ?>index.php/welcome/ambilinput" method="post">
            <input type="number" name="minSup" placeholder="Minimal Support dalam %"/></br></br>
            <input type="number" name="minConf" placeholder="Minimal Coff dalam %"/></br></br>
            <input type="number" name="maxScan" placeholder="Jumlah Transaksi"/></br></br>
            <button type="submit" name="submit">Hitung Apriori</button>

        </form>
    </div>

</body>