WARMR(ACE 套件):从频繁模式中消除 "connected" 个术语
WARMR (ACE suite): eliminate "connected" terms from frequent patterns
我正在使用 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 挖掘频繁模式时,一旦包含了 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' 分支方法不适用。
我正在使用 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 挖掘频繁模式时,一旦包含了 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' 分支方法不适用。