配置回归模型

训练、保存、加载和卸载回归模型。训练基于文本数据和数字目标数据的嵌入向量的模型。

选项 

  • 操作指定要执行的操作:

    • 训练:使用指定的训练数据和算法参数创建和训练一个新的回归模型。

    • 保存:将训练模型作为容器数据保存到“将模型保存到”选项指定的字段或变量,以备日后使用。

    • 加载:将之前保存的模型从“将模型保存到”选项指定的容器字段或变量加载到内存中。

    • 卸载:从内存中删除模型以释放资源。

  • 模型名称是“操作”选项操作的回归模型的唯一名称的文本表达式。训练或加载模型后,在引用模型时使用相同的名称来执行 PredictFromModel函数进行回归。

仅当“操作”为“训练”时选项才可用:

  • 算法选择要使用的机器学习算法。在 22.0 版中,随机林是唯一提供的算法。

  • 训练向量字段指定包含训练数据向量的文本或容器字段。

  • 训练目标字段指定包含目标值(您想要预测的数值)的字段。每个值对应于训练向量字段中的一个训练示例。

  • 跳过空或无效记录跳过训练向量字段训练目标字段指定的字段为空或包含无效数据的记录。如果未选择,脚本步骤将跳过第一个包含空或无效字段数据的记录后的所有记录,并返回错误。

  • 参数是 JSON 对象的文本表达式,将算法特定参数指定为键值对。请参阅描述。

仅当“操作”为“训练”或“保存”时选项才可用:

  • 保存模型到”指定用于保存训练模型的变量或容器字段。

仅当“操作”为“加载”时选项才可用:

  • 模型加载自”指定从中加载训练模型的变量或容器字段。

兼容性 

产品 是否支持
FileMaker Pro
FileMaker Go
FileMaker WebDirect
FileMaker Server
FileMaker Cloud
FileMaker Data API
自定义 Web 发布

原始版本 

22.0

说明 

此脚本步骤使您能够直接在 FileMaker Pro 应用中训练和管理使用机器学习算法的回归模型。回归模型根据独立输入变量 (features) 预测依赖输出变量 (target) 的连续数值,使这些模型适用于预测、趋势分析和数据驱动的决策。

随机林算法是一种集成学习方法,它通过组合多个决策树来构建比单一决策树更稳健、更精准的预测模型,因此该算法适用于处理现实世界中的数据。林中的每棵树都是基于训练数据和特征的随机子集进行训练的,这有助于防止过拟合(即不仅捕捉到了训练数据中的模式,还捕捉到了随机噪声),并提升算法对新数据的泛化能力。

当您选择“训练”操作时,脚本步骤将执行以下操作:

  1. 训练向量字段中解析向量,以提取特征值。

  2. 应用指定的算法参数,如果没有提供,则使用默认值。

  3. 使用随机林算法训练模型,从训练向量字段中提取的特征值以及从训练目标字段中提取的目标值。

  4. 将训练模型存储在内存中,指定模型名称,以便与 PredictFromModel函数一起使用。

  5. 如果指定了“保存模型到”,则保存模型供以后使用。

保存”、“加载”和“卸载”操作允许您管理训练模型,仅在需要时保存它们,并且为了优化性能,仅在使用时将它们保留在内存中。

对于随机林算法,如果需要,可以使用“参数”选项中的以下键和值来调整训练。如果未指定密钥或未使用“参数”选项,则脚本步骤将使用默认值。

参数 说明 默认值

numTrees

随机林中决策树的数量。更多的树通常会提高准确性,但会增加训练时间和内存的使用。

10

maxDepth

每个决策树的最大深度。训练时,树可能不会达到这个深度。更深的树可以捕获更复杂的模式,但可能与训练数据过拟合。

10

minSamplesSplit

拆分内部节点所需的最小样本数。更高的值可以防止过拟合。

2

numFeatures

如果为正,则用于训练单个树的可能特征总数(有效范围为 1 ≤ numFeatures < 1536)。如果为负,则使用所有特征进行训练。

-1

maxFeatures

用于训练单个树的最大特征数量:

0: numFeatures
1: Sqrt(numFeatures)
2: log2(numFeatures)

1

例如,此 JSON 对象设置参数选项中的所有键:

复制
{
    "numTrees" : 15,
    "maxDepth" : 15,
    "minSamplesSplit" : 3,
    "numFeatures" : 1000,
    "maxFeatures" : 0
}

注释 

  • 训练向量字段中的值必须作为文本字段中的有效 JSON 数组或容器字段中的等效二进制数据提供。每个数组必须包含所有记录中相同数量的元素(特征)。

    您可以使用在搜索结果中插入嵌入脚本步骤在基于包含您输入数据的另一个字段的训练向量字段中生成文本嵌入向量。在使用支持的文本嵌入模型时,“在搜索结果中插入嵌入”生成的嵌入向量符合上述要求。

  • 训练目标字段中的值必须是数值。非数值会导致训练失败。

  • 模型名称区分大小写,并且在当前 FileMaker 会话中必须是唯一的。如果训练时已经存在同名模型,它将被新模型替换。

  • 要测试训练模型的质量,请使用 PredictFromModel函数返回用于训练模型的给定相同矢量数据的预测值。然后将预测值与训练期间使用的目标值进行比较。测量模型整体质量的一种方法是均方误差 (MSE),它计算预测值和目标值之间的平均平方差。MSE 值为零表示模型的预测值和实际值之间完美匹配,因此 MSE 值越低越好。模型的最佳 MSE 值取决于目标变量的量级以及特定应用场景下可接受的误差范围。请参阅示例 3,了解计算 MSE 的脚本。

  • 性能注意事项:

    • 训练时间随着树木数量 (numTrees) 和最大深度 (maxDepth) 的增加而增加。从参数的默认值开始,然后根据您的准确性要求和性能限制进行调整。

    • 较大的数据集在训练期间需要更多的内存。如果使用非常大的数据集,请考虑使用具有代表性的样本进行初始模型训练。

    • 模型保留在内存中,直到显式卸载或 FileMaker 会话结束。当不再需要模型时,使用“卸载”操作释放内存。

