2017-04-04 9 views
2

私がしたいことは、sklearnのhashingVectorizerとtfidfTransformerを使用してスパムフィルタを段階的に学習することです。 ここhashingVectorizerはステートレスであるとして100 messages.I iがtfidfTransformerでこれを使用できるように、前の結果にhashingVectorizerの結果を追加したい含まれている私のコード -HashingVectorizerの前の結果の末尾にHashingVectorizerの結果を追加する

for i in range(0,sz-1): 

    messages_bow = HashingVectorizer(analyzer=split_into_lemmas,non_negative=True,n_features=3000).transform(final[i]['message']) 
    if i==0: 
     temparr=messages_bow 
    else: 
     temparr.append(messages_bow) 
    tfidf_transformer = TfidfTransformer().fit(temparr) 
    messages_tfidf = tfidf_transformer.transform(messages_bow) 
    spam_detector=MB.partial_fit(messages_tfidf,final[i]['label'],classes=['ham','spam']) 

    messages_bow = HashingVectorizer(analyzer=split_into_lemmas,non_negative=True,n_features=3000).transform(final[i+1]['message']) 
    #tfidf_transformer = TfidfTransformer().fit(messages_bow) 
    messages_tfidf = tfidf_transformer.transform(messages_bow) 
    predictions=spam_detector.predict(messages_tfidf) 
    L=list(np.array(predictions)) 
    perf_measure(list(np.array(final[i+1]['label'])),L) 
    val=val+accuracy_score(final[i+1]['label'],predictions) 

最終[I] [「メッセージ」]でありますtfidfTransformerはステートフルです。しかし、私は、次の を取得していますエラー -

temparr.append(messages_bow) 
File "/home/aditya/anaconda2/lib/python2.7/site-packages/scipy/sparse/base.py", line 525, in __getattr__ 
raise AttributeError(attr + " not found") 
AttributeError: append not found 

私は何をすべき? scikit learn HashingVectorizerリターンあなたがscipy.sparse.vstackを使用する必要がscipyのダウンロード疎行列以来

+0

あなたがここに達成するために探しているより多くのものを説明することができますか? –

+0

各繰り返しでhashingVectorizerの新しい結果を前回の結果に追加したいので、各繰り返しごとに以前のすべての繰り返しの結果を含む行列があります。この行列は、行列を正規化されたtfidfTransformerの入力として機能しますtf-idf表現。 –

答えて

2

、次のようになります何か:

temparr = vstack(temparr,essages_bow) 
+0

ありがとう、それは動作しますが、構文に若干の変更があります。 'temparr = vstack((temparr、messages_bow))' –

関連する問題