做搜索网站挣钱欢迎访问建设银行网站
2026/1/5 21:28:09 网站建设 项目流程
做搜索网站挣钱,欢迎访问建设银行网站,设计托管网站建设,网站建设phpstudy1. VectorAssembler 做什么#xff1f; 给定一组输入列 inputCols#xff08;每列类型必须是 数值 或 Vector#xff09;#xff0c;把它们按顺序组合成一个新向量列 outputCol#xff1a;输入可以混合#xff1a; 单个数值列#xff08;Number#xff09;DenseVector …1. VectorAssembler 做什么给定一组输入列inputCols每列类型必须是数值或Vector把它们按顺序组合成一个新向量列outputCol输入可以混合单个数值列NumberDenseVector / SparseVectorVector输出是一个 Vector通常是稠密或稀疏表示取决于内部实现与输入组合典型用途StringIndexer - OneHotEncoder - VectorAssembler - LogisticRegression数值特征 one-hot 稀疏特征 embedding 向量 - VectorAssembler - 模型2. 输入列与输出列输入列Input Columns参数名类型默认值说明inputColsNumber / Vectornull待拼接的列可多列输出列Output Columns参数名类型默认值说明outputColVectoroutput拼接后的向量列3. 参数详解ParametersKey默认值必填说明inputColsnull✅输入列名数组顺序很重要outputColoutput否输出列名handleInvalidERROR_INVALID否遇到非法值如何处理如空值/类型不对等工程建议inputCols的顺序决定最终向量的维度排列一旦上线最好固定否则训练/预测会对不上。4. Java 示例逐段解读示例里把三列拼成一列vecDenseVector(2.1, 3.1)长度 2num数值 1.0长度 1sparseVecSparseVector(size5, …)长度 5最终拼出来的向量长度应该是2 1 5 84.1 输入数据DataStreamRowinputStreamenv.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})));TableinputTabletEnv.fromDataStream(inputStream).as(vec,num,sparseVec);这里sparseVec的 size5意味着它代表长度为 5 的向量只不过用稀疏方式存储非零位置。4.2 创建 VectorAssemblerVectorAssemblervectorAssemblernewVectorAssembler().setInputCols(vec,num,sparseVec).setOutputCol(assembledVec);拼接顺序就是vec在前num在中间sparseVec在最后。最终向量的 layout 可以理解为assembledVec [ vec(2 dims) | num(1 dim) | sparseVec(5 dims) ]4.3 transform 并读取输出TableoutputTablevectorAssembler.transform(inputTable)[0];VectoroutputValue(Vector)row.getField(vectorAssembler.getOutputCol());System.out.printf(... Output Value: %s\n,outputValue);输出 Value 会是一个 Vector可能打印成 dense 或 sparse内容会把三列的信息组合到同一个向量里。5. 实战注意点很关键1OneHotEncoder 输出通常是 SparseVectorAssembler 非常适配这也是最常见链路StringIndexercity - cityIndexOneHotEncodercityIndex - cityVec (SparseVector)VectorAssembler[数值列, cityVec, 其它Vec] - featuresLogisticRegressionfeatures - prediction2数值列不要忘记类型一致性你的示例里num是 Double1.0。实际表里可能是 INT/LONG/FLOAT建议统一成 Double 或确保能被识别为 Number。3维度稳定性是上线生命线如果你在训练时inputCols[age,cityVec,deviceVec]上线推理千万不要换成[cityVec,age,deviceVec]否则模型输入维度语义全错。4handleInvalid 的选择离线训练可以ERROR_INVALID让问题暴露线上更倾向“先做清洗”或者用能跳过/替代的策略如果支持避免任务被脏数据打挂6. 小结VectorAssembler 是 Flink ML 里把“多列特征形态”统一成features向量列的关键组件支持 Number Vector 混合拼接inputCols顺序决定最终向量维度布局常用于把 one-hot、embedding、数值特征拼成一个 features 列喂给模型

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询