Как преобразовать новые данные, используя sklearn.pipeline

Я создал конвейер с преобразователем TfIdfVectorizer и оценщиком OnevsRestClassifier и обучил его обучающим данным следующим образом.

# Split data using train_test_split
print "Split data into train and test sets"
x_train, x_test, y_train, y_test = train_test_split(
    data_x, data_y, test_size=0.33)

# transform matrix of plots into lists to pass to a TfidfVectorizer
train_x = [x[0].strip() for x in x_train.tolist()]
test_x = [x[0].strip() for x in x_test.tolist()]

# Pipeline fit and transform
print "Learn the model using train data"
model = text_clf.fit(train_x, y_train)

# Predict the test data
print "Predict the recipients on test data"
predictions = model.predict(test_x)

Теперь я хочу использовать обученную модель для прогнозирования классов для новых немеченых данных. Я попробовал это и получил ошибку

# Read text from input
text = raw_input()
print "Input : ", text
new_data = text_clf.transform([text])
predict = model.predict(new_data) 

Это ошибка. Что я делаю неправильно?

AttributeError: 'OneVsRestClassifier' object has no attribute 'transform'

1 ответ

Решение

Если text_clf а также model если вы предложили конвейер, то нет необходимости вызывать transform и затем прогнозировать. Только звонок

predictions = model.predict([text]) 

Конвейер автоматически преобразует данные в пригодный для использования формат (используя transform() на промежуточных трансформаторах).

Когда вы явно звоните model.transform()конвейер предполагает, что все оценки внутри конвейера имеют функцию transform(), что здесь не так.

Другие вопросы по тегам