stochasticLinearRegression
此函数实现了随机线性回归。它支持自定义参数,包括学习率、L2 正则化系数、迷你批量大小,并且具有几种更新权重的方法(Adam(默认使用)、简单 SGD、动量法和Nesterov)。
参数
有 4 个可自定义的参数。它们是按顺序传递给函数的,但并不需要传递所有四个 - 默认值将被使用,然而良好的模型需要一些参数调整。
学习率
是梯度下降步骤执行时步长的系数。过大的学习率可能导致模型的权重无限大。默认值是0.00001
。l2 正则化系数
可以帮助防止过拟合。默认值是0.1
。迷你批量大小
设置计算和汇总梯度以执行一步梯度下降的元素数量。纯随机下降使用一个元素,然而,使用小批量(大约 10 个元素)可以使梯度步骤更稳定。默认值是15
。更新权重的方法
,有:Adam
(默认)、SGD
、Momentum
和Nesterov
。Momentum
和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
这样的查询将拟合模型并返回其权重 - 第一组是与模型参数对应的权重,最后一个是偏置。因此,上面的查询将返回一个包含 3 个值的列。
另见