跳到主要内容
跳到主要内容
编辑此页

stochasticLinearRegression

此函数实现了随机线性回归。它支持学习率、L2 正则化系数、小批量大小的自定义参数,并具有一些用于更新权重的方法(Adam(默认使用)、简单 SGD动量Nesterov)。

参数

有 4 个可自定义的参数。它们按顺序传递给函数,但不需要传递全部四个 - 将使用默认值,但是好的模型需要一些参数调整。

stochasticLinearRegression(0.00001, 0.1, 15, 'Adam')
  1. learning rate 是执行梯度下降步骤时步长的系数。学习率过大可能会导致模型的权重无限大。默认为 0.00001
  2. l2 regularization coefficient 可以帮助防止过拟合。默认为 0.1
  3. mini-batch size 设置元素的数量,将计算和汇总这些元素的梯度以执行梯度下降的一个步骤。纯随机下降使用一个元素,但是,使用小批量(约 10 个元素)可以使梯度步骤更稳定。默认为 15
  4. method for updating weights,它们是:Adam(默认)、SGDMomentumNesterovMomentumNesterov 需要更多的计算和内存,但是,它们在收敛速度和随机梯度方法的稳定性方面非常有用。

用法

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 的表,但可能不包含目标值。

注释

  1. 要合并两个模型,用户可以创建这样的查询:sql SELECT state1 + state2 FROM your_models,其中 your_models 表包含两个模型。此查询将返回新的 AggregateFunctionState 对象。

  2. 如果未使用 -State 组合器,则用户可以获取创建模型的权重以用于自己的目的,而无需保存模型。sql SELECT stochasticLinearRegression(0.01)(target, param1, param2) FROM train_data 这样的查询将拟合模型并返回其权重 - 第一个是权重,它对应于模型的参数,最后一个是偏差。因此,在上面的示例中,查询将返回一个包含 3 个值的列。

参见