apache spark MLLib:如何为字符串特征建立标记点? - java

我正在尝试使用Spark的MLLib构建NaiveBayes分类器,该分类器将一组文档作为输入。

我想将一些东西作为特征(即作者,显式标签,隐式关键字,类别),但查看the documentation似乎LabeledPoint仅包含双精度字,即看起来像LabeledPoint[Double, List[Pair[Double,Double]]

相反,我从其余代码中得到的输出将类似于LabeledPoint[Double, List[Pair[String,Double]]

我可以自己进行转换,但这似乎很奇怪。我应该如何使用MLLib处理此问题?

我相信答案是在HashingTF类(即哈希功能)中,但是我不明白它是如何工作的,似乎它需要某种容量值,但是我的关键字和主题列表实际上是不受限制的(或者更好,未知)一开始)。

参考方案

HashingTF使用hashing trick将可能无界的要素映射到有界大小的向量。可能会发生特征冲突,但是可以通过在构造函数中选择大量特征来减小这种冲突。

为了不仅基于特征的内容而且还基于某些元数据(例如,在文档中具有“cats”标签而不是单词“cats”)来创建特征,您可以向HashingTF类提供“tag”之类的东西:cats',以便带有单词的标签会散列到与单词不同的位置。

如果您已经使用HashingTF创建了特征计数向量,则可以通过将大于零的任何计数设置为1来使用它们来创建单词袋特征。也可以使用IDF类创建TF-IDF向量,如下所示:

val tfIdf = new IDF().fit(featureCounts).transform(featureCounts)

在您的情况下,您似乎已经计算出每个文档的字数。这不适用于HashingTF类,因为它旨在为您进行计数。

This paper对于为什么语言应用程序中的特征冲突不是什么大问题有一些争议。根本原因是大多数单词不常见(由于语言的属性),并且冲突与单词频率无关(由于哈希的属性),因此,足以帮助一个人的模型的通用单词都不太可能都哈希到同一插槽。

找不到火花RDD类 - java

我是Spark的新手,并且需要有关错误的帮助:java.lang.NoClassDefFoundError: org/apache/spark/rdd/RDD$我正在Scala中创建一个独立的Spark示例。我运行了sbt clean package和sbt assembly来打包scala spark代码。两者均成功完成,没有任何错误。 RDD上的任何操作…

Apache CXF客户端代理设置 - java

我正在尝试使用的教程来开发Soap Consumer for Soap Service。http://cxf.apache.org/docs/developing-a-consumer.html在“使用上下文设置连接属性”部分中,我正在看下面的代码// Set request context property. java.util.Map<String…

Apache POI背景颜色样式似乎不起作用 - java

晚上好!我在apache poi v.14版本中遇到了一些麻烦,当我使用Libreoffice或Excel打开渲染的xlsx时,样式未正确应用。我有以下代码:class... { private XSSFCellStyle doubleLockStyle; /** * Create default cell style. * * @param myWorkB…

有效地将包含字母的字符串转换为Int-Apache Spark - java

我正在使用将用户作为字符串的数据集(即B000GKXY4S)。我想将这些用户中的每一个都转换为int,因此可以在Apache Spark ALS中使用Rating(user:Int,product:Int,rating:Double)类。最有效的方法是什么?最好使用Spark Scala函数或python本机函数。 参考方案 如果只想将任何可匹配的Strin…

Spark Java-合并同一列多行 - java

我正在使用Java Spark,并且有1个这样的数据框+---+-----+------+ |id |color|datas | +----------------+ |1 |blue |data1| |1 |red |data2| |1 |orange|data3| |2 |black |data4| |2 | |data5| |2 |yellow| | …