Надеюсь, я упускаю из виду что-то глупое или, может быть, я не понимаю, как это работает ...
У меня есть конвейер 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%.
Есть идеи?