xDecision模型文件结构说明

原创
2020/09/16 20:20
阅读数 593

前言

本文主要描述决策树模型文件的结构。首先举例,再进行详细说明

模型文件举例

Sample.xdecision模型文件

<?xml version="1.0" encoding="UTF-8"?>
<decision_tree>
 <factors>
  <factor id="Age" index="0">
   <value>below 20</value>
   <value>above 20</value>
  </factor>
  。。。
 </factors>
 <paths>
  <path index="1">0:0</path>
  <path index="2">0:1</path>
  <path index="5">0:1|2:0</path>
  <path index="6">0:1|2:1</path>
  <path index="5">0:0|1:2</path>
  <path index="0">0:0|1:0</path>
  <path index="4">0:0|1:1</path>
 </paths>
 <decisions>
  <decision id="decision0" index="0"/>
  <decision id="decision1" index="1"/>
  <decision id="decision2" index="2"/>
  <decision id="decision3" index="3"/>
  <decision id="decision4" index="4"/>
  <decision id="decision5" index="5"/>
  <decision id="decision6" index="6"/>
 </decisions>
</decision_tree>

模型结构

由上面的内容可以看出,模型文件包含factors,decisions和paths等元素

Factors节点

包含多个factor节点,代表用户定义的所有factor的集合。

Factor节点

包含两个属性和多个文本值

  • Id:名字
  • Index:代表唯一的factor索引值
  • value:代表factor的某个取值

decisions节点

包含用户定义的所有decision

Decision节点

包含两个属性

  • Id:名字
  • Index:代表唯一的decision索引值

Paths节点

包含所有可以触达到某个decision的路径的集合

path节点

代表一个可以到达某个decision的factor的路径。包含一个属性和一个路径值:

  • Index:该路径对应的决策index
  • 路径值:由|分隔的一系列节点间的链接。每个链接由:分隔的factor的index和factor value的index所组成

举两个例子方便大家理解

样例1

0:1 代表该路径匹配index值为2的decision,既”decision2” 0:1代表第0个factor的第1个值。既factor: Age对应的第一个值above 20 由之前的图可以看出当Age above 20的时候,可以获得decision2

样例2

0:0|1:1 该path可以匹配index为4的decision,既decision4 0:0|1:1代表两个链接:

  • 0:0。含义为第0个factor的第0个值,既Age below 20
  • 1:1。含义为第1个factor的第一个值,既Rank为level 2

新增模型元素

从install 1.2.0开始,xdecision tree editor的模型文件增加了三个节点。commnets, parser和evaluator。 commnets允许用户为决策树增加注释;另外两个支持用户更好的定制决策树的使用过程。

样例

增加的属性在属性窗口可以进行编辑

expression.xdecision模型文件

<?xml version="1.0" encoding="UTF-8"?>

<decision_tree>
 <comments/>
 <parser/>
 <evaluator>com.xrosstools.xdecision.ext.AviatorPathEvaluator</evaluator>
 <factors>
  <factor id="A" index="0">
   <value>&lt; 20</value>
   <value>&gt; 20</value>
  </factor>
  <factor id="B" index="1">
   <value>== true</value>
   <value>== false</value>
  </factor>
  <factor id="C" index="2">
   <value>== 'abc'</value>
   <value>== 'def'</value>
  </factor>
 </factors>
 <paths>
  <path index="1">0:0</path>
  <path index="2">0:1</path>
  <path index="3">0:0|1:0</path>
  <path index="4">0:0|1:1</path>
  <path index="5">0:1|2:0</path>
  <path index="6">0:1|2:1</path>
 </paths>
 <decisions>
  <decision id="decision0" index="0"/>
  <decision id="decision1" index="1"/>
  <decision id="decision2" index="2"/>
  <decision id="decision3" index="3"/>
  <decision id="decision4" index="4"/>
  <decision id="decision5" index="5"/>
  <decision id="decision6" index="6"/>
 </decisions>
</decision_tree>

comments节点

还允许用户为决策树添加注释(之前的注释的实现有bug)

parser

用于解析用户自定义的factor或decision。如果没有提供,则缺省实现DefaultParser就是简单的使用对应的字符串。对应接口为:

XDecisionTreeParser

public interface XDecisionTreeParser {
    Object parseFact(String name, String value);
    Object parseDecision(String name);
}

如果不提供自定义实现,则缺省实现为:

DefaultParser

evaluator

允许用户自定义如何对path进行解析。返回值时某个factor的path/value。接口定义:

PathEvaluator

public interface PathEvaluator {
    Object evaluate(Facts facts, String factorName, Object[] paths); 
}

如果不提供自定义实现,则缺省实现为:

DefaultEvaluator

AviatorPathEvaluator

从xdecision 2.0.0开始提供基于AviatorEvaluator的path实现。xdecision本身对其maven依赖的scope为provided。因此如果用户使用该类,请在主项目里自行添加依赖。

AviatorPathEvaluator

该实现主要是为了支持用户对factor下面的路径进行动态解析。具体做法是用factor的名字拼接上路径上的字符串作为表达式来求值。

具体示例可以参考:

ExpressionTest

XrossEvaluator

为了让用户使用类似SQL的语法定义决策树的条件,从xdecision 2.1.0开始提供XrossEvaluator。这个evaluator同时实现了XDecisionTreeParser 和PathEvaluator 接口。并且不依赖任何第三方组件。

XrossEvaluator

XrossEvaluator的用法是类似 操作符 操作数 的形式。目前支持以下操作符:

操作符 含义 示例
== 等于 == 123
<> 不等于 <> 123
> 大于 > 123
>= 大于等于 >= 123
< 小于 < 123
<= 小于等于 <= 123
IS NULL 为空 IS NULL
IS NOT NULL 不为空 IS NOT NULL
BETWEEN 在上下界之间 BETWEEN 123, 456
NOT BETWEEN 不在上下界之间 NOT BETWEEN 123, 456
IN 在给定范围里面 IN 1, 2, 3, 4, 5
NOT IN 不在给定范围里面 NOT IN 1, 2, 3, 4, 5
STARTS WITH 以给定值为开头 STARTS WITH '123'
ENDS WITH 以给定值为结尾 ENDS WITH '123'
CONTAINS 包含给定值 CONTAINS '123'

 

数值类型

XrossEvaluator支持以下数据类型:

* 数字型,可以直接写数字,例如,123,123.456等
* 字符型,单引号括起来的字符串。例如'abc'
* 变量,factor的名字。例如 A。变量可以是普通的数值,字符串或者是集合类型

操作数支持变量

除了不带操作数的操作符IS NULL和IS NOT NULL之外,带操作数的操作符,其操作数可以是常量,也可以是基于factor的变量。例如:
== A,IN 123, AList, BETWEEN A,B。等等

综合示例:

XrossEvaluatorTest

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部