示例 1 - 训练基本模型

使用默认的随机林参数训练基本回归模型,根据面积、卧室数量和房屋年龄预测房价。

在属性表中,特征字段包含JSON数组,如[1200, 3, 15],代表面积、卧室和年龄,而价格字段包含相应的房价。执行此脚本步骤后,模型将加载至内存中,在当前 FileMaker 会话中,可通过引用模型名称“HousePriceModel”,并使用 PredictFromModel函数来调用该模型。

由于此示例中尚未保存模型,因此当前会话结束后,该模型将不可用。

复制
转到布局 [ "属性" (Properties) ; 动画: 无 ]

配置回归模型 [ 操作: 训练 ; 模型名称: "HousePriceModel" ; 算法: 随机林 ; 训练向量字段: Properties::Features ; 训练目标字段: Properties::Price ; 跳过空的或无效的记录 ]

示例 2 - 获取嵌入向量并训练模型

训练回归模型,根据客户评论的文本预测星级评分(1 到 5)。

培训数据位于“评论”表中,由“评论文本”(包含客户评论的文本字段)和“评级”(包含客户选择的星级评级的数字字段)组成。在脚本为随 FileMaker Server 一同安装的 AI 模型服务器配置好 AI 账户后,它会使用该账户根据“评论文本”字段中的数据,将文本嵌入向量插入到“评论嵌入”容器字段中。

然后,脚本训练回归模型,将其命名为“ReviewModel”,并使用“评论嵌入”中的训练向量、“评级”字段中的目标值和自定义参数。训练完成后,模型将保存在全局容器字段“评论模型”中。

复制
配置 AI 账户 [ 账户名称: "AI_Model_Server" ; 模型提供商: 自定义 ; 端点: "https://myserver.example.com:8080/" ; 验证 SSL 证书 ; API 密钥: Global::API_Key ]

转到布局 [ "评论" (Reviews) ]

在搜索结果中插入嵌入 [ 账户名称: "AI_Model_Server" ; 嵌入模型: "all-MiniLM-L12-v2" ; 来源字段: Reviews::ReviewText ; 目标字段: Reviews::ReviewEmbedding ; 发生错误时继续 ; 显示摘要 ]

设置变量 [ $parameters ; 值: 
  Let ( [
    json = "{}" ;
    json = JSONSetElement ( json; "numTrees"; 15; JSONNumber ) ;
    json = JSONSetElement ( json; "maxDepth"; 15; JSONNumber ) ;
    json = JSONSetElement ( json; "minSamplesSplit"; 3; JSONNumber ) ;
    json = JSONSetElement ( json; "numFeatures"; 1000; JSONNumber ) ;
    json = JSONSetElement ( json; "maxFeatures"; 0; JSONNumber )
  ] ;
    json
  )
]

配置回归模型 [ 操作: 训练模型 ; 模型名称: "ReviewModel" ; 算法: 随机林 ; 训练向量字段: Reviews::ReviewEmbedding ; 训练目标字段: Reviews::Rating ; 跳过空的或无效的记录 ; 参数: $parameters ; 保存模型到: Reviews::ReviewModel ]

名为“ReviewModel”的模型已可供使用。请参阅 PredictFromModel 中的示例 2

示例 3 - 计算均方误差

计算均方误差,以评估经过训练的回归模型的质量(请参阅“注意”)。

该脚本会切换至包含示例 2 中所用训练数据的“评论”布局界面,显示所有记录,将变量 $squaredLossSum 清零,定位到第一条记录,随后加载先前保存的模型并将其命名为“ReviewModel”。

在循环过程中,针对每条记录,使用 PredictFromModel函数通过模型预测的值与“评级”字段中的实际值之间的差值会被求平方,然后累加到变量 $squaredLossSum 中。

循环浏览所有记录后,通过 $squaredLossSum 除以样本数(训练数据集中的记录数)来计算 MSE 值,并在对话框中显示。完成后,脚本会从内存中卸载模型。

复制
转到布局 [ "评论" (Reviews) ]
显示所有记录
设置变量 [ $squaredLossSum; 值: 0 ]

配置回归模型 [ 操作: 加载模型 ; 模型名称: "ReviewModel" ; 模型加载自: Reviews::ReviewModel ]

转到记录/请求/页面 [ 第一个 ]
Loop [ Flush: Always ]
    设置变量 [ $loss; Value: Reviews::Rating - PredictFromModel ( "ReviewModel" ; Reviews::ReviewEmbedding ) ]
    设置变量 [ $squaredLoss ; 值: $loss^2 ]
    设置变量 [ $squaredLossSum ; Value: $squaredLossSum + $squaredLoss ]
    转到记录/请求/页面 [ 下一个 ; 最后一个后退出: 开 ]
End Loop

显示自定义对话框 [ "MSE 值" ; $squaredLossSum / Get ( FoundCount ) ]

配置回归模型 [ 操作: 卸载模型 ; 模型名称: "ReviewModel" ]

可能的 MSE 值为 .01875826440712939518