0

Ich habe eine Pipeline mit TfIdfVectorizer Transformator und OnevsRestClassifier Schätzer erstellt und trainiert sie auf Trainingsdaten wie jetztWie neue Daten zu transformieren sklearn.pipeline mit

# 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) 

folgt, möchte ich die trainierten Modell verwenden Klassen vorherzusagen für neue unmarkierte Daten. Ich versuchte dies und bekam einen Fehler

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

Dies ist der Fehler. Was mache ich falsch?

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

Antwort

1

Wenn text_clf und model sind eine Pipeline, wie Sie vorgeschlagen haben, dann rufen Sie keine Notwendigkeit, zu transformieren und dann vorhersagen. Nur nennen

predictions = model.predict([text]) 

Die Pipeline wird intern die Daten automatisch in nutzbares Format-Transformation (transform() auf Zwischentransformatoren).

Wenn Sie explizit model.transform() aufrufen, nimmt die Pipeline an, dass alle Schätzer in der Pipeline eine transform() haben, was hier nicht der Fall ist.

Verwandte Themen