【发布时间】:2017-01-28 07:40:48
【问题描述】:
我是 Spark 基础架构的新手,所以这个问题可能很愚蠢。我使用 mllib 进行文本分类。我有一组带有标签的句子,我将它们提供给 MultinomialNaiveBayes 分类器进行训练。我找到了一个例子。
我的输入是这样的:
2014 年 12 月 31 日星期三 23:13:30 +0000 2014,1,跨年夜,0
2014 年 12 月 31 日星期三 23:14:37 +0000,1,bold angel,0
2014 年 12 月 31 日星期三 23:14:53 +0000,1,loren good give,0
var htf = new HashingTF(2000000)
val parsedData = data.map { line =>
val parts = line.split(',')
LabeledPoint(parts(1).toDouble, htf.transform(parts(2).split(' ')))
}
val model = NaiveBayes.train(parsedData, lambda = 1.0, modelType = "multinomial")
因此,我获取文本并使用哈希函数将术语映射到标签{0,1}。训练后,我想预测未标记数据集的标签。所以这里开始我的实际问题。
我没有文本文档的标签,因此无法创建 LabeledPoints。我试图将“随机”值(双精度)作为这样的标签(未标记的数据存储在不同的结构中,部分(7)是这里的文本):
val testing = sc.textFile("neutralSegment.txt")
val parsedData = testing.map { line =>
val parts = line.split(',')
htf.transform(parts(7).split(' '))
}
val predictionAndLabel = parsedData.map(p => (model.predict(p)))
如何将处理后的数据提取为包括标签在内的原始形式?分类器生成标签,并且术语已被转换为双精度词。我只想将原始字符串与分类器生成的标签连接起来。鉴于此输入:
16800,2014 年 12 月 31 日星期三 23:03:23 +0000,null,DJVINCE1 从现在到 8 点与您的除夕倒计时组合!!,0,neutral,null,djvince 现在到除夕倒计时组合
如何将生成的标签映射到此输入以获得这样的输出:
16800,2014 年 12 月 31 日星期三 23:03:23 +0000,null,DJVINCE1 从现在到 8 点与您的除夕倒计时组合!!,0,neutral,null,djvince 现在到除夕倒计时组合,标签{0,1}
【问题讨论】:
-
根本不需要
LabeledPoint。NaiveBayesModel.predict采用RDD[Vector]或Vector。 -
哈希函数产生我使用的向量,因为在我的例子中,我处理的是单词而不是双精度词。
-
但它仍然不需要
LabeledPoint。 -
用于训练而非预测。
-
你能提供你的中性段的样本吗?我很难理解你到底想做什么。
标签: scala apache-spark apache-spark-mllib