apache-spark - 使用 Apache Spark ML,您如何转换(用于预测)没有标签的数据集?
问题描述
我确信我在理解 Spark ML 的管道方面存在差距。
我有一个针对一组数据进行训练的管道,其架构为“标签”、“评论”(两个字符串)。我的管道转换“标签”,添加“indexedLabel”,并通过标记化“评论”,然后HashingTF
(以“vectorizedComment”结尾)管道LogisticRegression
以标签列“indexedLabel”和特征列“vectorizedComment”结束。
而且效果很好!我可以适应我的管道并获得一个管道模型,它可以整天转换带有“标签”、“评论”的数据集!但是,我的目标是能够抛出仅包含“评论”的数据集,因为“标签”仅用于训练模型目的。
我相信我在理解管道预测的工作原理方面存在差距 - 有人可以为我指出吗?
解决方案
标签的转换可以在管道之外(即之前)完成。该标签仅在训练期间是必需的,而不是在管道/模型的实际使用期间。通过在管道中执行标签转换,任何数据帧都需要有一个不需要的标签列。
小例子:
val indexer = new StringIndexer()
.setInputCol("label")
.setOutputCol("indexedLabel")
val df2 = indexer.fit(df).transform(df)
// Create pipeline with other stages and use df2 to fit it
或者,您可以有两个单独的管道。一种包括在训练期间使用的标签转换,另一种则没有。确保其他阶段在两个管道中引用相同的对象。
val indexer = new StringIndexer()
.setInputCol("label")
.setOutputCol("indexedLabel")
// Create feature transformers and add to the pipelines
val pipelineTraining = new Pipeline().setStages(Array(indexer, ...))
val pipelineUsage = new Pipeline().setStages(Array(...))
推荐阅读
- html - Leaflet sidebar-v2 - 在移动设备上不浮动显示
- haskell - Hamlet 模板中的紧凑 if-then-else
- spring-webflux - 读取 Part Flux 时传递状态
- android - 切换按钮在第二次点击时起作用 - Android
- c# - 除了满足条件的行,如何对 DataTable 进行排序?
- julia - Julia:使用“抽象类型”编写类型的联合
- css - css 网格属性值无效
- qt - 在 QQmlComponent::beginCreate() 之后向 QML 对象添加属性
- c# - 反序列化 XML。捕捉错误?
- java - 使用 gradle 在 Eclipse 中更新外部 jar 时出现问题