Twenty Newsgroups Classification实例任务(完结篇)
Twenty Newsgroups Classification实例任务跑的是哪个算法?就是bayesian,也就是我们说的贝叶斯,首先不管你是否了解贝叶斯算法(说实话,我真的不知道这个算法的原理),如果你看了这篇博客,至少应该了解如何对数据 进行处理,然后就可以分类了,不管它是啥算法,好,来开始。
接上篇系列blog: Twenty Newsgroups Classification实例任务之TrainNaiveBayesJob(一) ,其实贝叶斯算法从上篇博客才开始算是开始,之前的都是文本处理的内容,不看也可以,作用不大(下篇博客就说针对一般的直接数值型输入文件如何应用贝叶斯算法)。
首先来分析下原始数据:原始数据有20个文件夹,每个文件夹里面有n个子文件,经过一系列的转换每个子文件被用一组单词和单词出现的次数(次数也是经过转换的,好像叫做tfdif之类的,具体没咋了解)来表示,所以可以看做如下的形式:
directory1:{
direcctory1_file1:[word_a:3.2,word_b:2.2...]
directory1_file2:[word_a:3.2,word_b:2.2...]
}
directory2:{
direcctory2_file1:[word_a:3.2,word_b:2.2...]
directory2_file2:[word_a:3.2,word_b:2.2...]
}
...TrainNaiveByaesJob的第一个任务其实就是把20个文件中各自所有文件整合到如下的形式(所谓的整合就是把对应单词的出现次数全部相加):
directory1:{
direcctory1_files:[word_a:6.4,word_b:4.4...]
}
directory2:{
direcctory2_files:[word_a:6.4,word_b:4.4...]
}
...然后来分析index的问题,上次大概说了下意思,这里详细分析下:
TrainNaiveBayesJob里面的createLabelIndex方法里面的
(1)首先,原始数据是1到10行的一个向量集合,每个向量由a,b,c三个属性,最后面是它的标识,比如第10行(行号为10),属于第4类;所以标识有4个,属性(对应于前面的单词个数)有3个;(2)计算weightsPerLabel(4*1向量),weightsPerFeature(1*3向量)分别由图中黄色格子标出,scoreFeatureAndLabel(4*3向量)由图中红色字体标出
(3)按照最上面的计算公式就可以计算出来第一行数据的label_1的参数值,然后计算label_2的参数值,一直到label_4的参数值,然后求出这些参数值的最大值所在的label就是这行数据应该被分入的标识了。看到上面的10行数据有两行是被分错了。
这个,好吧,基本就是mahout中bayesian算法的实现了,不过说实话,贝叶斯算法就是这样的?
下篇,针对这样的数据应用贝叶斯算法:
0.20.30.410.320.430.4510.230.330.5412.42.52.622.32.22.125.47.27.235.67635.87.16.33665.431112134敬请期待。。。
分享,成长,快乐
转载请注明blog地址:http://blog.csdn.net/fansy1990