Можно ли использовать мультиклассовый классификатор объекта (-ов) при обработке / проектировании объекта поверх стекового классификатора?
Вариант использования: у вас есть 10 функций для использования в задаче классификации нескольких классов,Одна из этих функций - текстовая, остальные - категориальные, числовые и временные.
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-мерный вектор / массив, переданный в классификатор с несколькими классами, который выводит вероятности классификации ("gnastt_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'))])
В нескольких различных способах я использовал склинные миксины (BaseEstimator), TransformerMixin, ClassifierMixin), чтобы создать собственный класс или классы, чтобы сделать это, но я потерпел неудачу с треском.Много ошибок.Похоже, я не могу заставить классификатор работать внутри класса трансформатора.
Вот пример одной из моих многочисленных попыток
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
Реальный вопрос: можете ли вы подогнать, а затем предсказать, как часть преобразования в подмножестве ваших данных в сложенном ансамбле?
В нескольких различных вариантах я использовал склинн-миксины (BaseEstimator, TransformerMixin, ClassifierMixin) для создания пользовательских классов, но я потерпел неудачу.
Будет ли это на самом деле работать?Кто-нибудь когда-нибудь видел что-то подобное или я просто мечтаю о сумасшедших вещах?
Любое понимание или мысли будут оценены.
Спасибо!