Можете ли вы использовать мультиклассовый классификатор объекта (ов) при обработке / проектировании объекта поверх (сложенного) классификатора? - PullRequest
1 голос
/ 11 апреля 2019

Можно ли использовать мультиклассовый классификатор объекта (-ов) при обработке / проектировании объекта поверх стекового классификатора?

Вариант использования: у вас есть 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) для создания пользовательских классов, но я потерпел неудачу.

Будет ли это на самом деле работать?Кто-нибудь когда-нибудь видел что-то подобное или я просто мечтаю о сумасшедших вещах?

Любое понимание или мысли будут оценены.

Спасибо!

...