rif*_*aff 17 java machine-learning feature-selection apache-spark apache-spark-mllib
我正在尝试使用Spark的MLLib构建一个NaiveBayes分类器,它将一组文档作为输入.
我想把一些东西作为特征(即作者,显式标签,隐式关键字,类别),但看文档似乎LabeledPoint只包含双打,即它看起来像LabeledPoint[Double, List[Pair[Double,Double]].
相反,我从其余代码输出的内容就像是LabeledPoint[Double, List[Pair[String,Double]].
我可以编造自己的转换,但看起来很奇怪.我怎么用MLLib来处理这个问题?
我相信答案是在HashingTF课堂上(即散列功能),但我不明白它是如何工作的,它似乎需要某种容量值,但我的关键词和主题列表实际上是无限的(或更好,未知一开始).
mrm*_*reg 10
HashingTF使用散列技巧将可能无限数量的要素映射到有界大小的向量.存在特征冲突的可能性,但是通过在构造函数中选择大量特征可以使其更小.
为了不仅基于特征的内容而且基于某些元数据(例如,具有'猫'的标签而不是在文档中具有'猫'的单词)来创建特征,您可以为HashingTF类提供诸如'标签:猫'所以带有单词的标签将散列到不同于单词的不同插槽.
如果您使用创建了要素计数向量HashingTF,则可以使用它们通过将任何高于0的计数设置为1来创建单词特征包.您还可以使用IDF类创建TF-IDF向量,如下所示:
val tfIdf = new IDF().fit(featureCounts).transform(featureCounts)
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您似乎已经计算了每个文档的单词计数.这不适用于HashingTF该类,因为它旨在为您进行计数.
本文有一些争论,说明为什么特征冲突在语言应用程序中不是那么多问题.主要原因是大多数单词并不常见(由于语言的属性),并且冲突与单词频率无关(由于散列属性),因此,对于一个人的模型来说,通用的单词不太可能会散列到相同的插槽.
| 归档时间: |
|
| 查看次数: |
3738 次 |
| 最近记录: |