【问题标题】:Text classification with Scikit-learn使用 Scikit-learn 进行文本分类
【发布时间】:2016-05-16 17:59:08
【问题描述】:

我正在使用 scikit learn 对两个标签进行文本分类。我正在使用 load_files 方法加载我的文本文件

categories={'label0','label1'}
text_data = load_files(path,categories=categories)

来自以下结构:

train
├── Label0
│   ├── 0001.txt
│   └── 0002.txt
└── Label1
    ├── 0001.txt
    └── 0002.txt

我的问题是,当我尝试查看 text_data.data 的形状时,它会返回:

print (type(text_data.data))
<type 'list'>

print text_data.data.shape
AttributeError: 'list' object has no attribute 'shape'

X = np.array(text_data.data)
print x.shape
(35,)

它返回一维数组.. 我认为它应该是二维 numpy 数组或字典,其中第一个用于文本,另一个用于类(label0 或 1).. 我错过了什么吗?

【问题讨论】:

  • 我已经编辑了这个问题..我的问题是返回的列表是一个一维数组......只有文本存储在那里......返回的列表不应该包含文本吗作为类标签?
  • 一旦你把你的数据输入进去,别忘了打乱它并创建你的验证集。 (为了尽可能严格,您应该在创建文本特征之前洗牌和拆分(根据大卫莫斯特的建议))

标签: python scikit-learn


【解决方案1】:

问题是在调用 load_files 之后,它还不是一个 numpy 数组。它只是一个文本列表。您应该使用CountVectorizerTfidfVectorizer 将此文本矢量化。

示例:

cv = CountVectorizer()
X = cv.fit_transform(text_data.data)
y = text_data.target
print cv.vocabulary_  # Show words in vocabulary with column index

clf = LogisticRegression() # or other classifier
clf.fit(X, y)

【讨论】:

  • 谢谢.. 但是如何将文本链接到标签?是由两个列表(text_data.data 和 text_data.target)的索引吗?还有我如何访问创建的稀疏矩阵,因为我想看看它是如何构造的。当 CountVectorizer 是管道的一部分时,我可以访问矩阵吗?
  • 是的,完全正确。 X 的行索引将对应于text_data.target 的索引
  • 更新了我的示例以展示如何使用稀疏矩阵。要直接查看,您可以尝试X[:5,:].todense() 将前 5 行视为密集矩阵。您可以在管道中使用CountVectorizer,但结果将立即提供给下一步。
猜你喜欢
  • 2017-08-08
  • 2015-02-05
  • 2018-07-27
  • 2019-10-08
  • 2012-11-24
  • 2017-04-07
  • 2015-07-05
  • 2018-07-03
  • 2014-10-02
相关资源
最近更新 更多