news 2026/6/10 14:14:57

Flink ML Naive Bayes 多分类朴素贝叶斯

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flink ML Naive Bayes 多分类朴素贝叶斯

1. 输入列与输出列

输入列(Input Columns)

参数名类型默认值说明
featuresColVector"features"特征向量列
labelColInteger"label"标签列(要预测的类别)

输出列(Output Columns)

参数名类型默认值说明
predictionColInteger"prediction"预测标签

2. 参数(Parameters)详解

2.1 NaiveBayesModel(预测侧)参数

Key默认值类型说明
modelType"multinomial"String模型类型(目前支持 multinomial)
featuresCol"features"String特征列名
predictionCol"prediction"String预测列名

2.2 NaiveBayes(训练侧)额外参数

Key默认值类型说明
labelCol"label"String标签列名
smoothing1.0Double平滑参数(拉普拉斯平滑,避免零概率)
smoothing 是干什么的?

在 multinomial 朴素贝叶斯里,经常会遇到某类样本中某个特征从未出现过的情况,这会导致该条件概率为 0,从而让整个后验概率变成 0。
smoothing的作用就是避免这种“零概率”问题,让模型更稳健。

工程上:

  • 1.0是最常见的默认选择
  • 数据稀疏、类别较多时,适当提高 smoothing 往往更稳定

3. Java 示例代码解读

你贴的示例逻辑非常标准,分四步:

1)构造训练数据(features, label)
2)构造预测数据(features)
3)创建 NaiveBayes 并设置参数
4)fit 训练模型 → transform 预测 → collect 打印结果

3.1 训练数据

DataStream<Row>trainStream=env.fromElements(Row.of(Vectors.dense(0,0.),11),Row.of(Vectors.dense(1,0),10),Row.of(Vectors.dense(1,1.),10));TabletrainTable=tEnv.fromDataStream(trainStream).as("features","label");

这里的标签是1011(多分类不一定要从 0 开始),特征向量是 2 维。

3.2 预测数据

DataStream<Row>predictStream=env.fromElements(Row.of(Vectors.dense(0,1.)),Row.of(Vectors.dense(0,0.)),Row.of(Vectors.dense(1,0)),Row.of(Vectors.dense(1,1.)));TablepredictTable=tEnv.fromDataStream(predictStream).as("features");

预测表只有 features 列,符合朴素贝叶斯的推理输入。

3.3 创建与训练

NaiveBayesnaiveBayes=newNaiveBayes().setSmoothing(1.0).setFeaturesCol("features").setLabelCol("label").setPredictionCol("prediction").setModelType("multinomial");NaiveBayesModelnaiveBayesModel=naiveBayes.fit(trainTable);

3.4 预测输出

TableoutputTable=naiveBayesModel.transform(predictTable)[0];

输出表会新增prediction列。

4. 一个小坑:prediction 类型读取

文档定义predictionColInteger,但示例中用:

doublepredictionResult=(Double)row.getField(naiveBayes.getPredictionCol());

这容易让人误会 prediction 是 Double。更稳的写法是按 Integer 读取:

Integerprediction=(Integer)row.getField(naiveBayes.getPredictionCol());

建议你在工程里把 label 与 prediction 都保持 Integer 类型,减少类型转换问题。

5. multinomial 朴素贝叶斯的“工程适配”建议

1)multinomial 更适合“计数/频次类特征”

multinomial Naive Bayes 常见于:

  • 词袋计数(word counts)
  • TF/TF-IDF(有时也用,但严格上更像连续值,需要注意分布假设)
  • 事件次数、出现频次等离散统计特征

如果你的 features 是非常连续的实数(如温度、金额、时长),multinomial 的假设可能不够贴合,效果未必好。此时你可以考虑:

  • 先做分桶(binning)
  • 或选择 Logistic Regression / LinearSVC 等线性模型

2)特征必须非负更稳

multinomial 模型通常假设特征类似“出现次数/频次”,因此:

  • 负数特征会让概率解释变得很奇怪
  • 工程上建议保证 features >= 0(或做平移/分桶)

3)smoothing 的调参思路

  • 类别多、数据稀疏:smoothing 可以适当大一些
  • 数据充足:smoothing=1.0 往往足够

6. 总结

Flink ML 的 Naive Bayes 非常适合做多分类 baseline,尤其在文本/稀疏特征场景下优势明显:

  • 输入:features(Vector)+label(Integer)
  • 输出:prediction(Integer)
  • 关键参数:modelType=multinomialsmoothing平滑避免零概率
  • 用法:fit()训练 →transform()预测,完全遵循 Flink ML 的 Table API 体系
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 20:55:08

YOLOv7升级到YOLOv10,模型性能提升,Token消耗如何优化?

YOLOv7升级到YOLOv10&#xff0c;模型性能提升&#xff0c;Token消耗如何优化&#xff1f; 在工业质检、自动驾驶和智能安防等实时视觉系统中&#xff0c;目标检测的响应速度与资源效率正变得比以往任何时候都更加关键。尽管YOLO系列一直以“快而准”著称&#xff0c;但随着边缘…

作者头像 李华
网站建设 2026/6/10 13:43:11

YOLOv10-NMS-Free发布!无非极大抑制,GPU后处理革新

YOLOv10-NMS-Free&#xff1a;无NMS的端到端目标检测新范式 在工业视觉系统日益追求低延迟、高吞吐的今天&#xff0c;一个看似微小的技术环节——非极大值抑制&#xff08;NMS&#xff09;&#xff0c;正成为制约性能提升的“隐形瓶颈”。尽管YOLO系列以实时性著称&#xff0c…

作者头像 李华
网站建设 2026/6/10 0:38:54

YOLO模型云端部署指南:如何高效调用大模型Token资源?

YOLO模型云端部署指南&#xff1a;如何高效调用大模型Token资源&#xff1f; 在智能摄像头遍布城市角落的今天&#xff0c;一场关于“实时性”与“稳定性”的技术博弈正在云服务器集群中悄然上演。一个看似简单的道路监控画面上传请求背后&#xff0c;可能正牵动着GPU显存、推…

作者头像 李华
网站建设 2026/6/10 11:25:55

YOLO目标检测服务支持SSE事件流,GPU处理进度实时通知

YOLO目标检测服务支持SSE事件流&#xff0c;GPU处理进度实时通知 在一条自动化产线的视觉质检系统中&#xff0c;工程师点击“开始检测”后&#xff0c;屏幕上却只显示一个转圈图标——整整三分钟没有反馈。是模型卡住了&#xff1f;GPU过热了&#xff1f;还是任务早已完成但前…

作者头像 李华
网站建设 2026/6/10 11:22:42

小费的边界:为何有些服务要给小费,有些却不用?

小费的边界&#xff1a;为何有些服务要给小费&#xff0c;有些却不用&#xff1f;在不同的服务场景中&#xff0c;我们常常面临这样的困惑&#xff1a;同样是接受服务&#xff0c;餐厅就餐、酒店住宿时可能需要给小费&#xff0c;而超市收银、快递取件时却无需如此。在不少无需…

作者头像 李华
网站建设 2026/6/9 22:21:35

团队薪资的“反效率”之谜:为何低效者超得、高效者不及?

团队薪资的“反效率”之谜&#xff1a;为何低效者超得、高效者不及&#xff1f;在同一公司的同一工作小组中&#xff0c;存在一种看似违背“多劳多得”常识的现象&#xff1a;生产效率最低的员工&#xff0c;收入往往高于自身创造的价值&#xff1b;而生产效率最高的员工&#…

作者头像 李华