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