2017-04-04 131 views
2

我想要做的是在sklearn中使用hashingVectorizer和tfidfTransformer增量學習垃圾郵件過濾器。 這裏是我的代碼 -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] [「消息」]包含100個messages.I要追加hashingVectorizer的結果與之前的結果,這樣我可以在tfidfTransformer以此爲hashingVectorizer是無狀態和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 

我應該怎麼辦?

+0

你能解釋更多的你正在尋找在這裏實現什麼? –

+0

在每次迭代中,我想將hashingVectorizer的新結果追加到前一個結果中,以便在每次迭代中我都有包含所有先前迭代結果的矩陣。此矩陣然後用作tfidfTransformer的輸入,它將矩陣轉換爲標準化tf-idf表示。 –

回答

2

由於scikit learn HashingVectorizer回報SciPy的稀疏矩陣,你需要使用scipy.sparse.vstack,這東西看起來像:

temparr = vstack(temparr,essages_bow) 
+0

謝謝,它的作品,但語法有輕微修改 - 'temparr = vstack((temparr,messages_bow))' –