news 2026/4/16 12:12:39

Flink ML Logistic Regression 离线训练 + 在线增量训练(FTRL-Proximal)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flink ML Logistic Regression 离线训练 + 在线增量训练(FTRL-Proximal)

一、Logistic Regression(离线训练版)

1)算法定位

离线逻辑回归主要用于:

  • 训练数据是有限集(批数据/有界流)
  • 训练过程跑若干轮迭代直到收敛(或达到 maxIter)
  • 输出一个稳定模型,用于批预测或在线推理

2)输入列(Input Columns)

参数名类型默认值说明
featuresColVector"features"特征向量
labelColInteger"label"标签(要预测的类别)
weightColDouble"weight"样本权重(可选)

3)输出列(Output Columns)

参数名类型默认值说明
predictionColInteger"prediction"预测标签(最大概率对应的类别)
rawPredictionColVector"rawPrediction"各类别的概率/得分向量(实现里通常可视为概率向量)

工程理解建议:

  • rawPrediction用于你想做阈值/排序/AB 实验对比的场景
  • prediction用于直接落库打标签、下游业务消费

4)核心参数(Parameters)

LogisticRegressionModel(预测侧)
Key默认值类型说明
featuresCol"features"String特征列名
predictionCol"prediction"String输出预测列名
rawPredictionCol"rawPrediction"String输出原始预测列名
LogisticRegression(训练侧)
Key默认值类型说明
labelCol"label"String标签列名
weightColnullString权重列名
maxIter20Integer最大迭代次数
reg0.0Double正则化强度
elasticNet0.0DoubleElasticNet:0=L2,1=L1,介于其中混合
learningRate0.1Double学习率
globalBatchSize32Integer全局 batch size
tol1e-6Double收敛阈值
multiClass"auto"String分类类型:auto/binomial/multinomial

5)Java 示例代码解读(离线 LR)

你贴的示例核心流程:

  1. 造数据features + label + weight
  2. lr.fit(inputTable)得到lrModel
  3. lrModel.transform(inputTable)得到prediction/rawPrediction
  4. collect 打印结果
小坑提醒:label 类型

文档写labelColInteger,但示例里 label 用0./1.(Double),并且 prediction 也按 Double 取。

工程建议:统一 label 为 Integer(0/1)更稳,避免 schema 与类型转换踩坑。

二、OnlineLogisticRegression:在线增量训练(FTRL-Proximal)

1)为什么需要 Online Logistic Regression?

离线 LR 的问题是:模型训练一次就固定了。
如果你的数据是持续到来的(比如广告点击、风控交易、推荐曝光),你希望模型能“边来数据边更新”,这就需要在线学习能力。

OnlineLogisticRegression 的特点:

  • 训练数据是无界流
  • 按 mini-batch 策略聚合训练样本
  • 持续更新内部模型参数
  • 同一份预测数据在不同时间点预测结果可能会变化(因为模型在变)

官方说明里提到:在线优化器使用FTRL-Proximal(常用于广告 CTR 预估等大规模稀疏特征场景)。

2)输入列(Input Columns)

参数名类型默认值说明
featuresColVector"features"特征向量
labelColInteger"label"标签
weightColDouble"weight"样本权重(可选)

3)输出列(Output Columns)

参数名类型默认值说明
predictionColInteger"prediction"预测标签
rawPredictionColVector"rawPrediction"原始预测向量
modelVersionColLong"modelVersion"本次预测使用的模型版本号

modelVersionCol是在线模型非常关键的字段:
它能让你追溯“这条预测结果是用哪个版本的模型算出来的”,对排障和效果分析很重要。

4)核心参数(Parameters)

OnlineLogisticRegressionModel(预测侧)

| Key | 默认值 | 类型 | 说明 |
|—|—|—|
|featuresCol|"features"| String | 特征列名 |
|predictionCol|"prediction"| String | 预测列名 |
|rawPredictionCol|"rawPrediction"| String | 原始预测列名 |
|modelVersionCol|"modelVersion"| String | 模型版本列名 |

OnlineLogisticRegression(训练侧)
Key默认值类型说明
labelCol"label"String标签列名
weightColnullString权重列名
batchStrategyCOUNT_STRATEGYStringmini-batch 策略
globalBatchSize32Integer全局 batch size
reg0.0Double正则
elasticNet0.0DoubleElasticNet 参数

在线版参数相对离线版少一些,核心是 batch 策略 + 正则化。

5)Java 示例代码解读(在线 OLR)

你贴的在线示例非常典型,关键点有三个:

(1)训练流与预测流都是“周期性无限流”

示例用PeriodicSourceFunction每隔一段时间吐一批数据,目的是持续触发:

  • 训练数据 → 模型更新
  • 预测数据 → 输出预测结果

这在本地 demo 中非常方便观察效果变化。

(2)训练表和预测表都只用 features 列

代码里:

TabletrainTable=tEnv.fromDataStream(trainStream).as("features");TablepredictTable=tEnv.fromDataStream(predictStream).as("features");

