Verknüpfen Sie benutzerdefinierte Funktionen mit CountVectorizer

Ich habe eine Reihe von Dateien mit Artikeln. Für jeden Artikel sollte es einige Features, wie: Textlänge , text_spam (alle sind ints oder floats, und in den meisten Fällen sollten sie von csv geladen werden). Und was ich tun möchte, ist, diese Features mit CountVectorizer zu kombinieren und diese Texte zu klassifizieren.

Ich habe einige Tutorials gesehen, aber trotzdem habe ich keine Ahnung, wie ich dieses Zeug umsetzen kann. Hier etwas gefunden , kann aber das nicht für meine Bedürfnisse umsetzen.

Irgendwelche Ideen, wie das mit scikit getan werden könnte?

Vielen Dank.

Was ich gerade ankam, ist:

from sklearn.feature_extraction import DictVectorizer from sklearn.feature_extraction.text import CountVectorizer from sklearn.pipeline import FeatureUnion measurements = [ {'text_length': 1000, 'text_spam': 4.3}, {'text_length': 2000, 'text_spam': 4.1}, ] corpus = [ 'some text', 'some text 2 hooray', ] vectorizer = DictVectorizer() count_vectorizer = CountVectorizer(min_df=1) first_x = vectorizer.fit_transform(measurements) second_x = count_vectorizer.fit_transform(corpus) combined_features = FeatureUnion([('first', first_x), ('second', second_x)]) 

Für dieses Bündel von Code verstehe ich nicht, wie man "echte" -Daten lädt, da Trainings-Sets bereits geladen sind. Und der zweite – wie man Kategorien einlädt (y-Parameter für Fit-Funktion)?

One Solution collect form web for “Verknüpfen Sie benutzerdefinierte Funktionen mit CountVectorizer”

Du bist Missverständnis FeatureUnion . Es soll zwei Transformatoren nehmen, nicht zwei Chargen von Samples.

Sie können es in den Umgang mit den Vektorisierern, die Sie haben, erzwingen, aber es ist viel einfacher, nur alle Ihre Features in eine große Tasche pro Probe zu werfen und einen einzigen DictVectorizer zu verwenden, um Vektoren aus diesen Taschen zu machen.

 # make a CountVectorizer-style tokenizer tokenize = CountVectorizer().build_tokenizer() def features(document): terms = tokenize(document) d = {'text_length': len(terms), 'text_spam': whatever_this_means} for t in terms: d[t] = d.get(t, 0) + 1 return d vect = DictVectorizer() X_train = vect.fit_transform(features(d) for d in documents) 

Vergessen Sie nicht, dies mit sklearn.preprocessing.Normalizer zu normalisieren, und bewusst sein, dass auch nach der Normalisierung diese text_length Features die anderen Features in Bezug auf Skala dominieren müssen. Es könnte klüger sein, stattdessen 1. / text_length oder np.log(text_length) verwenden.

Und der zweite – wie man Kategorien einlädt ( y Parameter für Fit-Funktion)?

Hängt davon ab, wie Ihre Daten organisiert sind. Scikit-learn hat eine Menge Helfer-Funktionen und Klassen, aber es erwartet Sie, dass Sie Code schreiben, wenn Ihr Setup nicht standardmäßig ist.

  • So finden Sie die entsprechende Klasse in clf.predict_proba ()
  • Halten Sie die angepassten Parameter bei der Verwendung eines cross_val_score in scikits lernen
  • ValueError: Daten sind nicht binär und pos_label wird nicht angegeben
  • ImportError: kann den Namen '_safe_split' nicht importieren
  • Imputer auf einige Dataframe Spalten in Python
  • Mit sklearn cross_val_score und kfolds passen und helfen Vorhersage Modell
  • Das Beizen eines ausgebildeten Klassifikators ergibt unterschiedliche Ergebnisse aus den Ergebnissen, die direkt von einem neu, aber identisch ausgebildeten Klassifikator erhalten wurden
  • Scikit-Learn: Fehler beim Anpassen des Modells - Input enthält NaN, Unendlichkeit oder einen zu großen Wert für float64
  • Nicht-Integer-Klasse-Labels Scikit-Learn
  • Mit scikit-learn (sklearn), wie man fehlende Daten für die lineare Regression behandelt?
  • Genau replizieren R Text Vorverarbeitung in Python
  • Python ist die beste Programmiersprache der Welt.