apache spark MLLib:如何为字符串function构建标记点?
我正在尝试使用Spark的MLLib构建一个NaiveBayes分类器,它将一组文档作为输入。
我想把一些东西作为特征(即作者,显式标签,隐式关键字,类别),但看文档似乎LabeledPoint
只包含双打,即看起来像LabeledPoint[Double, List[Pair[Double,Double]]
。
相反,我从其余代码输出的内容将类似于LabeledPoint[Double, List[Pair[String,Double]]
。
我可以编造自己的转换,但看起来很奇怪。 我怎么用MLLib来处理这个问题?
我相信答案是在HashingTF
类中(即散列function),但我不明白它是如何工作的,它似乎需要某种容量值,但我的关键字和主题列表实际上是无限的(或更好,未知在开始)。
HashingTF
使用散列技巧将可能无限数量的HashingTF
映射到有界大小的向量。 存在特征冲突的可能性,但是通过在构造函数中选择大量特征可以使其更小。
为了不仅基于特征的内容而且基于某些元数据创建特征(例如,具有’猫’的标签而不是在文档中具有’猫’字样),您可以为HashingTF
类提供类似’标签的内容:cats’所以带有单词的标签将散列到不同于单词的不同插槽。
如果您使用HashingTF
创建了要素计数向量, HashingTF
可以通过将任何高于0的计数设置为1来使用它们来创建单词特征包。您还可以使用IDF
类创建TF-IDF向量,如下所示:
val tfIdf = new IDF().fit(featureCounts).transform(featureCounts)
在您的情况下,您似乎已经计算了每个文档的单词计数。 这不适用于HashingTF
类,因为它旨在为您进行计数。
本文有一些争论,说明为什么特征冲突在语言应用程序中不是那么多问题。 基本原因是大多数单词并不常见(由于语言的属性),并且冲突与单词频率无关(由于散列属性),因此,对于一个人的模型来说,通用的单词不太可能会散列到相同的插槽。
- Spark提交失败,包含java.lang.NoSuchMethodError:scala.Predef $。$ conforms()Lscala / Predef $$ less $ colon $ less;
- Apache Spark Streaming的失败集成测试
- 无法连接到spark master:InvalidClassException:org.apache.spark.rpc.RpcEndpointRef; 本地类不兼容
- 如何在Java / Kotlin中创建一个返回复杂类型的Spark UDF?
- 如何在Java中的Apache Spark中将DataFrame转换为Dataset?
- Spark流式传输DStream RDD以获取文件名
- 元素的映射变坏了
- Spark 2.0.1写入错误:引起:java.util.NoSuchElementException
- 用spark分析日志文件?