小编Gau*_*mar的帖子

可扩展或在线的核外多标签分类器

在这个问题上,过去2-3周我一直在绞尽脑汁.我有一个多标签(不是多级)的问题,每个样品可以属于多个标签的.

我有大约450万个文本文档作为训练数据,大约100万个作为测试数据.标签大约35K.

我正在使用scikit-learn.对于特征提取我以前使用TfidfVectorizer它没有规模可言,我现在用的HashVectorizer这是更好的,但不是可扩展鉴于我有文件的数量.

vect = HashingVectorizer(strip_accents='ascii', analyzer='word', stop_words='english', n_features=(2 ** 10))
Run Code Online (Sandbox Code Playgroud)

SKlearn提供OneVsRestClassifier,我可以在其中提供任何估算器.对于多标签,我发现LinearSVC和SGDClassifier只能正常工作.根据我的基准,SGD在内存和时间方面都优于LinearSVC.所以,我有这样的事情

clf = OneVsRestClassifier(SGDClassifier(loss='log', penalty='l2', n_jobs=-1), n_jobs=-1)
Run Code Online (Sandbox Code Playgroud)

但是这有一些严重的问题:

  1. OneVsRest没有partial_fit方法,这使得无法进行核外学习.那有什么替代品吗?
  2. HashingVectorizer/Tfidf都可以在单个核心上运行,并且没有任何n_jobs参数.散列文档需要花费太多时间.任何替代/建议?n_features的值是否正确?
  3. 我测试了100万份文件.Hashing需要15分钟,当涉及到clf.fit(X,y)时,我收到一个MemoryError,因为OvR内部使用LabelBinarizer并且它试图分配一个维度矩阵(yx类),这是不可能分配的.我该怎么办?
  4. 还有其他任何具有可靠和可扩展的多标签算法的库吗?我知道genism和mahout但他们两个都没有任何多标签情况?

classification machine-learning document-classification scikit-learn text-classification

12
推荐指数
2
解决办法
2275
查看次数