bagos-apriori
Version:
Apriori adalah suatu metode Data Mining
69 lines (56 loc) • 2.19 kB
JavaScript
// AprioriMining.js
;
class AprioriMining {
static doApriori(db, supportThreshold) {
let I = db.getUniqueItems();
let L = new ItemsetCollection(); // Resultant large itemsets
let Li = new ItemsetCollection(); // Large itemset in each iteration
let Ci = new ItemsetCollection(); // Pruned itemset in each iteration
// First iteration (1-item itemsets)
for (var i = 0; i < I.length; i += 1) {
Ci.push(Itemset.from([I[i]]));
}
// Next iterations
let k = 2;
while (Ci.length != 0) {
// Set Li from Ci (pruning)
Li.clear();
for (var index in Ci) {
let itemset = Ci[index];
itemset.Support = db.findSupport(itemset);
if (itemset.Support >= supportThreshold) {
Li.push(itemset);
L.push(itemset);
}
}
// Set Ci for next iteration (find supersets of Li)
Ci.clear();
let subsets = Bit.findSubsets(Li.getUniqueItems(), k); // Get k-item subsets
subsets.forEach(set => Ci.push(set));
k += 1;
}
return L;
}
static mine(db, L, confidenceThreshold) {
let allRules = [];
for (var i in L) {
let itemset = L[i];
let subsets = Bit.findSubsets(itemset, 0); // Get all subsets
for (var j in subsets) {
let subset = subsets[j];
let confidence = (db.findSupport(itemset) / db.findSupport(subset)) * 100.0;
if (confidence >= confidenceThreshold) {
let rule = new AssociationRule();
subset.forEach(i => rule.X.push(i));
itemset.removeItemset(subset).forEach(i => rule.Y.push(i));
rule.Support = db.findSupport(itemset);
rule.Confidence = confidence;
if (rule.X.length > 0 && rule.Y.length > 0) {
allRules.push(rule);
}
}
}
}
return allRules;
}
}