У меня есть вопрос, связанный с циклом, который включает конвейер с моделями векторизации:
%%time
import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from gensim.sklearn_api import D2VTransformer
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.pipeline import Pipeline
from gensim.utils import simple_preprocess
np.random.seed(0)
data = pd.read_csv('https://pastebin.com/raw/dqKFZ12m')
X_train, X_test, y_train, y_test = train_test_split([simple_preprocess(doc) for doc in data.text],
data.label, random_state=0)
classifiers = [
LogisticRegression(random_state=0),
LinearSVC(random_state=0),
KNeighborsClassifier()
]
models = [
CountVectorizer(preprocessor=' '.join, tokenizer=None),
TfidfVectorizer(preprocessor=' '.join, tokenizer=None),
D2VTransformer(dm=1, size=50, window=3, min_count=2, iter=10, seed=123),
]
for model in models:
mdl_name = str(model.__class__.__name__)
for classifier in classifiers:
clf_name = str(classifier.__class__.__name__)
pipeline = Pipeline([
('vec', model),
('clf', classifier)
])
cval = cross_val_score(pipeline, X_train, y_train, scoring='accuracy', cv=5)
print("Cross-Validation Score for %s on %s on %s" % (mdl_name, clf_name, np.mean(cval)))
print("Done.")
Если я прав, текущий конвейер будет вычислять новый векторизатор для каждого из трех классификаторов в цикле, правильно? Это не проблема в данном примере данных, но с большим набором данных.
Как можно вычислить модель только один раз, а затем вставить ее в конвейер нескольких классификаторов?
Спасибо!