РЧ модель теряет точность, когда я удаляю ее из конвейера - PullRequest
0 голосов
/ 10 ноября 2018

Надеюсь, я упускаю из виду что-то глупое или, может быть, я не понимаю, как это работает ...

У меня есть конвейер nlp, который делает в основном следующее:

rf_pipeline = Pipeline([
('vect', TfidfVectorizer(tokenizer = spacy_tokenizer)),
('fit', RandomForestClassifier())
])

Я запускаю это:

clf = rf_pipeline.fit(X_train, y_train)
preds = clf.predict(X_test)

Когда я оптимизирую, я получаю точность в высоких 90-х со следующим:

confusion_matrix(y_test, preds)
accuracy_score(y_test, preds)
precision_score(y_test, preds)

TfidfVectorizer - узкое место в моих вычислениях, поэтому я хотел вырваться из конвейера. запустите векторизатор, а затем выполните поиск по сетке по классификатору, а не по всему конвейеру. Вот как я это выяснил:

# initialize
tfidf = TfidfVectorizer(tokenizer = spacy_tokenizer)
# transform and fit
vect = tfidf.fit_transform(X_train)
clf = rf_class.fit(vect, y_train)
# predict
clf.predict(tfidf.fit_transform(X_test))

Когда я посмотрел на точность, прежде чем запустить полный поиск по сетке, он упал до чуть более 50%. Когда я попытался увеличить количество деревьев, счет упал почти на 10%.

Есть идеи?

1 Ответ

0 голосов
/ 12 ноября 2018

Для набора тестов вы не можете вызвать fit_transform(), но просто transform(), в противном случае элементы векторов tfidf имеют другое значение.

Попробуйте это

# predict
clf.predict(tfidf.transform(X_test))
...