跳转到主内容
跳转到主内容

stochasticLinearRegression

stochasticLinearRegression

引入版本:v20.1

该函数实现了随机线性回归。 它支持以下自定义参数:

  • 学习率
  • L2 正则化系数
  • mini-batch 大小

它还提供了一些用于更新权重的方法:

  • Adam(默认)
  • 简单 SGD
  • Momentum
  • Nesterov

用法

该函数的使用分为两个步骤:拟合模型以及在新数据上进行预测。

  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, x1, x2)
AS state FROM train_data;

在这里,我们还需要向 train_data 表中插入数据。 参数的数量不是固定的,只取决于传递给 linearRegressionState 的参数个数。 它们都必须是数值类型的值。 请注意,目标值所在的列(也就是我们希望模型学会预测的值)需要作为第一个参数传入。

  1. 预测

将状态保存到表中之后,我们可以多次使用它进行预测,或者将其与其他状态合并,以创建新的、效果更好的模型。

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data

该查询将返回一列预测值。 注意 evalMLMethod 的第一个参数是 AggregateFunctionState 对象,后续参数是特征列。

test_data 是一张类似于 train_data 的表,但可能不包含目标值。

注意

  1. 为了合并两个模型,用户可以创建如下查询:
SELECT state1 + state2 FROM your_models

其中 your_models 表同时包含这两个模型。 此查询将返回一个新的 AggregateFunctionState 对象。

  1. 如果未使用 -State 组合器,你可以出于自身用途获取已创建模型的权重,而无需保存该模型。
SELECT stochasticLinearRegression(0.01)(target, param1, param2)
FROM train_data

像这样的查询会对模型进行拟合并返回其权重——前几个值是与模型参数对应的权重,最后一个是偏置项。 因此在上面的示例中,该查询将返回一个包含 3 个值的列。

语法

stochasticLinearRegression([learning_rate, l2_regularization_coef, mini_batch_size, method])(target, x1, x2, ...)

参数

  • learning_rate — 在执行梯度下降步骤时用于步长的系数。学习率过大会导致模型权重发散为无穷大。默认值为 0.00001Float64
  • l2_regularization_coef — L2 正则化系数,有助于防止过拟合。默认值为 0.1Float64
  • mini_batch_size — 一次梯度下降步骤中,用于计算梯度并求和的元素数量。纯随机梯度下降仅使用一个元素,而使用较小的小批量(约 10 个元素)可以使梯度更新更加稳定。默认值为 15UInt64
  • method — 更新权重的方法:Adam(默认)、SGDMomentumNesterovMomentumNesterov 需要稍多的计算和内存,但在随机梯度方法的收敛速度和稳定性方面通常更有优势。const String
  • target — 需要学习并预测的目标值(因变量)。必须为数值类型。Float*
  • x1, x2, ... — 特征值(自变量)。必须全部为数值类型。Float*

返回值

返回训练好的线性回归模型权重。前面的值对应模型参数,最后一个值为偏置(bias)。使用 evalMLMethod 进行预测。Array(Float64)

示例

训练模型

CREATE TABLE your_model
ENGINE = Memory
AS SELECT
stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data
Saves trained model state to table

进行预测

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) FROM test_data
Returns predicted values for test data

获取模型权重

SELECT stochasticLinearRegression(0.01)(target, x1, x2) FROM train_data
Returns model weights without saving state

另请参阅