sklearn預(yù)測新文本(unseen new data),而不是train_test_split分割出來的測試集:解決方案

首先寫在前面,對于大神們來說,這個問題可能不值得一提。。。


笑哭

問題描述:當(dāng)我在用sklearn框架時,遇到一個問題,一般會用train_test_split去對數(shù)據(jù)進行訓(xùn)練集,測試集分割,然后用訓(xùn)練集去訓(xùn)練分類器,然后正常情況下,一般會用classifier.predict(test_set),得到一個預(yù)測結(jié)果,但我想要的是對全新的原始數(shù)據(jù)去預(yù)測結(jié)果,那要怎么去做呢?然后自然是搜索引擎一頓搜,但發(fā)現(xiàn)無論是百度還是google都沒找到,很奇怪啊,應(yīng)該是一個很常見的問題呀!最后的解決方法如下:

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer

from sklearn.externals import joblib

vectorizer = CountVectorizer(min_df=1)

count = vectorizer.fit_transform(corpus)? # corpus是之前的文本,經(jīng)過去停用詞的預(yù)處理操作

transformer = TfidfTransformer()

tfidf = transformer.fit_transform(count)?

# 這四句話只是常見的提取特征的方法

X_train, X_test, y_train, y_test = train_test_split(tfidf, flag, test_size=0.2)

clf = MultinomialNB().fit(X_train, y_train)? # 這里只是用樸素貝葉斯做個示例

joblib.dump(clf, 'model.pkl')? # 保存分類器

joblib.dump(vectorizer, 'count_vect')? # 保存矢量化,這就是解決問題的核心代碼

# 因為需要使用和訓(xùn)練器相同的矢量器,不然會報錯,提示ValueError dimension mismatch...

new_data = []? # 原始文本

count_vect = joblib.load('count_vect')

tfidf_transformer = TfidfTransformer()

X_new_counts = count_vect.transform(after_process)

X_new_tfidf = tfidf_transformer.fit_transform(X_new_counts)

predicted = clf.predict(X_new_tfidf)

其中joblib也很好用,因為可以將訓(xùn)練好的分類器,矢量保存在本地,這樣就不用重復(fù)去運行代碼去訓(xùn)練了。。。其實在現(xiàn)在各種深度學(xué)習(xí)的今天,常規(guī)的算法還是要掌握的,同時sklearn框架對常規(guī)的算法,特征處理方面的支持與tf相比也有更好的支持,所以都要學(xué)?。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容