从本节开始,将介绍无监督学习。今天整理了无监督学习中的k均值聚类算法和MapReduce部分的内容。本部分是8月24号的内容。
9. k均值聚类算法
(1)k均值聚类算法
优点:易于实现。
缺点:可能收敛到局部最小值,在大规模的数据集上的收敛速度慢。
适用数据类型:数值型。
可以用的误差指标如误差的平方和(Sum of Squared Error,即SSE)来评价算法的效果。k值是需要事先指定的。针对于k均值中的缺陷,通过采用更有效的二分k均值的聚类算法来改进。
算法的工作流程:首先选择k个初始值作为质心,然后将数据中的每一点分配到一个簇中,即为每一个点找到距其最近的质心,将其分配给该质心所在的簇中。其次,将每个簇的质心更新为该簇中所有点的平均值。
(2)二分k均值算法
算法的工作流程:首先将所有的点看做是一个簇,然后将这个簇一分为二。之后选择一个簇继续进行细分,选择哪一个簇进行划分取决于对其划分是否可以最大程度地降低SSE的值(即选择有最大误差的簇进行划分)。上述基于SSE的划分不断重复,直到得到用户指定的簇数目为止。
通过和(1)进行对比,可以发现:聚类(2)会收敛到全局最小值,而(1)偶尔会陷入到局部最小值。
(3)示例分析
采用二分k均值算法将地图上的点进行聚类。
(4)除了(1)和(2)之外,还有一种被称为层次聚类的方法也被广泛使用。
14. 大数据与MapReduce
主要介绍内容:(1)介绍MapReduce和Hadoop,用Python编写MapReduce作业。其中,Hadoop是MapReduce框架的一个免费开源实现。 (2)使用亚马逊的Web服务实现在多台机器上运行代码。
(3)用Python自动执行MapReduce作业的mrjob框架,使用mrjob搭建分布式SVM,以实现并行训练分类器。
(1)MapReduce
1)包括:map阶段(mapper),sort/combine阶段,reduce阶段(reducer)。
各个阶段之间不做数据交流。
数据被重复放在不同的机器上,以防某个机器失效。
mapper和reducer传输的数据形式是key/value对。
2)Hadoop流
参考文献:《Hadoop实战》、官方文档(http://hadoop.apache.org/)、《Mahout in Action》。
Hadoop流类似于Linux中的管道(符号是|,实现将一个命令的输出作为另一个命令的输入)。
(2)在亚马逊的Web服务上运行Hadoop
Web服务:AWS(http://aws.amazon.com/),租赁大规模计算基础设施。
(3)mrjob框架
很多机器学习算法不能直接用在MapReduce框架上,不过已经有大多数机器学习算法的MapReduce实现。
SVM中的Platt SMO算法在MapReduce下难以实现,但有一些其它的SVM实现使用了随机梯度下降法求解(如Pegasos)可以在框架下实现。
可以使用mrjob框架和Python来完成MapReduce作业。
(4)没有大数据的问题,一般用不到MapReduce和Hadoop。