Ich versuche, eine einfache Frage Klassifizierer mit Scikit-lernen zu erstellen. Derzeit bin ich in der Lage, die Frage in entsprechende Klassen zu klassifizieren, indem ich die "bag of word" -Ansatze benutze, die die countvectorizer-Funktion von Scikit verwenden. Jetzt möchte ich benutzerdefinierte Funktionen mit vorhandenen Funktionen, die mit countvectorizer erstellt wurden, erstellen und hinzufügen.So erstellen Sie unsere benutzerdefinierte Feature-Extraktor-Funktion und verwenden Sie sie mit countvectorizer in der Pipeline in Scikit-lernen
Angenommen, ich möchte eine Funktion erstellen, die prüft, ob eine Telefonnummer vorhanden ist oder nicht und eine weitere Funktion, die die Länge der Frage extrahiert.
Also, was ist der Weg, um alle Funktionen zusammen zu generieren und zusammenzuführen.
Von diesem link habe ich versucht, diese Vorlage für kundenspezifische Merkmalsextraktion
`von sklearn.base Import BaseEstimator, TransformerMixin
Klasse SampleExtractor (BaseEstimator, TransformerMixin):
def __init__(self, vars):
self.vars = vars # e.g. pass in a column name to extract
def transform(self, X, y=None):
return do_something_to(X, self.vars) # where the actual feature extraction happens
def fit(self, X, y=None):
return self # generally does nothing`
aber wenn, wenn Ich setze seine Ausgabe in die Pipeline mit countvectorizer wie
ppl = Pipeline([
('feats', FeatureUnion([
('ngram', CountVectorizer()), # can pass in either a pipeline
('ave', SampleExtractor()) # or a transformer
])),
('clf', LinearSVC()) # classifier
])
i erhalten Fehler
ValueError: blocks[0,:] has incompatible row dimensions
Ich denke, diese Fehler aufgrund Matrix sowohl Feature sind nicht gleicher Dimension sein kann, aber ich verstehe nicht, wie es zu lösen.
Reduziert die 'SampleExtractor()' Transformationsmethode die Anzahl der Zeilen? Wenn dies der Fall ist, ist dies keine akzeptable Transformation, die in eine Pipeline eingefügt werden soll, da nur X transformiert wird, nicht y (und sowohl X als auch y müssen die gleiche Anzahl von Zeilen haben). – David
Dhiraj, hast du das funktionieren lassen? – Senthil