Цикл: избегайте вычислений векторизатора несколько раз - PullRequest
0 голосов
/ 15 января 2019

У меня есть вопрос, связанный с циклом, который включает конвейер с моделями векторизации:

%%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.")

Если я прав, текущий конвейер будет вычислять новый векторизатор для каждого из трех классификаторов в цикле, правильно? Это не проблема в данном примере данных, но с большим набором данных.

Как можно вычислить модель только один раз, а затем вставить ее в конвейер нескольких классификаторов?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...