news 2026/5/1 10:19:14

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/4/15 6:46:24

斐波那契数列完全解析:从数学原理到算法实现

斐波那契数列完全解析&#xff1a;从数学原理到算法实现一、什么是斐波那契数列&#xff1f;1.1 历史背景1.2 数学定义1.3 数列示例二、斐波那契数列的生成过程&#xff08;动图演示&#xff09;2.1 可视化生成过程2.2 几何表示&#xff08;黄金螺旋&#xff09;三、递归算法实…

作者头像 李华
网站建设 2026/5/1 7:05:59

YOLO模型镜像集成Airflow,GPU任务编排自动化

YOLO模型镜像集成Airflow&#xff0c;GPU任务编排自动化 在智能制造、智慧交通和智能安防等场景中&#xff0c;每天都有成千上万小时的视频流需要分析。传统的人工监控方式早已不堪重负&#xff0c;而AI驱动的目标检测技术正成为破局关键。但问题也随之而来&#xff1a;如何让…

作者头像 李华
网站建设 2026/4/30 9:48:30

什么才是真正的:不会花钱就不会赚钱 ,你怎么理解的

什么才是真正的:不会花钱就不会赚钱 ,你怎么理解的 下载链接: https://download.csdn.net/download/qq_38998213/92508853目录 什么才是真正的:不会花钱就不会赚钱 ,你怎么理解的 不会花钱的人财运不会太好:赚钱体现的是能力,花钱体现的是认知,花钱不是单纯的消费,花…

作者头像 李华
网站建设 2026/5/1 8:34:49

【参数估计】基于扩展卡尔曼滤波器(EKF)和无香味卡尔曼滤波器(UKF)确估计定数据集的模型的状态和参数附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿…

作者头像 李华
网站建设 2026/5/1 7:32:03

YOLO开源但算力昂贵?我们提供一站式GPU+Token解决方案

YOLO开源但算力昂贵&#xff1f;我们提供一站式GPUToken解决方案 在智能制造车间里&#xff0c;一条视觉检测流水线正以每分钟200帧的速度扫描产品表面缺陷&#xff1b;城市交通指挥中心的大屏上&#xff0c;数十路摄像头实时识别违章车辆&#xff1b;无人机在电力巡检中自主定…

作者头像 李华