sklearn 文本分类器做预测时,如何拿到预测结果。。。

2016-01-27 18:41:25 +08:00
 rockivy

我知道这个问题比较奇怪。。。

最近在拿 sklearn 做中文文本分类器,
网上找到的例子都是拿带标签的数据,二八划分后,八成用于训练模型,两成用于测试,
然后分析测试结果看精确度。

现在,我已经使用训练数据做好了模型训练(存在文本分类器的对象了),
拿一段之前数据集里面没有的文本数据,使用训练好的文本分类器做类别预测,
问题是如何拿到预测的类别的名称呢。。。

代码如下:

# cls 是之前已经训练好的文本分类器对象
pred = clf.predict(X_new)

怎样从预测结果 pred ( ndarray )获取到分类的类别名称呢?

我有尝试过如下的方式去获取:

label_list = list()
for index in pred:
    label_list.append(training_data.target_names[index])
total = len(label_list)
label_counts = Counter(label_list)

print basename(file_path)
for label, cnt in label_counts.most_common(3):
    print '%s of %.4f' % (label, float(cnt)/total)

主要就是用测试结果比对训练数据的标签: training_data.target_names
但是这样出来的预测类别名称显然不对(测试了多次,包括拿训练数据也再次做了预测,基本都不对)。

不知道哪位可以指点一二,感激不尽~~~

16519 次点击
所在节点    Python
27 条回复
rockivy
2016-01-31 17:39:21 +08:00
@RangerWolf 可以的,明天到公司后贴,贴好了通知你
rockivy
2016-02-01 14:50:42 +08:00
@RangerWolf @KIDJourney 及楼上各位:
代码我放在了:
https://github.com/rocky1001/Machine-Learning/tree/master/text_classifier

netease_news_classifier.py 是完整代码(包括模型训练与加载待预测数据)
netease_traning_data.zip 是使用的训练数据,大约抓取了网易新闻 11 个频道下 3-5 天的新闻正文数据
netease_predict_data.zip 是待预测数据目录,里面新建了 unknown 这一级 folder ,解决了原 po 的问题。

有需要的同学可以参考~~~
demon014
2016-02-25 09:07:38 +08:00
@rockivy 我想知道怎么用你的这个去分类 TXT 文件。。。还有怎么去把 TXT 转成这个格式
O(∩_∩)O 新人求罩
rockivy
2016-02-25 11:31:47 +08:00
@demon014 很简单,两个方法:
1. 使用 load_files 加载待分类 txt 文件,则需要按照上面的所说的,新增一级 unknown 目录;
2. 不使用 load_files 加载,直接将待分类的 txt read 出来,作为 list 的一个 element ,将这个 list 扔给 predict 去做预测即可。(多个 txt 就是多个 list element )
3. 如果训练或是待分类数据在一个 txt ,以 [行] 来区分,我改了一下 sklearn.datasets.load_files 方法,可以将每行加载为一个样本,代码见:
https://github.com/rocky1001/Machine-Learning/blob/master/text_classifier/load_files.py
demon014
2016-02-29 08:08:15 +08:00
@rockivy 谢谢,最后弱弱的问一下,你是用啥爬的数据,我想爬一下其他的。
rockivy
2016-02-29 09:05:16 +08:00
大规模的抓取推荐 scrapy 。
不过我这边的规模很小,就自己用 python 写了几个简单的小爬虫,在我的 github 上有,你可以找找看。
rockivy
2016-02-29 09:06:11 +08:00
@demon014 上面忘记 @了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/253802

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX