الگوریتم اپریوری

الگوریتم اپریوری

پیاده سازی الگوریتم Apriori به زبان پی اچ پی.

دانلود v0.1 beta

درباره الگوریتم

آپریوری یک الگوریتم کلاسیک برای یادگیری قوانین وابستگی است. آپریوری روی پایگاه‌های داده شامل تراکنش‌ها (مثلاً مجموعه محصولات خریداری شده توسط مشتریان در یک سوپرمارکت) ساخته شده‌است. الگوریتم‌های دیگری نیز در این زمینه وجود دارند که روی پایگاه داده‌هایی کار می‌کنند که یا شامل تراکنش نیستند (Winepi و Minepi) و یا دارای ثبت زمانی نیستند (DNA sequencing).
ورودی این الگوریتم مجموعه‌ای از مجموعه آیتم‌ها است. الگوریتم تلاش می‌کند تا زیرمجموعه‌هایی از آیتم‌ها را که حداقل بین C مجموعه آیتم مشترک است بیابد. آپریوری یک الگوریتم پایین به بالا است، آنگونه که در هر مرحله یک آیتم به زیرمجموعه‌های مکرر اضافه می‌شود (تولید کاندید). مجموعه کاندیدها روی داده مورد ارزیابی قرار می‌گیرند. شرط خاتمه الگوریتم، عدم وجود شیوه توسعه موفق دیگری است. ویکی‌پدیا

استفاده

در ابتدا ، فایل کلاس را فراخوانی کنید:

include 'class.apriori.php';
$Apriori = new Apriori();

متدها: setMaxScan(int), setMinSup(int), setMinConf(int), setDelimiter(string), getMinSup(void), getMinConf(void), getMaxScan(void), getDelimiter(void), process(string or array), printFreqItemsets(void), getFreqItemsets(void), printAssociationRules(void), getAssociationRules(void), saveFreqItemsets(string), saveAssociationRules(string)

مقدار دهى اوليه

شما می توانید مقادیر قابل تغییر را بصورت زیر دستکاری نمایید:

$Apriori->setMaxScan(20);       //Scan 2, 3, ...
$Apriori->setMinSup(2);         //Minimum support 1, 2, 3, ...
$Apriori->setMinConf(75);       //Minimum confidence - Percent 1, 2, ..., 100
$Apriori->setDelimiter(',');    //Delimiter

مثال

minSup = 2, minConf = 75(%)

دیتاست

# Itemset
1 A, B, C, D
2 A, D, C
3 B, C
4 A, E, C

dataset.txt

A, B, C, D
A, D, C
B, C
A, E, C

کدنویسی

<?php
include 'class.apriori.php';
 
$Apriori = new Apriori();
 
$Apriori->setMaxScan(20);       //Scan 2, 3, ...
$Apriori->setMinSup(2);         //Minimum support 1, 2, 3, ...
$Apriori->setMinConf(75);       //Minimum confidence - Percent 1, 2, ..., 100
$Apriori->setDelimiter(',');    //Delimiter 
 
/*
Use Array:
$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);
*/
$Apriori->process('dataset.txt');
 
//Frequent Itemsets
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());
 
//Save to file
$Apriori->saveFreqItemsets('freqItemsets.txt');
$Apriori->saveAssociationRules('associationRules.txt');
?>

نتیجه

Frequent Itemsets

Time: 0 second(s)
===============================================================================
{B,C} = 2
{A,C,D} = 2

Frequent Itemsets Array

Array ( [0] => Array ( [sup] => 2 [0] => B [1] => C ) [1] => Array ( [sup] => 2 [0] => A [1] => C [2] => D ) )

Association Rules

Time: 0 second(s)
===============================================================================
B => C = 100%
D => C = 100%
D => A = 100%
D => A,C = 100%
C => A = 75%
A => C = 100%
A,D => C = 100%
C,D => A = 100%

Association Rules Array

Array ( [B] => Array ( [C] => 100 ) [D] => Array ( [C] => 100 [A] => 100 [A,C] => 100 ) [C] => Array ( [A] => 75 ) [A] => Array ( [C] => 100 ) [A,D] => Array ( [C] => 100 ) [C,D] => Array ( [A] => 100 ) )