Проверка «установленного sk-learn» конвейера все еще приводит к «TFIdfVectorizer еще не установлен» - PullRequest
0 голосов
/ 15 апреля 2020

это небезопасная ситуация с конвейерами sk-learn. Всякий раз, когда я создаю конвейер в sk-learn и делаю некоторые прогнозы с этим конвейером, мне кажется, что я сталкиваюсь с проблемой, что на самом деле я не могу проверить промежуточные шаги конвейера. Прогнозы работают, я получаю свои баллы, но если я хочу получить «значения функций» для экземпляров или проверить, каковы функции векторизатора tf-idf, то конвейер утверждается, что он не подходит (хотя он только недавно использовался для умозаключение, и я уже назвал обучение этому).

Для примера, вызов .fit() для следующего фрагмента из документации Scikit-learn из здесь работает для предсказания, но требует утверждения та же нерешенная проблема, когда я хочу проверить tfidf конвейера.

pipeline = Pipeline([
    # Extract the subject & body
    ('subjectbody', SubjectBodyExtractor()),

    # Use ColumnTransformer to combine the features from subject and body
    ('union', ColumnTransformer(
        [
            # Pulling features from the post's subject line (first column)
            ('subject', TfidfVectorizer(min_df=50), 0),

            # Pipeline for standard bag-of-words model for body (second column)
            ('body_bow', Pipeline([
                ('tfidf', TfidfVectorizer()),
                ('best', TruncatedSVD(n_components=50)),
            ]), 1),

            # Pipeline for pulling ad hoc features from post's body
            ('body_stats', Pipeline([
                ('stats', TextStats()),  # returns a list of dicts
                ('vect', DictVectorizer()),  # list of dicts -> feature matrix
            ]), 1),
        ],

        # weight components in ColumnTransformer
        transformer_weights={
            'subject': 0.8,
            'body_bow': 0.5,
            'body_stats': 1.0,
        }
    )),

    # Use a SVC classifier on the combined features
    ('svc', LinearSVC(dual=False)),
], verbose=True)

После подгонки конвейера к данным (как сделано в ссылке), когда я пытаюсь получить доступ к векторизатору, используя

pipeline.named_steps.union.transformers[1][1].named_steps['tfidf'].get_feature_names() 

он утверждает, что «словарь не установлен или не предоставлен».

Итак, это мое недоразумение о трубопроводах? Разве мы не должны получить доступ к промежуточным этапам? Или настройку, возможно, нужно настроить?

...