Я пытаюсь создать простой классификатор вопросов, используя Scikit-learn. В настоящее время я могу классифицировать вопрос в соответствующие классы, используя мешок словарного подхода, используя функцию countvectorizer Scikit. Теперь я хочу создать и добавить пользовательские функции с существующими функциями, созданными с помощью countvectorizer.Как создать нашу функцию экстрактора функций и использовать ее с countvectorizer в конвейере в Scikit-learn
Предположим, я хочу создать функцию, которая проверяет, присутствует ли номер телефона в вопросе или нет, и другая функция, которая выберет длину вопроса.
Итак, каков способ создания и объединения всех функций вместе.
С этой link я попробовал этот шаблон для извлечения пользовательской особенности
`от sklearn.base импорта BaseEstimator, TransformerMixin
класса 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`
но когда при я поставил свою продукцию в трубопровод с помощью countvectorizer, например
ppl = Pipeline([
('feats', FeatureUnion([
('ngram', CountVectorizer()), # can pass in either a pipeline
('ave', SampleExtractor()) # or a transformer
])),
('clf', LinearSVC()) # classifier
])
я получаю ошибку
ValueError: blocks[0,:] has incompatible row dimensions
Я думаю, что эта ошибка может быть связана с матрицей как функции имеют не одного измерения, но я не понимаю, как решить ее.
Ваш метод преобразования SampleExtractor() уменьшает количество строк? Если это так, это не приемлемое преобразование, чтобы вставить в конвейер, поскольку только X преобразуется, а не y (а оба X и y должны иметь одинаковое количество строк). – David
Dhiraj, Вы могли заставить это работать? – Senthil