skSymbolFit
首发版本:3.00.6
语法
skSymbolFit(symbolRegressor, inputs, target, config)
详情
根据输入变量、目标变量和训练配置执行符号回归训练。目标变量表示待拟合的输出,其取值由输入变量决定。符号回归训练的目标是发现输入变量与目标变量之间的数学表达式。
注:
社区版 License 暂不支持 Shark。如需使用,请前往官网下载页面,在 Shark 区域单击申请试用。
参数
symbolRegressor 句柄,指定用于训练的符号回归器,由 skSymbolRegressor 函数创建。
inputs 字典,指定用于训练的输入变量,包括以下键:
- "varTerminalSet":必填,元组,指定表达式中可使用的输入变量集合,例如 [a,b,c,d]。所有变量必须为向量且长度一致。 变量名会参与表达式构建,并保留在最终生成的表达式中。在表达式计算(
skSymbolEval)环节,输入表的列名需要和此处的变量名保持一致。 - "groupTerminalSet":元组,指定训练数据的分组,例如 [g1,g2]。所有变量必须为向量且长度与 "varTerminalSet" 中的变量一致。 指定该字段后,系统会根据分组变量构造分组上下文。
target 向量,指定用于训练的目标变量。未指定 "groupTerminalSet" 时,其长度必须与输入变量长度一致;指定 "groupTerminalSet" 时,其长度必须与分组数量一致。
config 字典,指定符号回归训练配置,包括以下键:
- "fitnessFunction":必填,函数定义,指定用于评估表达式质量的适应度函数。比如以下适应度函数用于计算表达式预测值 x 与目标值 y
之间的均方误差,误差越小,表达式质量越高。
@gpu def fit_mse(x, y){ a = x - y return mean(a * a) } - "initializer":字典,指定初始化表达式树的方法,包括以下键:
- "name":STRING 标量,指定策略名称,取值如下:
- "half":默认值,将会有 50%的概率通过 grow 或 full 方法生成表达式树的子树。
- "full":只有表达式树的叶子节点可以是常量或变量。
- "grow":表达式树中的每一个节点,都可以从函数、常量和变量中随机选取。
- "param":字典,指定策略参数,包括以下键:
- "minDepth":INT 标量,指定初始化表达式树的最小深度。仅 half 策略支持该键。
- "maxDepth":INT 标量,指定初始化表达式树的最大深度。
- "probConstant":DOUBLE 标量,指定生成叶子节点时选择常量的概率。
- "name":STRING 标量,指定策略名称,取值如下:
- "constantRange":字典,指定随机常量范围及采样权重,包括以下键:
- "floatRange":字典,指定浮点常量采样范围,包括以下键:
- "min":DOUBLE 标量,指定浮点常量的最小值。 默认值为 -1.0。
- "max":DOUBLE 标量,指定浮点常量的最大值。 默认值为 1.0。
- "weight":INT 标量,指定浮点常量的生成概率。 默认值为 1。
- "intRange":字典,指定整数常量的采样范围,包括以下键:
- "min":DOUBLE 标量,指定整数常量的最小值。 默认值为 -10.0。
- "max":DOUBLE 标量,指定整数常量的最大值。 默认值为 10.0。
- "weight":INT 标量,指定整数常量的生成概率。 默认值为 1。
注:系统根据
floatRange.weight和intRange.weight的相对大小决定生成浮点常量还是整数常量。权重小于等于 0 时按 0 处理;如果两者权重均不大于 0,则以 0.5 的概率在两类常量之间选择。 - "floatRange":字典,指定浮点常量采样范围,包括以下键:
- "epsilon":DOUBLE 标量,指定训练提前终止阈值。当最优表达式的适应度达到该阈值时,训练将提前结束。默认值为 1e-3。
- "parsimony":DOUBLE 标量,指定表达式复杂度惩罚系数,用于在拟合精度和表达式复杂度之间进行权衡。值越大,越倾向于生成简单表达式。默认值为 0.0。
- "seed":LONG 标量,指定随机种子,用于初始化训练过程中的随机数生成器。设置相同的随机种子后,在相同输入数据和训练配置下,可提高训练结果的可复现性;未指定时,系统将自动生成随机种子。
- "population":INT 标量,指定每代种群中的个体数量,即每代参与进化的候选表达式数量。默认值为 1000。
- "generation":INT 标量,指定种群进化的最大代数。每代都会执行选择、交叉、变异和适应度评估。默认值为 20。
- "maxDepth":INT 标量,指定候选表达式的最大允许深度,即从根节点到最深叶子节点的最大层数。训练过程中生成的表达式(包括变异结果)均受该限制约束。默认值为 6。
- "elites":INT 标量,指定每代直接保留的适应度最优表达式数量。这些表达式不参与交叉和变异,直接进入下一代,用于保证最优解不被破坏。默认值为 0。
- "simplify":BOOL 标量,指定是否在返回最终表达式前进行符号化简。默认值为 false。
- "verbose":BOOL 标量,指定是否输出训练配置和训练统计信息。默认值为 true。
返回值
返回两个对象:
- syms:符号句柄向量,表示训练得到的去重后符号表达式,按适应度从小到大排序。可通过
string(syms)查看表达式文本,也可传给skSymbolEval求值。 - info:训练结果摘要表,包含 fitness、height、hash 三列,分别表示适应度、表达式深度、表达式哈希值。
