stochasticLinearRegression
此函数实现随机线性回归。 它支持学习率、L2 正则化系数、小批量大小的自定义参数,并提供了几种更新权重的方法 (Adam (默认使用)、简单 SGD、Momentum 以及 Nesterov)。
参数
有 4 个可自定义的参数。 它们按顺序传递给函数,但无需传递全部四个 - 将使用默认值,但是良好的模型需要一些参数调整。
stochasticLinearRegression(0.00001, 0.1, 15, 'Adam')
学习率
是步长长度的系数,当执行梯度下降步时。 太大的学习率可能会导致模型的权重无限大。 默认值为0.00001
。L2 正则化系数
,它可以帮助防止过拟合。 默认值为0.1
。小批量大小
设置元素的数量,将计算和累加梯度以执行梯度下降的一步。 纯随机下降使用一个元素,但是,拥有小批量(大约 10 个元素)使梯度步骤更稳定。 默认值为15
。更新权重的方法
,它们是:Adam
(默认)、SGD
、Momentum
和Nesterov
。Momentum
和Nesterov
需要更多计算和内存,但是,它们在随机梯度方法的收敛速度和稳定性方面很有用。
用法
stochasticLinearRegression
分两步使用:拟合模型和在新的数据上预测。 为了拟合模型并保存其状态以供日后使用,我们使用 -State
组合器,它保存状态(例如模型权重)。 为了预测,我们使用函数 evalMLMethod,它将状态作为参数以及要预测的特征。
1. 拟合
可以使用这样的查询。
CREATE TABLE IF NOT EXISTS train_data
(
param1 Float64,
param2 Float64,
target Float64
) ENGINE = Memory;
CREATE TABLE your_model ENGINE = Memory AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, param1, param2)
AS state FROM train_data;
在这里,我们还需要将数据插入 train_data
表。 参数的数量不是固定的,它只取决于传递给 linearRegressionState
的参数数量。 它们都必须是数值。 请注意,目标值列(我们希望学习预测的目标值)作为第一个参数插入。
2. 预测
将状态保存到表中后,我们可以多次使用它进行预测,甚至与其他状态合并并创建新的、更好的模型。
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, param1, param2) FROM test_data
该查询将返回一列预测值。 请注意,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 个值的列。
另请参阅