You need to enable JavaScript to run this app.
导航
stochasticlinearregression
最近更新时间:2024.11.11 17:54:04首次发布时间:2024.11.11 17:54:04

该函数实现随机线性回归。 它支持自定义参数的学习率、L2正则化系数、微批,并且具有少量更新权重的方法(Adam (默认), simple SGDMomentumNesterov)。

参数

有4个可自定义的参数。它们按顺序传递给函数,但不需要传递所有四个参数——将使用默认值,然而好的模型需要一些参数调整。
语法

stochasticLinearRegression(1.0, 1.0, 10, 'SGD')

learning rate 当执行梯度下降步骤时,步长的系数。 过大的学习率可能会导致模型的权重无限大。 默认值为 0.00001
l2 regularization coefficient 这可能有助于防止过度拟合。 默认值为 0.1
mini-batch size 设置元素的数量,这些元素将被计算和求和以执行梯度下降的一个步骤。纯随机下降使用一个元素,但是具有小批量(约10个元素)使梯度步骤更稳定。 默认值为 15
method for updating weights 他们是: Adam (默认情况下), SGD, Momentum, NesterovMomentumNesterov 需要更多的计算和内存,但是它们恰好在收敛速度和随机梯度方法的稳定性方面是有用的。

使用

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个值的列。