The 20 Newsgroups数据集合收集了大约20,000 个新闻群组的文档,它们被划分成为大约20个新闻组。在机器学习领域,这个数据集合被广泛的应用与分类和聚类测试数据集。下面是介绍如何利用这个数据集合来进行分类。
(本文是对https://cwiki.apache.org/confluence/display/MAHOUT/Twenty+Newsgroups的翻译)
准备工作:
(1)首先确保安装了hadoop和mahout,关于hadoop和mahout的安装与配置,可以参考hadoop.apache.org 和mahout.apache.org中的guide部分,可以让你快速入门。
(2)确保你安装了maven,这个是为后边的编译做准备。
(3)环境变量 设定
export HADOOP_HOME hadoop的trunk目录
export MAHOUT_HOME hadoop的trunk目录
mahout中例子程序的运行过程详细说明
1 首先启动hadoop start-all.sh
2 (此步骤仅仅是在下载的是mahout的源文件是需要)进入mahout的源trunk目录,运行 mvn install,对mahout进行编译并创建一个mahout job。
3运行mahout中自带的20 newsgroup 例子。
./examples/bin/classify-20newsgroups.sh
这个shell脚本将为你完成以下工作:下载20-new-bydat.tar.gz数据集合文件;抽取数据集合;为训练分类器生成符合要求的输入数据集合;生成测试分类的输入数据集合;运用训练数据集合训练分类器,生成分类模型;运用测试数据集合测试分类器。
最终输出的内容格式如下:
输出的是一个混合矩阵:
======================================================= Confusion Matrix ------------------------------------------------------- a b c d e f g h i j k l m n o p q r s t u <--Classified as 381 0 0 0 0 9 1 0 0 0 1 0 0 2 0 1 0 0 3 0 0 | 398 a = rec.motorcycles 1 284 0 0 0 0 1 0 6 3 11 0 66 3 0 1 6 0 4 9 0 | 395 b = comp.windows.x 2 0 339 2 0 3 5 1 0 0 0 0 1 1 12 1 7 0 2 0 0 | 376 c = talk.politics.mideast 4 0 1 327 0 2 2 0 0 2 1 1 0 5 1 4 12 0 2 0 0 | 364 d = talk.politics.guns 7 0 4 32 27 7 7 2 0 12 0 0 6 0 100 9 7 31 0 0 0 | 251 e = talk.religion.misc 10 0 0 0 0 359 2 2 0 1 3 0 1 6 0 1 0 0 11 0 0 | 396 f = rec.autos 0 0 0 0 0 1 383 9 1 0 0 0 0 0 0 0 0 0 3 0 0 | 397 g = rec.sport.baseball 1 0 0 0 0 0 9 382 0 0 0 0 1 1 1 0 2 0 2 0 0 | 399 h = rec.sport.hockey 2 0 0 0 0 4 3 0 330 4 4 0 5 12 0 0 2 0 12 7 0 | 385 i = comp.sys.mac.hardware 0 3 0 0 0 0 1 0 0 368 0 0 10 4 1 3 2 0 2 0 0 | 394 j = sci.space 0 0 0 0 0 3 1 0 27 2 291 0 11 25 0 0 1 0 13 18 0 | 392 k = comp.sys.ibm.pc.hardware 8 0 1 109 0 6 11 4 1 18 0 98 1 3 11 10 27 1 1 0 0 | 310 l = talk.politics.misc 0 11 0 0 0 3 6 0 10 6 11 0 299 13 0 2 13 0 7 8 0 | 389 m = comp.graphics 6 0 1 0 0 4 2 0 5 2 12 0 8 321 0 4 14 0 8 6 0 | 393 n = sci.electronics 2 0 0 0 0 0 4 1 0 3 1 0 3 1 372 6 0 2 1 2 0 | 398 o = soc.religion.christian 4 0 0 1 0 2 3 3 0 4 2 0 7 12 6 342 1 0 9 0 0 | 396 p = sci.med 0 1 0 1 0 1 4 0 3 0 1 0 8 4 0 2 369 0 1 1 0 | 396 q = sci.crypt 10 0 4 10 1 5 6 2 2 6 2 0 2 1 86 15 14 152 0 1 0 | 319 r = alt.atheism 4 0 0 0 0 9 1 1 8 1 12 0 3 6 0 2 0 0 341 2 0 | 390 s = misc.forsale 8 5 0 0 0 1 6 0 8 5 50 0 40 2 1 0 9 0 3 256 0 | 394 t = comp.os.ms-windows.misc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | 0 u = unknown
这个混合矩阵的意思说明:
a~u分别表示了一类。
第一行的数据
381 0 0 0 0 9 1 0 0 0 1 0 0 2 0 1 0 0 3 0 0 | 398 a = rec.motorcycles
意思为rec.motorcycles 本来是 属于 a,有381 篇文档被划为了a 类,这个是正确的数据,其它的分别表示划到 b~u类中的数目。我们可以看到其正确率为 381/398=0.95728643216080402010050251256281 ,可见其正确率还是很高的了。