Machine learning WARMR(ACE套件):消除;“已连接”;来自频繁模式的术语

Machine learning WARMR(ACE套件):消除;“已连接”;来自频繁模式的术语,machine-learning,prolog,data-mining,swi-prolog,logic-programming,Machine Learning,Prolog,Data Mining,Swi Prolog,Logic Programming,我正在ACE数据挖掘套件中使用WARMR频繁模式算法。这里有一个玩具的例子来说明我的问题 假设你有20个例子(example(ex1)),…,example(ex20)))并且只有一个谓词,称之为quality,所以quality(E,X)意味着E具有质量XX可以取6个相关的值:a,b,c,d,e和f,它们是相关的:c是b和b是a(因此c也是a),f是e(因此,f也是d)。想想图表: a - b - c d - e - f 当WARMR挖掘频繁模式时,一旦分支/图形中包含一个质量,则不允许添加

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

假设你有20个例子(
example(ex1))
,…,
example(ex20))
)并且只有一个谓词,称之为
quality
,所以
quality(E,X)
意味着
E
具有质量
X
<例如,code>X可以取6个相关的值:
a
b
c
d
e
f
,它们是相关的:
c
b
b
a
(因此
c
也是
a
),
f
e
(因此,
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)

不是

我已将此背景知识包含在
.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).
rmode(quality(+E, #).
constraint(quality(E, Q), not_occurs(bond(Q,_))).
我已尝试通过
.s
文件中的以下内容施加上述条件:

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).
rmode(quality(+E, #).
constraint(quality(E, Q), not_occurs(bond(Q,_))).


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

因此,有人向我建议了以下答案:

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

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

这解决了我所说的问题。但是,我实际问题中的数据形成了一个定向树,因此这种“静态”分支方法不适用。

看起来很酷,ACE不是开源的,这有点遗憾。@DanielLyons您应该给维护人员发电子邮件,询问如果您感兴趣,是否可以访问它!
rmode(1:branch1(+E,#)).
rmode(1:branch2(+E,#)).