Как преобразовать новые данные, используя 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(), что здесь не так.