【问题标题】:Understanding Machine Learning, NLP: Text Classification using scikit-learn, python and NLTK理解机器学习、NLP:使用 scikit-learn、python 和 NLTK 进行文本分类
【发布时间】:2020-04-17 03:00:42
【问题描述】:

我尝试使用本文https://towardsdatascience.com/machine-learning-nlp-text-classification-using-scikit-learn-python-and-nltk-c52b92a7c73a 中给出的示例,除了使用本教程使用的 20newsgroups 数据集,我尝试使用我自己的数据,该数据由 /home/ 中的文本文件组成pi/train/ 其中 train 下的每个子目录都是像 /home/pi/train/FOOTBALL/ /home/pi/train/BASKETBALL/ 这样的标签。我试图通过将其放入 /home/pi/test/FOOTBALL/ 或 /home/pi/test/BASKETBALL/ 并运行程序来一次测试一个文档。

# -*- coding: utf-8 -*-
import sklearn
from pprint import pprint
from sklearn.datasets import load_files
docs_to_train = sklearn.datasets.load_files("/home/pi/train/", description=None, categories=None, load_content=True, shuffle=True, encoding=None, decode_error='strict', random_state=0)
pprint(list(docs_to_train.target_names))
from nltk.corpus import stopwords
from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(docs_to_train.data)
X_train_counts.shape
from sklearn.feature_extraction.text import TfidfTransformer
tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
X_train_tfidf.shape
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
text_clf = Pipeline([('vect', CountVectorizer()), 
('tfidf', TfidfTransformer()),
('clf', MultinomialNB()),])
text_clf = text_clf.fit(docs_to_train.data, docs_to_train.target)
import numpy as np
docs_to_test = sklearn.datasets.load_files("/home/pi/test/", description=None, categories=None, load_content=True, shuffle=True, encoding=None, decode_error='strict', random_state=0)
predicted = text_clf.predict(docs_to_test.data)
np.mean(predicted == docs_to_test.target)
pprint(np.mean(predicted == docs_to_test.target))

如果我将一个足球文本文档放在 /home/pi/test/FOOTBALL/ 文件夹中并运行我得到的程序:

['FOOTBALL', 'BASKETBALL']
1.0

如果将关于足球的相同文档移动到 /home/pi/test/BASKETBALL/ 文件夹并运行我得到的程序:

['FOOTBALL', 'BASKETBALL']
0.0

np.mean 应该是这样工作的吗?有谁知道它想告诉我什么?

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    阅读sklearn's load_files 上的文档后,问题可能出在电话X_train_counts = count_vect.fit_transform(docs_to_train.data) 上。您可能必须探索 docs_to_train.data 对象的结构来评估您如何访问底层模块数据。不幸的是,就data 的结构而言,这些文档并不是很有帮助:

    类字典对象,有趣的属性是:data,要学习的原始文本数据,或者“文件名”,保存它的文件,“目标”,分类标签(整数索引),“目标名称”,标签的含义,以及“DESCR”,数据集的完整描述。

    也可能是CountVectorizer()is expecting a single filepath or txt object,而不是填充了许多子数据类型的数据持有者。

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 2017-08-22
      • 2020-10-26
      • 2019-04-16
      • 2019-01-12
      • 2016-06-18
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      相关资源
      最近更新 更多