我正在使用 Orange CN2 进行规则归纳。有时,一个变量在一个规则中使用了两次。这是一个示例规则:“IF 分数 > 40 且金额 < 100 且分数 > 55 THEN status = bad”。有没有办法配置 CN2 使一个变量在规则中只能使用一次?此外,是否可以将 CN2 配置为仅允许“>”条件(即不允许“<”)用于连续变量?
问问题
92 次
1 回答
1
我认为您不能多次使用相同的属性来阻止 CN2。在某些情况下,您实际上确实需要两个条件,例如 score > 40 和 score < 50。
但是,在您的情况下,第一个条件(分数> 40)是不必要的。我建议您编写一个通过规则条件 (rule.filter.conditions) 运行的后修剪过程,尝试删除每个条件并查看新规则是否涵盖与以前相同的示例。
对于第二个问题,没有简单的方法来禁止特定条件,例如所有连续值的“<”。最好的办法可能是实现一个新的验证器类(learner.rule_finder.validator),它会拒绝条件错误的规则。像这样的东西:
class ConditionsValidator(Orange.core.RuleValidator):
""" prunes rules with 'isgreater' conditions """
def __call__(self, rule, data, weight_id, target_class, prior):
for c in rule.filter.conditions:
if c.oper == Orange.data.filter.ValueFilter.Greater:
return False
return True
然后,将此验证器的一个对象设置为规则学习器的新验证器:
learner.rule_finder.validator = ConditionsValidator()
于 2015-09-15T15:57:05.257 回答