我正在 ACE 数据挖掘套件中使用 WARMR 频繁模式算法。这是一个说明我的问题的玩具示例。
假设您有 20 个示例 (example(ex1))
,...,example(ex20))
),只有一个谓词,将其称为 quality
,因此 quality(E, X)
表示 E
具有质量 X
。 X
可以采用 6 个值:a
、b
、c
、d
>、e
和 f
相关:c
是 b
且 b
是a
(因此c
也是a
),f
是e
并且e
是 d
(因此 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,#)).
这解决了我所说的问题。然而,我的实际问题中的数据形成有向树,因此这种“静态”分支方法不适用。
关于machine-learning - 华纳(AVE 套件): eliminate "connected" terms from frequent patterns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34416778/