WARMR(ACE 套件):从频繁的模式中消除"连接"术语



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

假设你有20个例子(example(ex1)),…,example(ex20))),只有一个谓词,称之为quality,所以quality(E, X)意味着E具有质量X。例如,X可以取6个值:abcdef,它们是相关的:cbba(因此c也是a),feed(所以f也是d)。思维图:

a - b - c
d - e - f

当WARMR挖掘频繁模式时,一旦包含分支/图中的一个质量,就不允许添加来自同一分支的其他质量。例如在级别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))).

这些都不起作用。任何帮助都将不胜感激。

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

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

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,#)).

这解决了我提出的问题。然而,在我的实际问题中,数据形成了一个有向树,所以这种"静态"分支方法不适用。

最新更新