原文地址:http://now51jq.blog.51cto.com/3474143/1547434
1. 调用庖丁分词器,分词
grid@server01:~/data$ hadoop jar mrtokenize.jar tokenize.TokenizeDriver /home/grid/data/lesson8 /home/grid/output/sportwords
14/08/31 21:59:33 INFO input.FileInputFormat: Total input paths to process : 10205
.....
14/08/31 22:05:25 INFO mapred.JobClient: Map output records=10205
共处理:10205个文件,耗时 6 分钟
分词后的结果:
badminton 尤伯 伯杯 中国 泰国 挺进 决赛 王仪 仪涵 机敏 回球 月 日 中国 中国队 选手 王仪 仪涵 比赛 中回 回球 她最 最终 战胜 泰国 队 选手 手拉 差诺 当日 武汉 体育 中心 中心体 体育 体育馆 举行 年尤 尤伯 伯杯 羽毛 羽毛球 球赛 决赛 半决赛 中 中国 中国队 总比 比分 战胜 泰国 队 晋级 决赛 新华 新华社 记者 孟永 永民 民摄 关注 体育 了解 更多 体坛 资讯
badminton 尤伯 伯杯 中国 泰国 挺进 决赛 王仪 仪涵 比赛 中 发球 月 日 中国 中国队 选手 王仪 仪涵 比赛 中 发球 她最 最终 战胜 泰国 队 选手 手拉 差诺 当日 武汉 体育 中心 中心体 体育 体育馆 举行 年尤 尤伯 伯杯 羽毛 羽毛球 球赛 决赛 半决赛 中 中国 中国队 总比 比分 战胜 泰国 队 晋级 决赛 新华 新华社 记者 孟永 永民 民摄 关注 体育 了解 更多 体坛 资讯
2. load 分词集
grunt> processed = load'/home/grid/output/sportwords' as (category:chararray, doc:chararray);
3. 随机 20% 生成 测试集
grunt> test = sample processed 0.2;
4. 生成训练集
grunt> jnt =join processed by (category,doc) left outer, test by (category, doc);
grunt> filt_test = filter jnt by test::category is null;
grunt> train = foreach filt_test generate processed::category as category, processed::doc as doc;
5. 导出测试集和训练集
grunt> store test into '/home/grid/data/lesson8.2/test';
6. 统计测试集分类
grunt> test_ct= foreach(group test by category) generate group, COUNT(test.category);
grunt> dump test_ct;
result:
(f1,196)
(golf,206)
(swim,170)
(tennis,187)
(football,209)
(pingpong,220)
(badminton,212)
(billiards,236)
(basketball,201)
(volleyball,204)
7. 统计训练集
grunt> train_ct= foreach(group train by category) generate group, COUNT(train.category);
grunt> dump train_ct;
8. 利用朴素贝叶斯分类器,来训练模型
grid@server01:~/data$ mahout trainclassifier \
> -i /home/grid/data/lesson8.2/train \
> -o /home/grid/output/model-bayes8.2 \
> -type bayes \
> -ng 1 \
> -source hdfs
result:
14/08/31 23:31:15 INFO mapred.JobClient: Map output records=228211
14/08/31 23:31:15 INFO common.HadoopUtil: Deleting /home/grid/output/model-bayes8.2/trainer-docCount
14/08/31 23:31:15 INFO common.HadoopUtil: Deleting /home/grid/output/model-bayes8.2/trainer-termDocCount
14/08/31 23:31:15 INFO common.HadoopUtil: Deleting /home/grid/output/model-bayes8.2/trainer-featureCount
14/08/31 23:31:15 INFO common.HadoopUtil: Deleting /home/grid/output/model-bayes8.2/trainer-wordFreq
14/08/31 23:31:15 INFO common.HadoopUtil: Deleting /home/grid/output/model-bayes8.2/trainer-tfIdf/trainer-vocabCount
14/08/31 23:31:15 INFO driver.MahoutDriver: Program took 1265118 ms (Minutes: 21.0853)
9. 测试模型
grid@server01:~/data$ mahout testclassifier \
> -d /home/grid/data/lesson8.2/test \
> -m /home/grid/output/model-bayes8.2 \
> -type bayes \
> -ng 1 \
> -source hdfs \
> -method mapreduce
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
14
/08/31
23:45:52 INFO bayes.BayesClassifierDriver: =======================================================
Confusion Matrix
-------------------------------------------------------
a b c d e f g h i j <--Classified as
190 0 1 1 0 3 0 0 0 0 | 195 a = basketball
0 249 0 0 0 0 1 0 0 0 | 250 b = billiards
0 0 198 0 0 1 0 0 0 0 | 199 c = badminton
0 0 0 224 0 0 0 0 0 0 | 224 d = football
0 0 0 0 190 0 0 0 0 0 | 190 e = volleyball
0 0 0 0 0 181 0 0 0 0 | 181 f = swim
0 1 0 0 0 0 204 0 0 0 | 205 g = pingpong
1 0 0 0 0 0 0 193 0 0 | 194 h = golf
0 0 0 0 0 0 0 0 196 0 | 196 i = f1
0 0 0 0 0 0 1 0 0 206 | 207 j = tennis
|
10. 用户浏览记录分词,同1
grid@server01:~/data$ hadoop jar mrtokenize.jar tokenize.TokenizeDriver /home/grid/data/les8-usersport /home/grid/lesson8/output/userwords
11. 利用sport 生成的模型对用户浏览内容进行分类
grid@server01:~/data$ hadoop jar mrclassify.jar classifier.ClassifierDriver \
> /home/grid/lesson8/output/userwords \
> /home/grid/lesson8/output/classify \
> /home/grid/output/model-bayes8.2 \
> bayes
result:
grid@server01:~/data$ hadoop fs -cat /home/grid/lesson8/output/classify/part-r-00000 | head -20
Warning: $HADOOP_HOME is deprecated.
10511838|badminton|7
10511838|basketball|5
10511838|billiards|8
10511838|f1|7
10511838|football|11
10511838|golf|5
10511838|pingpong|5
10511838|tennis|2
10511838|volleyball|12
10564290|badminton|2
10564290|basketball|12
10564290|billiards|11
10564290|f1|12
10564290|football|16
10564290|golf|1
10564290|pingpong|18
10564290|swim|6
10564290|tennis|3
10564290|volleyball|7
107879|basketball|7