造型设计网站推荐,网站优化建议怎么写,2023网站推广入口,上市公司网站建设1. OneHotEncoder 做什么#xff1f;
One-hot 编码把一个类别索引#xff08;例如 2#xff09;映射成一个向量#xff1a;
类别集合大小为 N输出向量长度为 N#xff08;或 N-1#xff0c;取决于 dropLast#xff09;只有对应类别的位置为 1#xff0c;其余为 0Flink …1. OneHotEncoder 做什么One-hot 编码把一个类别索引例如 2映射成一个向量类别集合大小为 N输出向量长度为 N或 N-1取决于 dropLast只有对应类别的位置为 1其余为 0Flink ML 输出一般是SparseVector稀疏向量更节省内存举个例子假设类别数 30/1/2输入 0 → [1,0,0]输入 1 → [0,1,0]输入 2 → [0,0,1]如果dropLasttrue默认只输出前 N-1 个维度最后一个类别被“隐式表示”全 0输入 2最后类→ [0,0]长度为 2 的全 0 向量这叫“去掉冗余维度”常用于线性模型防止共线性dummy variable trap。2. 输入列与输出列输入列Input Columns参数名类型默认值说明inputColsIntegernull类别索引列可多列输出列Output Columns参数名类型默认值说明outputColsVectornullone-hot 后的向量列可多列3. 参数Parameters详解Key默认值必填说明inputColsnull✅输入列名数组outputColsnull✅输出列名数组handleInvalidERROR_INVALID否遇到非法值如何处理ERROR_INVALID/SKIP_INVALIDdropLasttrue否是否丢弃最后一类输出维度减少 13.1 dropLast 该怎么选dropLasttrue默认更适合 LR 这类线性模型避免多重共线性也省一维dropLastfalse适合你希望保留完整可解释 one-hot比如下游做统计、可视化、或者某些非线性模型也无所谓3.2 handleInvalid 的工程意义ERROR_INVALID脏数据直接失败更严格SKIP_INVALID跳过包含非法类别索引的行更稳线上更常见4. Java 示例代码解读fit transform你贴的示例非常标准先用训练数据拟合出类别空间决定 one-hot 维度再对预测数据输出 one-hot 向量。4.1 训练数据决定类别数DataStreamRowtrainStreamenv.fromElements(Row.of(0.0),Row.of(1.0),Row.of(2.0),Row.of(0.0));TabletrainTabletEnv.fromDataStream(trainStream).as(input);训练集出现了 0/1/2 三个类别所以类别数 N3。若 dropLasttrue输出维度 2若 dropLastfalse输出维度 3。4.2 预测数据做编码DataStreamRowpredictStreamenv.fromElements(Row.of(0.0),Row.of(1.0),Row.of(2.0));TablepredictTabletEnv.fromDataStream(predictStream).as(input);4.3 创建 OneHotEncoder 并训练/预测OneHotEncoderoneHotEncodernewOneHotEncoder().setInputCols(input).setOutputCols(output);OneHotEncoderModelmodeloneHotEncoder.fit(trainTable);TableoutputTablemodel.transform(predictTable)[0];4.4 输出读取SparseVectorDoubleinputValue(Double)row.getField(oneHotEncoder.getInputCols()[0]);SparseVectoroutputValue(SparseVector)row.getField(oneHotEncoder.getOutputCols()[0]);System.out.printf(Input Value: %s\tOutput Value: %s\n,inputValue,outputValue);输出是 SparseVector典型打印可能类似input0 → (size2, indices[0], values[1.0])input1 → (size2, indices[1], values[1.0])input2 → (size2, indices[], values[]) 当 dropLasttrue 时5. 实战用法OneHotEncoder 常见组合链路组合 1Bucketizer → OneHotEncoder → LogisticRegression连续特征先分桶再 one-hot是 CTR/风控等场景的经典套路Bucketizer 把连续数值映射到桶索引离散OneHotEncoder 把桶索引变成稀疏向量LR 用稀疏向量训练分类模型组合 2离散类别索引LabelEncoder→ OneHotEncoder如果原始是字符串类别比如 “Beijing”/“Shanghai”通常流程是先用编码器把字符串映射成 index0/1/2/…再 OneHotEncoder 变成向量6. 注意事项很容易踩坑1训练集类别空间决定输出维度预测时出现训练集中没见过的类别如果 handleInvalidERROR_INVALID 可能会直接失败。线上更建议提前统一类别字典或使用 SKIP_INVALID并监控跳过比例2输入列类型要统一文档说 inputCols 是 Integer但示例用 Double0.0/1.0/2.0。工程里建议你用 Integer/Long 更清晰减少类型转换风险。3dropLast 的影响要明确dropLasttrue 时最后一类会被编码成全 0 向量这在调试/可解释性上容易误解看起来像“缺失”所以如果你更强调解释可考虑 dropLastfalse。7. 小结OneHotEncoder 是 Flink ML 特征工程里最常用的离散特征转换器之一输入一个或多个类别索引列输出每列对应一个 one-hot 稀疏向量列dropLast控制是否减少一个维度默认 truehandleInvalid控制脏数据处理策略线上建议更稳的策略