stochasticLinearRegression
该函数实现了随机线性回归。它支持自定义的学习率、L2正则化系数、迷你批量大小,并具有几种更新权重的方法(Adam(默认使用)、简单SGD、动量法和Nesterov)。
参数
有 4 个可自定义的参数。它们按顺序传递给函数,但不需要传递所有四个 - 将使用默认值,然而良好的模型需要一些参数调整。
学习率
是梯度下降步骤执行时的步长系数。过大的学习率可能导致模型的权重无穷大。默认值为0.00001
。L2正则化系数
有助于防止过拟合。默认值为0.1
。迷你批量大小
设置了计算梯度并求和以执行一次梯度下降步骤的元素数量。纯随机下降使用一个元素,然而,拥有小批量(大约 10 个元素)使梯度步骤更加稳定。默认值为15
。更新权重的方法
包括:Adam
(默认)、SGD
、动量法
和Nesterov
。动量法
和Nesterov
需要稍多的计算和内存,但在收敛速度和随机梯度方法的稳定性方面是有用的。
用法
stochasticLinearRegression
有两个步骤:拟合模型和在新数据上进行预测。为了拟合模型并保存其状态以供后续使用,我们使用 -State
组合器,它保存状态(例如模型权重)。
要进行预测,我们使用函数 evalMLMethod,其将状态作为参数以及用于预测的特征。
1. 拟合
可以使用如下查询。
在这里,我们还需要将数据插入 train_data
表。参数的数量不是固定的,仅依赖于传递给 linearRegressionState
的参数数量。它们必须都是数值类型。
请注意,目标值的列(我们希望学习预测的值)作为第一个参数插入。
2. 预测
在将状态保存到表中后,我们可以多次使用它进行预测,甚至可以与其他状态合并并创建新的、更好的模型。
该查询将返回预测值的列。请注意,evalMLMethod
的第一个参数是 AggregateFunctionState
对象,其余是特征的列。
test_data
是一个类似于 train_data
的表,但可能不包含目标值。
注意事项
-
要合并两个模型,用户可以创建如下查询:
sql SELECT state1 + state2 FROM your_models
其中your_models
表包含两个模型。该查询将返回新的AggregateFunctionState
对象。 -
用户可以提取创建模型的权重以供其个人用途,而无需保存模型,如果未使用
-State
组合器。sql SELECT stochasticLinearRegression(0.01)(target, param1, param2) FROM train_data
这样的查询将拟合模型并返回其权重 - 首个是与模型参数相对应的权重,最后一个是偏置。因此在上述示例中,该查询将返回一列值。
参见