当前位置: 首页 > news >正文

Flink ML VectorAssembler 把多列特征“拼”成一个向量列(数值 + 向量都支持)

1. VectorAssembler 做什么?

给定一组输入列inputCols(每列类型必须是数值Vector),把它们按顺序组合成一个新向量列outputCol

  • 输入可以混合:

    • 单个数值列(Number)
    • DenseVector / SparseVector(Vector)
  • 输出是一个 Vector(通常是稠密或稀疏表示,取决于内部实现与输入组合)

典型用途:

  • StringIndexer -> OneHotEncoder -> VectorAssembler -> LogisticRegression
  • 数值特征 + one-hot 稀疏特征 + embedding 向量 -> VectorAssembler -> 模型

2. 输入列与输出列

输入列(Input Columns)

参数名类型默认值说明
inputColsNumber / Vectornull待拼接的列(可多列)

输出列(Output Columns)

参数名类型默认值说明
outputColVector"output"拼接后的向量列

3. 参数详解(Parameters)

Key默认值必填说明
inputColsnull输入列名数组(顺序很重要)
outputCol"output"输出列名
handleInvalidERROR_INVALID遇到非法值如何处理(如空值/类型不对等)

工程建议:

  • inputCols的顺序决定最终向量的维度排列,一旦上线最好固定,否则训练/预测会对不上。

4. Java 示例逐段解读

示例里把三列拼成一列:

  • vec:DenseVector(2.1, 3.1)(长度 2)
  • num:数值 1.0(长度 1)
  • sparseVec:SparseVector(size=5, …)(长度 5)

最终拼出来的向量长度应该是:2 + 1 + 5 = 8

4.1 输入数据

DataStream<Row>inputStream=env.fromElements(Row.of(Vectors.dense(2.1,3.1),1.0,Vectors.sparse(5,newint[]{3},newdouble[]{1.0})),Row.of(Vectors.dense(2.1,3.1),1.0,Vectors.sparse(5,newint[]{4,2,3,1},newdouble[]{4.0,2.0,3.0,1.0})));TableinputTable=tEnv.fromDataStream(inputStream).as("vec","num","sparseVec");

这里sparseVec的 size=5,意味着它代表长度为 5 的向量,只不过用稀疏方式存储非零位置。

4.2 创建 VectorAssembler

VectorAssemblervectorAssembler=newVectorAssembler().setInputCols("vec","num","sparseVec").setOutputCol("assembledVec");

拼接顺序就是:vec在前,num在中间,sparseVec在最后。
最终向量的 layout 可以理解为:

assembledVec = [ vec(2 dims) | num(1 dim) | sparseVec(5 dims) ]

4.3 transform 并读取输出

TableoutputTable=vectorAssembler.transform(inputTable)[0];VectoroutputValue=(Vector)row.getField(vectorAssembler.getOutputCol());System.out.printf("... Output Value: %s\n",outputValue);

输出 Value 会是一个 Vector(可能打印成 dense 或 sparse),内容会把三列的信息组合到同一个向量里。

5. 实战注意点(很关键)

1)OneHotEncoder 输出通常是 SparseVector,Assembler 非常适配

这也是最常见链路:

  • StringIndexer:city -> cityIndex
  • OneHotEncoder:cityIndex -> cityVec (SparseVector)
  • VectorAssembler:[数值列, cityVec, 其它Vec] -> features
  • LogisticRegression:features -> prediction

2)数值列不要忘记类型一致性

你的示例里num是 Double(1.0)。实际表里可能是 INT/LONG/FLOAT,建议统一成 Double 或确保能被识别为 Number。

3)维度稳定性是上线生命线

如果你在训练时inputCols=["age","cityVec","deviceVec"],上线推理千万不要换成["cityVec","age","deviceVec"],否则模型输入维度语义全错。

