#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)
Поэтому, в общем, мне нужен какой-то классификатор в конвейере, который может дать мне вероятности другой классификации, которую я могу передать в качестве функции с помощью существующего конвейера функций.