在SQL中实现apriori

时间:2013-12-29 19:27:28

标签: sql data-mining

我想在SQL中实现这个伪代码。 这是我的代码:

k = 1    
C1 = generate counts from R1    
repeat    
k = k + 1    
INSERT INTO R'k    

SELECT p.Id, p.Item1, …, p.Itemk-1, q.Item    
FROM Rk-1 AS p, TransactionTable as q    
WHERE q.Id = p.Id AND    
q.Item > p.Itemk-1    
INSERT INTO Ck 

SELECT p.Item1, …, p.Itemk, COUNT(*)    
FROM R'k AS p    
GROUP BY p.Item1, …, p.Itemk    
HAVING COUNT(*) >= 2
INSERT INTO Rk

SELECT p.Id, p.Item1, …, p.Itemk    
FROM R!k AS p, Ck AS q    
WHERE p.item1 = q.item1 AND

.
.
p.itemk = q.itemk    
until Rk = {}`

如何对此进行编码,以便使用k作为变量来更改列?

1 个答案:

答案 0 :(得分:0)

要使APRIORI合理快速,您需要高效的数据结构。我不相信再次将数据存储在SQL中就能解决问题。但当然这很大程度上取决于您的实际数据集。根据您的数据集,APRIORI,FPGrowth或Eclat有时可能是更好的选择。

无论哪种方式,在SQL表设计中使用类似Item1, Item2, Item3, ...的表格布局都是不行的。您最终可能会The Daily WTF ...

考虑将项目集保留在主内存中,并仅使用高效的迭代器扫描数据库。