基于Hadoop/MapReduce 的K_NN算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于Hadoop/MapReduce 的K_NN算法
摘要分布式框架Hadoop/MapReduce的逐渐流行,本文针对机器算法K最邻近算法,阐述其在Hadoop/MapReduce上的实现过程,其中对于文本的相似度会利用余弦定理还处理,这样在Hadoop/MapReduce环境下实现K-NN算法对位置类别的文本分类。

机器算法在Hadoop/MapReduce上的实现,同时增加了算法的可扩展性和分析文本的能力,适应于当今大规模数据处理的要求。

关键词K-NN;Hadoop/MapReduce;文本分类;余弦定理;机器学习
现在的比较流行的机器算法有决策树、朴素贝叶斯、K-Means、SVM、K最邻近算法等等,除了K最邻近算法其他一部分的算法的MapReduce实现已经在Mahout成功实现。

基于Hadoop/MapReduce的分类文本分类技术需要先将采样文本事先上传到HDFS系统当中去,便于Hadoop/MapReduce处理。

1 相关技术介绍
1.1 文本相似度算法-余弦定理
在最近邻学习中,目标函数值可以是离散值的也可以是实值。

本文中处理的对象为文本数据,所以距离公式用上面的文本相似度计算公式余弦定理公式代替。

K最邻近算法具体执行如下:
1)将每个训练样例加入到列表training_examples
开始分类:
2)给定一个待分类的文档Docq
3)在training_examples中,用余弦定理公式选出与Docq 得出的文本相似值最大的k个实例,并用Doc1...Dock表示,
4)统计在Doc1...Dock中,各个类别的比例,在这K个文档中,文档数最大的类别,既是待分类文档Docq的类别
K最近邻算法思想主要靠周围非常有限的邻近的样本,与其他机器学算法不同的是,不是靠判别类域的方法来确定所属类别的,所以对于一般类的交叉或者重叠十分多的待分样本数据说,K最近邻方法较其他方法更为适合。

K最近邻在用途上,不仅可以用于分类,还能用于回归计算等等方面。

通过找出一个样本的k个最近邻居,将这些邻近的属性的平均值赋给该样本,就可以得到该样本的属性。

其他比较有用的方式是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成正比等等。

1.3 Hadoop/MapReduce简介
1.3.1 Map阶段
在map task运行是本地程序会在内存中生成一个环形的内存缓冲区,map task处理后生成的数据会放入这个环形缓冲区,当内存被占用达到一定的比例时候,就启用一个叫做spill的线程进行溢写,也就是将环形缓冲区中的数据写入磁盘,在这个操作前,spill线程会依据当前数据要送达的reduce,将数据划分为对应的分区(partition),每个分区中,线程会按照key进行排序(一般默认调用的快速排序法),当死皮spill线程处理完map task输出的数据后,系统开始用merge 函数来合并spill线程生成的文件,如果用户在编写的时候设置的combine函数的话,接下来调用combine函数,来进行本地的合并相同key的数据处理。

1.3.2 Shuffle阶段
简单地拉取数据。

Reduce进程启动一些数据copy线程(Fetcher),通过HTTP 方式请求map task所在的TaskTracker获取map task的输出文件。

Copy过来的数据会先放入内存缓冲区中,期间执行的merge主要有两种形式:1)内存到磁盘2)磁盘到磁盘。

当内存中的数据量到达一定阈值,就启动内存到磁盘的merge。

与map 端类似,这也是溢写的过程,这个过程中如果你设置有Combine,也是会启用的,然后在磁盘中生成了众多的溢写文件。

第一个merge方式一直在运行,直到没有map端的数据时才结束,然后启动第二种磁盘到磁盘的merge方式生成最终的那个文件。

1.3.3 Reduce阶段
进入Reduce阶段后,会得到Shuffle阶段merge生成的“最终文件”。

这里的“最终文件”可能存在于磁盘上,也可能存在于内存中。

默认情况下,这个文件是存放于磁盘中的。

当Reducer的输入文件已定,整个Shuffle才最终结束。

然后就是Reduce Task执行,执行相应用户定义的处理后,把结果放到HDFS上。

关于MapReduce的map阶段中的map函数和reduce阶段中的reduce函数的输入与输出:Map/Reduce框架运转在键值对上,也就是说,框架把作业的输入看为是一组键值对,同样也产出一组键值对做为作业的输出,这两组键值对的类型可能不同。

下面的算法就是依据Hadoop的MapReduce框架进行计算的。

2 基于Hadoop/MapReduce下K-NN算法
整体算法分为数据预处理阶段,训练阶段,分类阶段。

2.1 数据预处理阶段
这一步骤就是去除样本文本数据和待分类文本中的无意义的符号,无意义的词语(例如副词等等),最后处理剩下的单词之间用空格分开,这样就可以减轻文本数据处理的压力,提高效率,然后将样本文本数据上传到HDFS指定目录下,将待分类文本放到指定待处理路径下。

说明:这里面的样本文本数据不同的类别会有不同路径。

下面叙述中记label为所记类别。

2.2 训练阶段。

相关文档
最新文档