2017-07-27 1 views
0

J'ai trois caractéristiques:comment utiliser la sortie d'éléments de pipeline de sklearn

feature_one -> number of tokens in the given sentence. 
feature_two -> number of verbs in the given sentence. 
feature_three -> number of tokens - number of verbs in the given sentence. 
(feature_one - feature_two) 

Je vous ai écrit des transformateurs personnalisés pour feature_one et feature_two et que vous voulez transformateur personnalisé écrit pour feature_three ce que je peux utiliser la suite de feature_one et feature_two par pipeline en cours d'exécution en tant que:

Pipeline([ 
     #input to feature_one and feature_two is list of sentences. 
     ("feature", FeatureUnion([ 
      ("feature_one", feature_one_transformer()), 
      ("feature_two", feature_two_transformer())   
     ])), 

     ("feature_three", feature_three_transformer())  
]) 

feature_one_transformer:

class feature_one_transformer(BaseEstimator, TransformerMixin): 

    def __init__(self): 
     pass 

    def fit(self, x, y): 
     return self 

    def transform(self, sentence_list): 
     number_of_tokens_in_sentence_list = list() 

     for sentence in sentence_list: 
      number_of_tokens = compute_number_of_tokens 

      number_of_tokens_in_sentence_lista.append(number_of_tokens) 

     return pandas.DataFrame(number_of_tokens_in_sentence_list) 

feature_two_transformer:

class feature_two_transformer(BaseEstimator, TransformerMixin): 
    def __init__(self): 
     pass 

    def fit(self, x, y): 
     return self 

    def transform(self, sentence_list): 
     number_of_verbs_in_sentence_list = list() 

     for sentence in sentence_list: 
      number_of_verbs = compute_number_of_verbs_in_sentence 

      number_of_verbs_in_sentence_lista.append(number_of_verbs) 

     return pandas.DataFrame(number_of_verbs_in_sentence_list) 

quelqu'un peut me dire comment dois-je écrire un transformateur sur mesure pour feature_three et comment utiliser dans la canalisation afin que je puisse utiliser la suite de feature_one et feature_two transformateurs. Je vous remercie.

Répondre

1

Ce n'est pas clair pour moi pourquoi vous voudriez rendre ceci si compliqué. Je voudrais juste utiliser un transformateur qui fait tout ce que vous voulez. Quelque chose comme ceci:

class features_transformer(BaseEstimator, TransformerMixin): 

    def __init__(self, variable): 
     self.variable = variable 

    def fit(self, X): 
     return self 

    def transform(self, X): 
     X['number_of_tokens'] = X[self.variable].apply(lambda cell: compute_number_of_tokens(cell)) 
     X['number_of_verbs'] = X[self.variable].apply(lambda cell: compute_number_of_verbs(cell)) 
     X['tokens_minus_verbs'] = X['number_of_tokens'] - X['number_of_verbs'] 

     return X 

new_X = features_transformer('sentences').fit_transform(X) 
+0

Merci. J'apprends comment utiliser Pipeline, donc cette question m'a frappé et j'ai essayé de trouver une solution. – sdream

+0

Pas de problème! Nous sommes là pour vous aider. La réponse a-t-elle fonctionné pour vous? –

+0

oui Ça a marché, en fait je le sais déjà :) – sdream