【发布时间】:2017-06-27 17:10:06
【问题描述】:
我找不到如何使用 Spark ML 管道对一组新实例(带有未知标签)进行分类。 我找到的所有示例均基于具有已知标签的测试集(仅用于评估分类的性能)。
我有以下管道:
StringIndexer indexer = new StringIndexer().setInputCol("category").setOutputCol("categoryIndex");
Tokenizer tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words");
HashingTF hashingTF = new HashingTF().setNumFeatures(NUM_FEATURES).setInputCol(tokenizer.getOutputCol())
.setOutputCol("rawFeatures");
IDF idf = new IDF().setInputCol(hashingTF.getOutputCol()).setOutputCol("rescaledFeatures");
NaiveBayes naiveBayes = new NaiveBayes().setFeaturesCol(idf.getOutputCol()).setLabelCol("categoryIndex");
Pipeline pipeline = new Pipeline()
.setStages(new PipelineStage[] { indexer, tokenizer, hashingTF, idf, naiveBayes });
它运行完美,既适合估算器又运行转换器(针对包含金色标签的测试集)
但是当我尝试将相同的管道用于没有黄金标签的“真实”示例(标签正是我们想要获得的)时,作为管道一部分的 StringIndexer 会引发异常:
Caused by: org.apache.spark.SparkException: Unseen label: UNKNOWN.
UNKNOWN 是我在使用新的未见示例以编程方式创建新数据集元素时设置的假标签,当然,训练集中不存在这样的标签。我理解为什么会出现这个错误,但是有没有办法告诉管道我不再“训练”或“评估”,而是将它用于真正的分类? 如何从新示例(没有已知标签)开始为管道构建有效输入以对其进行分类?
这是我在 stackoverflow 中的第一个问题,希望我已经解释得足够清楚了。 在此先感谢:-)
【问题讨论】:
标签: classification apache-spark-mllib