我想在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作为变量来更改列?
答案 0 :(得分:0)
要使APRIORI合理快速,您需要高效的数据结构。我不相信再次将数据存储在SQL中就能解决问题。但当然这很大程度上取决于您的实际数据集。根据您的数据集,APRIORI,FPGrowth或Eclat有时可能是更好的选择。
无论哪种方式,在SQL表设计中使用类似Item1, Item2, Item3, ...
的表格布局都是不行的。您最终可能会The Daily WTF ...
考虑将项目集保留在主内存中,并仅使用高效的迭代器扫描数据库。