【问题标题】:How to classify text with scikit's SVM?如何用 scikit 的 SVM 对文本进行分类?
【发布时间】:2015-01-07 04:07:26
【问题描述】:

我有一个文本分类任务。到目前为止,我只标记了一个语料库并以二元组格式提取了一些特征(即bigram = [('word', 'word'),...,('word', 'word')]。我想对一些文本进行分类,因为我理解 SVM 算法只能接收向量来进行分类,所以我在 scikit 中使用了一些向量器如下:

bigram = [ [('load', 'superior')
             ('point', 'medium'), ('color', 'white'),
             ('the load', 'tower')]]

fh = FeatureHasher(input_type='string')

X = fh.transform(((' '.join(x) for x in sample)
                  for sample in bigram))
print X

输出是一个稀疏矩阵:

  (0, 226456)   -1.0
  (0, 607603)   -1.0
  (0, 668514)   1.0
  (0, 715910)   -1.0

假设我有 2 个类和一个训练集和测试集,我如何使用之前的稀疏矩阵 XSVC 进行分类。

【问题讨论】:

  • 每个文档都应该是矩阵中的稀疏向量... libSVM 期望您的数据是稀疏向量...所以您的问题是什么,您实际上尝试过什么吗?
  • 我的问题是如何使用稀疏矩阵X 进行分类?...还有什么不清楚的地方?...
  • 稀疏矩阵 = 稀疏向量的集合。 libSVM 首选输入格式:稀疏向量的集合。跳出“一切都是矩阵”的框框去思考。
  • 将矩阵分解为向量。使用这些向量作为分类的特征。向量可以只是矩阵中的列
  • 您只需要标签y,然后您就可以使用SVC().fit(X, y)。不确定问题出在哪里。

标签: machine-learning nlp scikit-learn nltk text-classification


【解决方案1】:

正如其他人所指出的,您的矩阵只是语料库中文档的特征向量列表。使用这些向量作为分类的特征。您只需要分类标签 y,然后您就可以使用 SVC().fit(X, y)。

但是……你问这个的方式让我觉得你可能没有任何分类标签。在这种情况下,我认为您想要进行聚类而不是分类。您可以使用其中一种聚类算法来执行此操作。我建议 sklearn.cluster.MiniBatchKMeans 开始。然后,您可以为每个集群输出前 5-10 个单词并从中形成标签。

【讨论】:

  • 谢谢,事实上我有标签,我已经准备好以无人监督的方式对它们进行分类。现在我想用有监督的方法对它们进行分类。将此类标签呈现给 scikit 分类器的最佳方法是什么?
  • 'SVC().fit(X, y)' 中的 'y' 是标签。您只需在拟合时将它们传递给分类器。如果您没有所有标签,那么您更可能需要semi-supervised learning procedure,即标签传播。
  • 请注意,到目前为止,LabelSpreading 不适用于稀疏数据
猜你喜欢
  • 2014-03-25
  • 2017-08-08
  • 2015-03-16
  • 2013-05-17
  • 2013-03-26
  • 2013-07-16
  • 2015-02-05
  • 2020-06-13
  • 2017-02-24
相关资源
最近更新 更多