ili*_*uve 5 machine-learning apache-spark apache-spark-mllib
将 tf.idf 转换应用于 spark 中的新文档的最佳方法是什么?我有一个设置,可以在其中离线训练模型,然后加载它并将其应用于新文件。基本上,如果无法访问模型 IDF 分布,则计算 IDF 没有多大意义。
到目前为止,我想到的唯一解决方案是保存训练集的 TF RDD 并将新文档附加到其中,然后计算 IDF RDD 并从 IDF RDD 中提取新文件。这样做的问题是我必须将整个 TF 向量保存在内存中(我想它也可能与 IDF RDD 相关)。
这看起来像是某人已经遇到的问题,因此请寻求建议并了解最佳方法。
干杯,
伊利亚
你根本不需要 RDD。TF 不依赖于您拥有的数据(如果您使用固定大小表示而不进行哈希处理,则还依赖于词汇表),而 IDF 只是一个可以表示为向量且仅依赖于词汇表的模型。
因此,您唯一需要保留的就是IDFModel. 假设您使用的转换看起来或多或少像这样:
val hashingTF = new HashingTF()
val tf: RDD[Vector] = hashingTF.transform(rdd)
val idf = new IDF().fit(tf)
val tfidf: RDD[Vector] = idf.transform(tf)
Run Code Online (Sandbox Code Playgroud)
唯一对新数据的进一步操作有用的是idf变量。虽然它没有save方法,但它是本地可序列化对象,因此您可以使用标准 Java 方法来序列化它。
| 归档时间: |
|
| 查看次数: |
573 次 |
| 最近记录: |