sklearn预测新文本(unseen new data),而不是train_test_split分割出来的测试集:解决方案

首先写在前面,对于大神们来说,这个问题可能不值得一提。。。


笑哭

问题描述:当我在用sklearn框架时,遇到一个问题,一般会用train_test_split去对数据进行训练集,测试集分割,然后用训练集去训练分类器,然后正常情况下,一般会用classifier.predict(test_set),得到一个预测结果,但我想要的是对全新的原始数据去预测结果,那要怎么去做呢?然后自然是搜索引擎一顿搜,但发现无论是百度还是google都没找到,很奇怪啊,应该是一个很常见的问题呀!最后的解决方法如下:

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer

from sklearn.externals import joblib

vectorizer = CountVectorizer(min_df=1)

count = vectorizer.fit_transform(corpus)  # corpus是之前的文本,经过去停用词的预处理操作

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')  # 保存矢量化,这就是解决问题的核心代码

# 因为需要使用和训练器相同的矢量器,不然会报错,提示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也很好用,因为可以将训练好的分类器,矢量保存在本地,这样就不用重复去运行代码去训练了。。。其实在现在各种深度学习的今天,常规的算法还是要掌握的,同时sklearn框架对常规的算法,特征处理方面的支持与tf相比也有更好的支持,所以都要学!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容