我有大约 6200 个类别的大约 4400 万个训练示例。 训练后,模型大小约为 450MB
在测试时,使用 5 个并行映射器(每个都有足够的 RAM),分类以每秒 4 个项目的速度进行,这太慢了。
怎样才能加快速度? 我能想到的一种方法是减少单词语料库,但我担心会失去准确性。我将 maxDFPercent 设置为 80。
我想到的另一种方法是通过聚类算法运行项目,并根据经验最大化聚类数量,同时将每个类别中的项目限制为单个聚类。这将使我能够为每个集群构建单独的模型,从而(可能)减少训练和测试时间。
还有其他想法吗?
编辑:
在给出下面的一些答案之后,我开始考虑通过运行聚类算法来进行某种形式的下采样,识别彼此“高度”接近的项目组,然后从其中提取一些样本的并集那些“高度”接近的群体和其他彼此不那么紧密接近的样本。
我还开始考虑使用某种形式的数据标准化技术,其中涉及在使用 n-gram 时合并编辑距离 ( http://lucene.apache.org/core/4_1_0/suggest/org/apache/lucene/search/spell/NGramDistance.html )
我还在考虑使用 hadoop 流 api 来利用此处列出的 Python 中的一些 ML 库 http://pydata.org/downloads/ ,这里http://scikit-learn.org/stable/modules/svm.html#svm (我认为这些使用下面答案之一中提到的liblinear
)
最佳答案
尽早修剪停用词和其他无用的词(支持度太低等)。
根据您使用集群的方式,它实际上可能会使测试阶段的成本变得更加昂贵。
尝试除 Mahout 之外的其他工具。相比之下,我发现 Mahout 真的很慢。似乎它在某个地方的开销非常高。
关于hadoop - Mahout - 朴素贝叶斯模型非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20950429/