Получение имен объектов из конвейера с помощью tfidfvectorizer - PullRequest
0 голосов
/ 16 марта 2020

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

загрузка классов, мне нужно объединить tfidfvectorizer с другими функциями

from sklearn.base import TransformerMixin, BaseEstimator

class ItemSelector(BaseEstimator, TransformerMixin):

    def __init__(self, key):
        self.key = key

    def fit(self, x, y=None):
        return self

    def transform(self, data_dict):
        return data_dict[self.key]

class FeatureTypeSelector(TransformerMixin, BaseEstimator):

    FEATURE_TYPES = {
        'categorical': [
            'COLUMN_A','COLUMN_B'
        ],
        'continuous': [
             'COLULMN_C','COLUMN_D'
        ]
    }

    def __init__(self, feature_type):
        self.columns = self.FEATURE_TYPES[feature_type]

    def fit(self, X, y=None):
        return self

    def transform(self, X):
        return X[self.columns]


class RowToDictTransformer(TransformerMixin, BaseEstimator):

    def fit(self, X, y=None):
        return self

    def transform(self, X):
        return (row[1] for row in X.iterrows())

Затем код, чтобы поместить все в конвейер и запустить регрессор

from sklearn.pipeline import make_union, make_pipeline
from sklearn.feature_extraction import DictVectorizer
from sklearn.preprocessing import RobustScaler
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import MinMaxScaler

# Create the preprocessor
preprocessor = make_union(
    make_pipeline(      
        ItemSelector(key='TEXT_COLUMN'),
        TfidfVectorizer(lowercase=False, min_df=1),
    ),
    make_pipeline(
        FeatureTypeSelector('continuous'),
        MinMaxScaler(),
    ),
    make_pipeline(
        FeatureTypeSelector('categorical'),
        RowToDictTransformer(),
        DictVectorizer(sparse=False),  # set sparse=True if you get MemoryError
    ),
)

# fit and transform the data
preprocessor.fit_transform(x_train)

# choose some estimator
# estimator = MultinomialNB()
estimator = LinearRegression()

# Create the model
model = make_pipeline(preprocessor, estimator)

# Training the model
model.fit(x_train, y_train)

# Predicting the model
predicted = model.predict(x_test)

Я могу запустить model.coef_, чтобы получить все коэффициенты, но я хочу посмотреть, как каждый элемент TEXT_COLUMN зависит от того, какой вес. Я пытался вызвать get_feature_names () или пытался передать их в конвейер, но безуспешно (большинство результатов Google пока что стали фиолетовыми).

Любой, кто может дать мне немного советов, как передать имена функций до конца трубопровода? Идеальный результат - это фрейм данных с функцией (строка из TEXT_COLUMN) и feature_weight в качестве значения.

...