WARMR(ACE 套件):从频繁模式中消除 "connected" 个术语

WARMR (ACE suite): eliminate "connected" terms from frequent patterns

我正在使用 ACE 数据挖掘套件中的 WARMR 频繁模式算法。这是一个说明我的问题的玩具示例。

假设您有 20 个示例 (example(ex1)),...,example(ex20))) 并且只有一个谓词,称其为 quality,因此 quality(E, X) 表示E 质量 XX 可以取 6 个值:abcdef,它们是相关:cbba(所以 c 也是 a),feed(因此 f 也是 d)。思考图表:

a - b - c
d - e - f

当 WARMR 挖掘频繁模式时,一旦包含了 branch/graph 中的一个质量,则不应允许添加来自同一分支的其他质量。例如在第 3 级:

 example(A),quality(A,a),quality(A,d)

是一个有效的模式但是:

 example(A),quality(A,a),quality(A,c)

 example(A),quality(A,a),quality(A,b)

不是。

我已将这些背景知识包含在 .bk 文件中:

bond(b,a).
bond(c,b).
bond(f,e).
bond(e,d).

no_bond(a,d).
no_bond(a,e).
no_bond(a,f).

bond(X,Y) :- bond(X,Z),bond(Z,Y).
bond(X,Y) :- bond(Y,X).

no_bond(X,Y) :- no_bond(Y,X).
no_bond(X,Y) :- no_bond(X,Z),bond(Z,Y).

我试图通过 .s 文件中的以下内容强加上述条件:

rmode(quality(+E, #).
constraint(quality(E, Q), not_occurs(bond(Q,_))).

rmode(quality(+E, #).
constraint(quality(E, Q), user(X, no_bond(Q,_))).   

constraint(quality(E, Q), user(X, no_bond(Q,X))).

none 其中有效。任何帮助将不胜感激。

所以有人向我建议了以下答案:

首先在背景知识中添加以下谓词:

branch1(E,X) :- quality(E,X), member(X, [a,b,c]).
branch2(E,X) :- quality(E,X), member(X, [d,e,f]).

然后将这些包含在设置文件中:

rmode(1:branch1(+E,#)).
rmode(1:branch2(+E,#)).

这解决了我提出的问题。然而,我的实际问题中的数据形成了一个有向树,因此这种 'static' 分支方法不适用。