我正在尝试按类别对文档进行分类。我想训练几类数据,然后给它一些文字,让它告诉我该文本属于哪个类别。对于培训,我使用的是20个新闻组。我收到这个错误 " ValueError:X和y具有不兼容的形状X有5个样本,但y有4" at classifier.fit(X_train,Y)。
有谁能告诉我X怎么来有5个样本,X来自data_train,它加载了4个类别?此外,我非常感谢任何帮助,以更好的方式做到这一点。
import numpy as np
from sklearn.datasets import fetch_20newsgroups
from sklearn import preprocessing
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.svm import LinearSVC
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.multiclass import OneVsRestClassifier
remove = ()
categories = [ 'alt.atheism', 'talk.religion.misc', 'comp.graphics', 'sci.space']
categories_test = ['sci.space' ]
print("Loading newsgroups dataset for categories:")
data_train = fetch_20newsgroups(subset='train', categories=categories, shuffle=True, random_state=42, remove=remove)
data_test = fetch_20newsgroups(subset='test', categories=categories_test, shuffle=True, random_state=42, remove=remove)
X_test = data_test
X_train = data_train
y_train = data_train.target_names
lb = preprocessing.LabelBinarizer()
Y = lb.fit_transform(y_train)
classifier = Pipeline([
('vectorizer', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', OneVsRestClassifier(LinearSVC()))])
classifier.fit(X_train, Y)
predicted = classifier.predict(X_test)
all_labels = lb.inverse_transform(predicted)
for item, labels in zip(X_test.target_names, all_labels):
print '%s => %s' % (item, ', '.join(labels))
答案 0 :(得分:0)
问题出在这里:
X_train = data_train
y_train = data_train.target_names
你的data_train是一个对象,而不是一个样本数组,所以你要将这个对象存储在X_train
中,而你只需要输入参数(可能在.data
字段{{1} }})。此外,“target_names”是标签的名称,而不是实际标签(如果我记得错误,则存储在data_train
中)
应该是
.target
同样适用于“data_test”。