python - 大数据集的多标签分类

标签 python machine-learning nlp classification scikit-learn

我正在解决多标签分类问题。我有大约 600 万行要处理,这是大量的文本。它们在单独的列中标有多个标签。

关于哪些 scikit 库可以帮助我扩展代码的任何建议。我在其中使用 One-vs-Rest 和 SVM。但它们不会扩展到超过 90-100k 行。

classifier = Pipeline([
('vectorizer', CountVectorizer(min_df=1)), 
('tfidf', TfidfTransformer()),
('clf', OneVsRestClassifier(LinearSVC()))])

最佳答案

SVM 的规模随着列数的增加而增加,但随着行数的增加而变差,因为它们本质上是在学习哪些行构成支持向量。我认为这是对 SVM 的常见提示,但大多数人不明白为什么,因为它们通常可以很好地扩展大多数合理的数据集。

  1. 你会想要 1 vs 其余的,因为你正在使用。对于这个 (n(n-1) 个分类器,vs n),一对一将无法很好地扩展。
  2. 我将您考虑的术语的最小 df 设置为至少 5,也许更高,这将大大减少您的行大小。您会发现很多单词出现一次或两次,并且它们对您的分类没有任何值(value),因为在那个频率下,算法不可能概括。词干提取可能会有所帮助。
  3. 同时删除停用词(the、a、an、介词等,请在 google 上查找)。这将进一步减少列数。
  4. 按照说明减小列大小后,我会尝试消除一些行。如果有些文档非常嘈杂,或者在步骤 1-3 之后非常短,或者可能非常长,我会考虑消除它们。看看 s.d.和平均文档长度,并根据该长度的频率绘制文档的长度(根据字数)以决定
  5. 如果数据集仍然太大,我建议使用决策树或朴素贝叶斯,两者都存在于 sklearn 中。 DT的尺度很好。我会设置一个深度阈值来限制树的深度,否则它会尝试长出一棵巨大的树来记住该数据集。另一方面,NB 的训练速度非常快,并且可以很好地处理大量的列。如果 DT 运行良好,您可以尝试使用少量树的 RF,并利用 ipython 并行化到多线程。
  6. 或者,将您的数据分割成更小的数据集,在每个数据集上训练一个分类器,将其保存到磁盘,然后从这些分类器构建一个集成分类器。

关于python - 大数据集的多标签分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20281062/

相关文章:

nlp - NER 语料库的带注释训练数据

python - 自动文本摘要

python - Jython:导入错误:没有名为 multiarray 的模块

python - IPython 并行 LoadBalancedView GIL

python - Keras Predict_proba 中的神经网络始终返回等于 1 的概率

python - Keras 损失极高,并且不会随着每个 epoch 的增长而减少

machine-learning - Precision、Recall 和 F1 可以是相同的值吗?

python - 我们可以在 Django 中使用 Bokeh curdoc() 吗

python - Pandas groupby 列表

python - 同时按 2 列分组,同时向 groupby 添加一些条件