0

Ich trainierte Schätzer mit diesem:Wie klassifiziere ich Text mit einem Schätzer?

def train_estimator(feature_list, expected_values, k=5): 
    pipeline = Pipeline([('vect', CountVectorizer(input='filename', stop_words='english')), 
         ('clf', MultinomialNB())]) 

    parameters = {'vect__ngram_range':[(1, 1), (1, 2), (1, 3)], 
        'vect__min_df':[0.001, 0.01, 0.02, 0.05, 0.1], 
        'vect__max_df':[0.85, 0.90, 0.95, 0.99, 1.0], 
        'clf__alpha':[0.001, 0.01, 0.1, 0.2, 0.5, 1.0]} 

    gs_clf = GridSearchCV(pipeline, parameters, n_jobs=6, cv=k, verbose=1, refit=True, scoring='roc_auc') 
    gs_clf.fit(feature_list, expected_values) 

    return gs_clf.best_estimator_ 

Jetzt muß ich mit diesen Schätzer einen Text klassifizieren, aber es ist nicht klar, wie der Text richtig vektorisieren.

Ich muss text vektorisieren und dann estimator.predict() mit dem Vektor aufrufen. Die Sache ist, dieser Vektor muss mit den Vektoren übereinstimmen, die verwendet werden, um estimator zu trainieren (das Wort foobar muss den gleichen Index wie die Vektoren haben, die verwendet werden, um das Modell zu trainieren). Aus der Dokumentation geht nicht eindeutig hervor, wie man auf diese Weise text vektorisieren kann.

Wie schreibe ich diese predict() Funktion?

def predict(estimator, text): 
    # Vectorize text and call estimator.predict() 

EDIT

feature_list und expected_values wie folgt vorgenommen:

def fetch_training_set(doc_iterator): 
    files, labels = list(), list() 
    for row in doc_iterator: 
     filename = 'somepath/%s.txt' % random() 
     with open(filename, 'w', encoding='utf-8') as f: 
      f.write(row['text']) 

     files.append(filename) 
     labels.append(row['label']) 

    feature_list = np.array(files) 
    expected_values = np.array(labels) 

    return feature_list, expected_values 
+0

Was ist 'feature_list'? Rohtexte? –

+0

@Vivek Kumar 'feature_list' ist eine Liste von Dateinamen. Jede Datei enthält Text. – Jay

+0

@Vivek Kumar 'feature_list' ist eigentlich ein' np.array() 'von Dateinamen. Ich habe die Frage mit weiteren Informationen aktualisiert. – Jay

Antwort

0

Ich denke, Ihre Zusatzfunktionen train_estimator und predict Zugabe macht die Sache kompliziert.

gs_clf = GridSearchCV(pipeline, parameters, n_jobs=6, cv=k, verbose=1, refit=True, scoring='roc_auc') 
gs_clf.fit(feature_list, expected_values) 
gs_clf.predict(your_data) 

wird den Job erledigen (letzte Zeile). Da Sie Ihre Pipeline umrüsten (refit=True), wird gs_clf mit den besten Parametern der Grid-Suche überarbeitet. Dann wird gs_clf.predict die predict Funktionen jedes Mitglieds Ihrer Pipeline Ihre Pipeline aufrufen.

+0

Was ist 'your_data'? ist es Text oder ein Feature-Vektor? – Jay

+0

normalerweise Text. Aber da die Eingabe Ihres CountVectorizer Dateiname ist, sollte ich auch einen Dateinamen versuchen. – geompalik

Verwandte Themen