Я использую scikit-learn и создаю конвейер. Как только строится конвейер, я использую GridSearchCV для поиска оптимальной модели. Я работаю с текстовыми данными, поэтому я экспериментирую с разными стволовыми клетками. Я создал класс, называемый Preprocessor, который берет класс стеблемера и векторика, затем пытается переопределить метод build_analyzer метода векторизации, чтобы включить данный стеблемер. Тем не менее, я вижу, что set_params GridSearchCV просто прямой доступ к переменным экземпляра - то есть он не будет повторно создать экземпляр векторизатор с новым анализатором, как я делал это:Метод переопределения для набора классов, реализующих интерфейс
class Preprocessor(object):
# hard code the stopwords for now
stopwords = nltk.corpus.stopwords.words()
def __init__(self, stemmer_cls, vectorizer_cls):
self.stemmer = stemmer_cls()
analyzer = self._build_analyzer(self.stemmer, vectorizer_cls)
self.vectorizer = vectorizer_cls(stopwords=stopwords,
analyzer=analyzer,
decode_error='ignore')
def _build_analyzer(self, stemmer, vectorizer_cls):
# analyzer tokenizes and lowercases
analyzer = super(vectorizer_cls, self).build_analyzer()
return lambda doc: (stemmer.stem(w) for w in analyzer(doc))
def fit(self, **kwargs):
return self.vectorizer.fit(kwargs)
def transform(self, **kwargs):
return self.vectorizer.transform(kwargs)
def fit_transform(self, **kwargs):
return self.vectorizer.fit_transform(kwargs)
Таким образом, вопрос: как я могу переопределить build_analyzer для всех классов векторизации, переданных в?