在sklearn中训练多个班级

时间:2019-02-15 05:37:53

标签: python scikit-learn sentiment-analysis

i have data frame like this picture.

我正在寻找一种训练此数据集的方法,因此我使用sklearn并使用此代码对其进行了尝试

train_x, test_x, train_y, test_y = train_test_split(df[['city','text']], df[['1','2','3','4']], test_size = 0.40, random_state = 21)
count_vect = CountVectorizer(analyzer='word', ngram_range=(2,3), max_features=20000)
count_vect.fit(df['text'])

x_train =  count_vect.transform(train_x)
x_test =  count_vect.transform(test_x)
classifier = DecisionTreeClassifier()
classifier.fit(x_train, train_y)

但是我有这样的错误

ValueError: Number of labels=2348 does not match number of samples=1

实际上我不知道是否可以直接使用其4个标签来训练我的数据

2 个答案:

答案 0 :(得分:0)

该错误是因为输入X的形状应为[n_samples, n_features]。如果检查X的形状,则应为(2348,)。

转换X的最佳方法
X = X[:, np.newaxis]

答案 1 :(得分:0)

该错误是由于以下原因引起的:

x_train =  count_vect.transform(train_x)

您看到,您的train_xtest_x有两列(来自df[['city','text']]),但是CountVectorizer仅适用于单个列。它只需要一个可迭代的字符串,而不是更多。所以您做对了:

count_vect.fit(df['text'])

,因为您仅提供一列。但是,当您在train_x中提供count_vect.transform(train_x)时,count_vect仅采用列名,而不是实际数据。

也许你想要

x_train = count_vect.transform(train_x['text'])
相关问题