Как использовать вероятности классификации одной модели в качестве признака для другой модели классификации?

#python #machine-learning #scikit-learn #nlp #classification

Вопрос:

Я работаю над этой задачей классификации 305 классов «Глав» на основе сильно несбалансированного набора текстовых данных. У меня для этого есть трубопровод. Поэтому вместо прямой классификации этих классов я хочу, чтобы они проходили через другую модель, которая может предсказывать «Субъекты», а затем использовать вероятности этих режимов в качестве функции для следующей модели. Теоретически, я могу передать текстовую SubjectClassifier модель -gt; gt; SubjectClassifier.predict_proba() -gt; gt; FeatureUnion с существующими функциями -gt; Передать ее gt; ChapterClassifier . Но это не очень приятно. Есть ли какой-нибудь способ сделать это внутри трубопровода?

Мой существующий ChapterClassifier конвейер выглядит примерно так:

 def get_text_data(x): return x[:,0]   def get_latex_data(x): return x[:,1]   def get_numeric_data(x): return x[:,2:].astype(float)  # def get_cluster(x): # For unsupervised data. Not using it # return x[:,2]   transfomer_numeric = FunctionTransformer(get_numeric_data, validate = False) transformer_text = FunctionTransformer(get_text_data, validate = False) transformer_latex = FunctionTransformer(get_latex_data, validate = False) # transformer_cluster = FunctionTransformer(get_cluster, validate = False) # For clustering features  # Create a pipeline to concatenate Tfidf Vector for text, Tfidf Vector for latex and Numeric data ChapterClassifier_pipeline = Pipeline([  ('features', FeatureUnion([  ('numeric_features', Pipeline([  ('selector', transfomer_numeric)  ])),   ('text_features_word', Pipeline([  ('selector', transformer_text),  ('vec', TfidfVectorizer(analyzer='word', stop_words = stop_words)) # because I already have preprocessed my Text  ])),    ('latex_features_char', Pipeline([  ('selector', transformer_latex),  ('vec', TfidfVectorizer(analyzer='char')) # already preprocessed latex  ])),    # # Pipeline for Unsupervised Clustering, LDA, SVD, KMeans etc. Not working in my case. Making the model perform poor than usual # ('body_bow', Pipeline([ # ('selector', transformer_cluster), # ('vec', TfidfVectorizer()), # ('cluster', LDA(4)), # ])),   ])),   ('clf',RandomForestClassifier(class_weight = 'balanced',n_jobs = 3, random_state = SEED)) ])   ChapterClassifier_pipeline.fit(x_train,y_train) # x is numpy 2D array, y is 1D array of values ChapterClassifier_pipeline.predict(x_test)  

Поэтому, в общем, мне нужен какой-то классификатор в конвейере, который может дать мне вероятности другой классификации, которую я могу передать в качестве функции с помощью существующего конвейера функций.