2012-04-29 12 views
3

を作成する問題は、私は(サンプルhereに基づいて)次のコードを持っているが、それは動作していない:学ぶscikit:カスタマイズされたCountVectorizerとカイ二乗

[...] 
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(すぐにリリースされる予定)のドキュメントを見ています。 http://scikit-learn/stableがありながら、

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

v = CountVectorizer(analyzer=MyAnalyzer()) 

http://scikit-learn.org/devが(随時変更される可能性があり)次期リリースのドキュメントです:何tokenizer引数がないdocumentation for 0.10、チェックしanalyzeranalyzeメソッドを実装するオブジェクトでなければなりません現在の安定バージョンのドキュメント。

+0

ありがとうございます!ところで、私はまた、スパース行列を配列に変換する必要がありますか? 'ch2.fit_transform(X_train.toarray()、Y_train)'そうでなければ、サブスクリプトできないエラーが発生する –

+0

@DT:これは、疎な行列を扱うように設計されています。あなたのパイプラインの次のステップは何ですか? –

+0

うーん... Strange、chi squareは2つの配列(XとY)を必要とするので、疎な行列を配列に変換しなければならないと思っていました...私の完全なコード(そしてchisquareの新しい問題)は[ここ]ですhttp://stackoverflow.com/questions/10378601/scikit-learn-desired-amount-of-best-features-k-not-selected)、どうぞご覧ください。 –

関連する問題