gpt4 book ai didi

python - 用于大量类别的分类器和技术

转载 作者:行者123 更新时间:2023-11-28 18:35:52 25 4
gpt4 key购买 nike

我正在设计一个 scikit 学习分类器,它有 5000 多个类别,训练数据至少有 8000 万,并且可能每年增加 1 亿。我已经尝试过所有类别,但它会生成大约 100 GB 二进制文件的分类器。所以我认为每个类别都有一个分类器会很有帮助,也可以帮助我微调每个类别的特征,从而提高准确性,但这意味着每个类别都有 5k+ 个分类器。那么,考虑到我将继续获取额外的训练数据并可能发现新的类别,如何处理这种大数据需求以及在这种情况下使用哪些增量分类器?

更新:

特征的数量大约为 45,其中大部分是基于文本的,并且大多数是基于文本的具有大基数的值的分类,即许多特征可能具有大量可能的值,并且可用 RAM 为 32gb 和 8 核 CPU。我尝试使用极其稀疏的稀疏矩阵进行多项式 NB 和线性 SGD。使用scikit learns Dictvectorizer对特征字典进行向量化。 pandas dataframes 是否也有助于优化整体配置?

最佳答案

总结我们的讨论:

增量分类器

“增量”分类器是您需要进行核外学习时的理想选择(即您的所有数据都不适合内存)。
对于 scikit-learn 中的分类,您提到了 MultinomialNBSGDClassifier,它们是实现 partial_fit api 的两个主要分类器。

就您的目的而言,在线学习 算法似乎是完美的。如果您想这样做,可以查看 VowpalWabbit。我有机会用它来解决类似的问题(6k+ 类)并且模型比 100GB 轻得多。我不记得确切的大小,但我可以在我的个人电脑上存储一些;)。

请注意,VW 的文档有点稀缺(不像 scikit-learn),如果您有复杂的用例,您可能需要阅读一些论文。这是 a good tutorial开始。

腌制模型的大小

您的整个 pickled 管道大约为 100GB,这对我来说看起来很大。我建议分别对每个步骤进行酸洗,作为分析问题的一种方式。
有时您可以在 pickle 估计器之前删除一些属性。一个例子是 stop_words_ 用于 TfidfVectorizer(参见 the docs)。
如果这些步骤存储大型 numpy 数组,joblib.dump(from sklearn.externals import joblib)可能是比 pickle 更节省内存的替代方法。

训练许多二元分类器

您可能不希望自己承担 5k+ 分类器的开销。您所描述的是执行多类分类的One Versus All策略。
请注意,当使用 LogisticRegressionSGDClassifier 时,这已经是解决多类问题的方法。

结论

我会说 VowpalWabbit 看起来非常适合,但可能还有其他工具适合您的用例。

关于你的最后一点:pandas 不会帮助制作更轻的模型,尽管它是一个很好的操作/转换数据的库。

关于python - 用于大量类别的分类器和技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32557895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com