Поезд нескольких классов в склеарн - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть фрейм данных, подобный этому.

Я ищу способ обучить этот набор данных, поэтому я попробовал его с помощью 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 голосов
/ 15 февраля 2019

Ошибка связана со строкой:

x_train =  count_vect.transform(train_x)

Видите ли, ваши train_x и test_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'])
0 голосов
/ 15 февраля 2019

Ошибка в том, что форма ввода X должна быть [n_samples, n_features].Если вы проверите форму X, должно быть (2348,).Лучший способ преобразовать X на

X = X[:, np.newaxis]
...