#python #scikit-learn #pipeline #feature-engineering
#python #scikit-learn #конвейер #разработка объектов
Вопрос:
Можете ли вы использовать многоклассовый классификатор объекта (объектов) при обработке / проектировании объектов поверх сложенного классификатора?
Пример использования: у вас есть 10 функций для использования в задаче многоклассовой классификации. 1 из этих объектов — текст, остальные и категориальные, числовые и временные.
9 функций проходят типичные этапы конвейера:
Аналогично преобразователю столбцов sklearn с примером смешанных типов:
numeric_features = ['age', 'fare']
numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='median')),
('scaler', StandardScaler())])
categorical_features = ['embarked', 'sex', 'pclass']
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='constant', fill_value='missing')),
('onehot', OneHotEncoder(handle_unknown='ignore'))])
Текстовый объект «предварительно обрабатывается» или проектируется путем передачи его через текстовый конвейер, который содержит обученную векторную модель, специфичную для конкретной области. Результатом которого является 100-мерный вектор / массив, переданный в многоклассовый классификатор, который выводит вероятности классификации («predict_proba»).
Затем эти вероятности будут объединены с функциями из вышеупомянутого препроцессора перед передачей в классификатор / классификатор стекирования:
text_features = ['domain text']
text_transformer = Pipeline(steps=[
('text_vectors', (TextVectorizer() ),
('predict_prob', DecisionTreeClassifier(params='awesome'))])
preprocessor = ColumnTransformer(
transformers=[
('text', text_transformer, text_features),
('num', numeric_transformer, numeric_features),
('cat', categorical_transformer, categorical_features)])
clf = Pipeline(steps=[('preprocessor', preprocessor),
('classifier', LogisticRegression(solver='lbfgs'))])
Несколькими различными способами я использовал sklearn mixins (BaseEstimator, TransformerMixin, ClassifierMixin) для создания пользовательского класса или классов для этого, но я потерпел неудачу. Много ошибок. Похоже, я не могу заставить классификатор работать внутри класса transformer.
Вот пример одной из моих многочисленных попыток
class TextVectorClassifierProba(ClassifierMixin,BaseEstimator, TransformerMixin):
""" """
def __init__(self):
pass
def transform(self, df, y=None):
"""The workhorse of this feature extractor"""
vector = Pipeline(steps=[('word_vectorizer', TextVectorTransformer())
,('classifier',DecisionTreeClassifier())])
return vector.fit(df).predict_proba(df)
def fit(self, df, y=None):
"""Returns `self` unless something different happens in train and test"""
return self
Реальный вопрос:
Можете ли вы затем предсказать, как часть преобразования подмножества ваших данных в сложенном ансамбле?
Несколькими различными способами я использовал sklearn mixins (BaseEstimator, TransformerMixin, ClassifierMixin) для создания пользовательских классов для этого, но я потерпел неудачу.
Будет ли это действительно работать? Кто-нибудь когда-нибудь видел что-нибудь подобное или я просто придумываю сумасшедшие вещи?
Любое понимание или мысли будут оценены.
Спасибо!