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

stochasticLogisticRegression

stochasticLogisticRegression

引入版本:v20.1

该函数实现随机逻辑回归。 可用于二元分类问题,支持与 stochasticLinearRegression 相同的自定义参数,工作方式也相同。

使用方法

该函数分两步使用:

  1. 拟合

可以使用以下查询进行拟合:

CREATE TABLE IF NOT EXISTS train_data
(
    param1 Float64,
    param2 Float64,
    target Float64
) ENGINE = Memory;

CREATE TABLE your_model ENGINE = Memory AS SELECT
stochasticLogisticRegression(0.1, 0.0, 5, 'SGD')(target, x1, x2)
AS state FROM train_data;

这里,我们还需要将数据插入 train_data 表。 参数数量不固定,仅取决于传入 logisticRegressionState 的参数个数。 所有参数都必须是数值类型。 注意,包含目标值(即我们要预测的值)的列需要作为第一个参数插入。

预测标签必须在 [-1, 1] 区间内。

  1. 预测

使用保存的状态,可以预测对象具有标签 1 的概率。

WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, param1, param2) FROM test_data

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

我们还可以设置概率界限,从而将元素分配到不同的标签。

SELECT result < 1.1 AND result > 0.5 FROM
(WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, param1, param2) AS result FROM test_data)

那么结果将是标签。

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

语法

stochasticLogisticRegression([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 需要更多的计算和内存开销,但在随机梯度方法的收敛速度和稳定性方面往往更有优势。String
  • target — 二分类目标标签。取值必须位于区间 [-1, 1] 内。Float
  • x1, x2, ... — 特征值(自变量)。全部必须为数值类型。Float

返回值

返回训练后的逻辑回归模型权重。使用 evalMLMethod 进行预测,该函数返回对象标签为 1 的概率。Array(Float64)

示例

训练模型

CREATE TABLE your_model
ENGINE = MergeTree
ORDER BY tuple()
AS SELECT
stochasticLogisticRegressionState(1.0, 1.0, 10, '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 probability values for test data

基于阈值的分类

SELECT result < 1.1 AND result > 0.5
FROM (
WITH (SELECT state FROM your_model) AS model SELECT
evalMLMethod(model, x1, x2) AS result FROM test_data)
Returns binary classification labels using probability threshold

另请参阅