但注意:OnlineLogisticRegression又设置了.setLabelCol("label")
这意味着:真实训练时你通常需要把 label 列也放进表里(示例中可能依赖内部实现/或是简化展示)。工程实践里建议你显式包含 label 字段,避免歧义:

  • 训练表:features + label (+ weight)
  • 预测表:features (+ label 作为对照可选)
(3)初始模型数据 initialModelData

在线模型需要一个初始参数,否则一开始没法预测/更新。示例里:

RowinitModelData=Row.of(Vectors.dense(...),0L);TableinitModelDataTable=...olr.setInitialModelData(initModelDataTable);

这就相当于给在线 LR 一个初始权重向量 + 初始版本号。

三、离线 LR vs 在线 OLR:怎么选?

选离线 LogisticRegression 的典型场景

  • 训练数据每天/每小时批量汇总一次
  • 你希望模型相对稳定,便于发布与回滚
  • 线上推理只做 transform,不希望训练逻辑影响业务延迟

选 OnlineLogisticRegression 的典型场景

  • 数据持续流入,分布变化快(概念漂移)
  • 你希望模型持续学习最新数据
  • 你需要模型版本字段做线上分析/回溯(modelVersion)

四、实战建议(非常重要)

1)特征缩放与稀疏特征

  • 如果特征尺度差异大,离线 LR 建议加 StandardScaler
  • 在线 OLR(FTRL)更适合稀疏特征,但也要注意特征工程一致性

2)样本不均衡优先用 weightCol

尤其是点击率、欺诈等任务,正负样本极不均衡时,权重往往比盲目调参更有效。

3)关注 rawPrediction 与阈值策略

离线/在线都会输出 rawPrediction。生产里很多业务不是直接用prediction,而是:

  • 按概率阈值做策略(如 p>0.7 才算命中)
  • 或把 rawPrediction 作为排序分(用于推荐/广告排序)

4)在线模型一定要保留 modelVersion

这对排障、回溯、效果分析非常关键。建议把modelVersion一起落库或写 Kafka/ES。

五、小结

Flink ML 的 Logistic Regression 体系可以覆盖两类最常见的工业场景:

  • LogisticRegression(离线):可控、稳定、适合定期训练发布
  • OnlineLogisticRegression(在线,FTRL):持续学习、适合数据流实时变化的业务

掌握输入输出列、参数含义、以及模型版本与 rawPrediction 的用法,你就能把 LR 很自然地接进 Flink 的实时/离线链路中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 13:58:24

YOLOv8 vs YOLOv9:精度与速度的博弈,谁更适合工业部署?

YOLOv8 vs YOLOv9:精度与速度的博弈,谁更适合工业部署? 在现代智能制造产线中,一个微小划痕可能意味着整批产品被召回。如何让机器“看”得既快又准?这正是目标检测技术的核心挑战。YOLO系列自诞生以来,始终…

作者头像 李华
网站建设 2026/4/13 10:36:07

计算机毕业设计,基于springboot的学生宿舍信息管理系统,附源码+数据库+论文,包远程安装调试运行

1、项目介绍 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了学生宿舍信息管理系统的开发全过程。通过分析学生宿舍信息管理系统管理的不足,创建了一个计算机管理学生宿舍信息管理系统的方案。文章介绍了…

作者头像 李华
网站建设 2026/4/8 17:46:55

Python工程師年薪從80萬到300萬:我掌握的10個高階技能清單

Python工程師年薪從80萬到300萬:我掌握的10個高階技能清單引言:從代碼工匠到技術決策者還記得五年前,當我拿到第一個80萬年薪Python工程師offer時的興奮。那時我以為自己已經達到了職業生涯的頂峰——熟練掌握Django、Flask,能獨立…

作者头像 李华
网站建设 2026/4/11 7:24:59

YOLO目标检测Web Demo上线!后台由GPU实时驱动

YOLO目标检测Web Demo上线!后台由GPU实时驱动 在智能视觉应用日益普及的今天,用户对“即时反馈”的期待正不断推高技术门槛。无论是上传一张图片想立刻知道里面有什么物体,还是希望在监控画面中实时识别异常行为,背后都离不开一个…

作者头像 李华
网站建设 2026/4/11 14:16:34

YOLOv7-E6E发布!更大颈部结构但GPU内存控制得当

YOLOv7-E6E:更大颈部结构,更强特征融合,更优显存控制 在智能制造产线高速运转的今天,一个微小焊点的漏检可能引发整批产品的召回;在城市级视频监控系统中,一次对远距离行人的误判可能导致安防响应滞后。这些…

作者头像 李华
网站建设 2026/4/13 15:24:25

健康的关系不是单方面索取:想要别人爱你,要先学会爱自己,让别人知道你并不是一个缺爱的人,他才会更爱你

健康的关系不是单方面索取:想要别人爱你,要先学会爱自己,让别人知道你并不是一个缺爱的人,他才会更爱你 下载链接: https://download.csdn.net/download/qq_38998213/92508853目录 健康的关系不是单方面索取:想要别人爱你,要先学会爱自己,让别人知道你并不是一个缺爱…

作者头像 李华