4)handleInvalid 的选择

  • 离线训练:可以ERROR_INVALID让问题暴露
  • 线上:更倾向“先做清洗”,或者用能跳过/替代的策略(如果支持),避免任务被脏数据打挂

6. 小结

VectorAssembler 是 Flink ML 里把“多列特征形态”统一成features向量列的关键组件:

  • 支持 Number + Vector 混合拼接
  • inputCols顺序决定最终向量维度布局
  • 常用于把 one-hot、embedding、数值特征拼成一个 features 列喂给模型
http://www.zskr.cn/news/177634.html

相关文章:

  • XUnity自动翻译器:Unity游戏汉化的终极解决方案
  • OceanBase 数据库 TPCH ACID 测试
  • PyTorch-CUDA-v2.8镜像环境变量配置说明
  • 2025年终四川用友公司推荐:聚焦本地化案例的5强口碑榜单深度解析。 - 十大品牌推荐
  • PyTorch环境配置耗时几小时?现在只需5分钟启动镜像
  • PyTorch镜像中实现模型剪枝与稀疏化操作
  • PyTorch镜像运行AutoML任务:自动化超参搜索实战
  • PyTorch-CUDA-v2.8镜像是否预装ray?分布式计算支持
  • PyTorch-CUDA-v2.8镜像支持哪些NVIDIA显卡型号?
  • COOFDM的Matlab仿真程序详解:从代码实现到理论解析的综合指南
  • ViGEmBus虚拟游戏手柄驱动:让所有手柄在PC上畅玩游戏的终极指南
  • PyTorch镜像中如何设置定时任务?crontab使用教程
  • 综合能源系统优化运行规划:基于光热电站的MATLAB+Cplex实现,以最小化运行成本为目标函数
  • GEO优化实操指南:从SEO到AI搜索可见性的演进
  • 2025年终理财开户券商推荐:聚焦智能交易与投顾服务的5强深度解析。 - 十大品牌推荐
  • Hyperchain动态分片与分布式ID生成算法实现
  • 在算法黑箱与非线性增长中,工程师如何培养“系统二阶思维”破局 35 岁危机
  • 蛇优化算法(SO)优化KNN分类预测,代码包括SO-KNN和基础KNN的对比——可改为其他优化...
  • 2025年终理财开户券商推荐:用户评价与差异化优势双维度实测TOP5。 - 十大品牌推荐
  • 最近在折腾视频动作识别的小项目,发现HOG特征和LSTM这对组合有点意思。咱们先不整那些复杂的理论,直接上手看看怎么用MATLAB把这两个玩意儿凑一块儿干活
  • 基于COMSOL模拟的双重介质注浆模型研究:浆液在裂隙与多孔介质中的流动与扩散特性分析
  • 2025年终理财开户券商推荐:TOP5排名揭晓,基于用户口碑与多维度实测。 - 十大品牌推荐
  • 最近在折腾一个传感器信号处理的项目,发现原始数据里总有些低频干扰挥之不去。得嘞,撸起袖子给STM32整了个FIR高通滤波器。咱不整那些虚的,直接上干货
  • 2025钢结构防火涂料厂家市场报告:行业格局、技术趋势与全屋卫士竞争力分析 - 品牌企业推荐师(官方)
  • PyTorch镜像如何实现多版本共存?标签管理技巧
  • PyTorch镜像运行分布式训练:DDP模式配置教程
  • 双指针刷题总结
  • 早上八点的电费涨到一块二了,家里的洗衣机还在嗡嗡转。我瘫在沙发上刷着电费账单,突然意识到这年头连用个电都得玩策略游戏——分时电价这玩意儿简直比股票K线图还刺激
  • cnn特征图可视化方法:在PyTorch-CUDA-v2.8中绘制中间层输出
  • 最近在研究磁耦合谐振式无线电能传输,发现相控电容式补偿方法挺有意思的。今天就来聊聊这个,顺便用Simulink仿真一下,看看效果如何