2012-04-29 5 views
3

У меня есть следующий код (на основе образцов here), но он не работает:scikit узнать: Проблемы задаваемого пользователем CountVectorizer и ChiSquare

[...] 
def my_analyzer(s): 
    return s.split() 
my_vectorizer = CountVectorizer(analyzer=my_analyzer) 
X_train = my_vectorizer.fit_transform(traindata) 

ch2 = SelectKBest(chi2,k=1) 
X_train = ch2.fit_transform(X_train,Y_train) 
[...] 

Следующая ошибка задается при вызове fit_transform:

AttributeError: 'function' object has no attribute 'analyze' 

Согласно документации, CountVectorizer должен быть создан следующим образом: vectorizer = CountVectorizer(tokenizer=my_tokenizer). Однако, если я это сделаю, я получаю следующую ошибку: "got an unexpected keyword argument 'tokenizer'".

Моя фактическая версия scikit-learn составляет 0,10.

ответ

3

Вы смотрите документацию на 0.11 (скоро будет выпущена), где векторизатор был капитально отремонтирован. Проверьте documentation for 0.10, где нет tokenizer аргумента и analyzer должен быть объектом реализации analyze метода:

class MyAnalyzer(object): 
    @staticmethod 
    def analyze(s): 
     return s.split() 

v = CountVectorizer(analyzer=MyAnalyzer()) 

http://scikit-learn.org/dev документация для предстоящего выпуска (который может измениться в любое время), в то время как http://scikit-learn/stable имеет документация для текущей стабильной версии.

+0

Спасибо! Кстати, я также должен преобразовать разреженную матрицу в массив, не так ли? Например: 'ch2.fit_transform (X_train.toarray(), Y_train)' В противном случае происходит ошибка без индексации –

+0

@DT: это никогда не должно быть необходимым для выбора функции chi², оно предназначено для обработки разреженных матриц. Каков следующий шаг в вашем конвейере? –

+0

Хм ... Странно, квадрат chi требует 2 массива (X и Y), поэтому я думал, что мне нужно преобразовать разреженную матрицу в массив ... Мой полный код (и новая проблема с функциями chisquare) - это [здесь] (здесь) http://stackoverflow.com/questions/10378601/scikit-learn-desired-amount-of-best-features-k-not-selected), не могли бы вы взглянуть? –