Python 大数据集的多标签分类
我正在解决一个多标签分类问题。我有大约600万行需要处理,它们是大块的文本。它们在单独的列中使用多个标记进行标记 关于哪些scikit库可以帮助我扩展代码的任何建议。我使用的是One vs Rest和SVM。但它们的规模不会超过9万到10万行Python 大数据集的多标签分类,python,machine-learning,nlp,classification,scikit-learn,Python,Machine Learning,Nlp,Classification,Scikit Learn,我正在解决一个多标签分类问题。我有大约600万行需要处理,它们是大块的文本。它们在单独的列中使用多个标记进行标记 关于哪些scikit库可以帮助我扩展代码的任何建议。我使用的是One vs Rest和SVM。但它们的规模不会超过9万到10万行 classifier = Pipeline([ ('vectorizer', CountVectorizer(min_df=1)), ('tfidf', TfidfTransformer()), ('clf', OneVsRestClassifier(L
classifier = Pipeline([
('vectorizer', CountVectorizer(min_df=1)),
('tfidf', TfidfTransformer()),
('clf', OneVsRestClassifier(LinearSVC()))])
支持向量机的规模随着列数的增加而增大,但随着行数的增加而减小,因为它们基本上是在学习哪些行构成支持向量。我认为这是SVM的一个常见问题,但大多数人不明白为什么,因为它们通常能够很好地扩展最合理的数据集
HashingVectorizer
如果您迭代地将数据分块成10k或100k个适合内存的文档批,那么它将起作用
然后,您可以将转换后的文档批传递给支持部分拟合
方法的线性分类器(例如sgdclassizer
或PassiveAggressiveClassifier
),然后迭代新批
在监控部分训练模型的准确性时,您可以开始在保留的验证集(例如10k文档)上对模型进行评分,而无需等待看到所有样本
您还可以在数据分区上的多台计算机上并行执行此操作,然后对生成的coef_
和intercept_
属性进行平均,以获得所有数据集的最终线性模型
我在2013年3月在PyData的演讲中讨论了这一点:
本文中还有一个示例代码取自:尝试使用
部分匹配的API对每个标签的sgdclassizer
进行训练。还考虑使用<代码> HashingVectorizer <代码>代替计数+ TF IDF。是否需要缩放或规范<代码> HashingVectorizer <代码>的输出,或者是否可以直接输入到<代码> sgd分类器< /代码>?您是否考虑切换到随机森林分类器?它的伸缩性比SVM好得多。