大数据十大经典算法讲解
K值的选择以及坏点的剔除
讨论k值、剔除坏点的意义何在?下面以一个例 子来说明k值的重要性。
有一组关于湿度和 温度的数据想把它 划分为冬天和夏天 两部分。(k=2)
气象学家打了个盹不 小心把 (100℃,1000%)和 (101℃,1100%)加 入了数据,并不幸选 取(100℃,1000%) 作为其中一个初始点
算法改进后的实效
a的 的可 n运 K以 s行 M看 算效 e出 法率 a: 要 n基 远 s于 远 算M 高 法a 于 p 传 R 统 e 的 d K u M c e e
Q&A
Min of three due to the EuclidDistance
Kmeans算法详解(4)
步骤四:迭代计算中心点
Kmeans算法详解(5)
步骤五:收敛
Kmeans算法流程
1.从数据中随机抽取k个点作为初始聚类 的中心,由这个中心代表各个聚类 2.计算数据中所有的点到这k个点的距离, 将点归到离其最近的聚类里 3.调整聚类中心,即将聚类的中心移动到 聚类的几何中心(即平均值)处,也就是 k-means中的mean的含义 4.重复第2步直到聚类的中心不再移动, 此时算法收敛 最后kmeans算法时间、空间复杂度是: 时间复杂度:上限为O(tKmn),下限为Ω (Kmn)其中,t为迭代次数,K为簇的数 目,m为记录数,n为维数 空间复杂度:O((m+K)n),其中,K为簇 的数目,m为记录数,n为维数
带canopy预处理的kmeans 算法的优点
canopy可以自动帮我我们确定k值。 • 有多少canopy,k值就选取多少。
Canopy可以帮我们去除“坏点”。
• 去除离群的canopy
带canopy预处理的kmeans 算法的新挑战
Canopy预处理这么好, 我们以后就用它好了! 我看不见得,它虽然解决 kmeans当中的一些问题, 但其自身也引进了新的问题: t1、t2的选取。
Combine函数设计
Combine函数的设计Comb ine函数的输入为〈key′,val ue′〉对,即Map函数的输出.首先, 从value中解析出各个向量,然后 将解析出的向量相加并记录集合中向量 的个数.输出是〈key1′,valu e1′〉对,其中:key1′是聚簇的标 识符;value1′是以上集合中所有 的向量相加所得的向量及集合中向量的 数目
我们主要研究的三个方面因素。
初始中心点的划分
讨论初始中心点意义何在?下面的例子一目了然吧?
初始中心点
收敛后
你 懂 的 …
如何衡量Kmeans算法的精确度 ?
在进一步阐述初始中心点选择 之前,我们应该先确定度量 kmeans的算法精确度的方法。 一种度量聚类效果的标准是: SSE(Sum of Square Error, 误差平方和) SSE越小表示数据点越接近于 它们的质心,聚类效果也就越 好。因为对误差取了平方所以 更重视那些远离中心的点。 一种可以肯定降低SSE的方法 是增加簇的个数。但这违背了 聚类的目标。因为聚类是在保 持目标簇不变的情况下提高聚 类的质量。 现在思路明了了我们首先以缩 小SSE为目标改进算法。
大数据下kmeans算法的并 行策略
单挑OR群殴?!
VS
大数据下kmeans算法的并 行策略
面对海量数据时,传统的聚类算法存在着单位时 间内处理量小、面对大量的数据时处理时间较长、 难以达到预期效果的缺陷以上算法都是假设数据都 是在内存中存储的,随着数据集的增大,基于内存 的KMeans就难以适应.MapReduce 是一个为并行处理大量数据而设计的编程模型。 Kmeans算法都是假设数据都是在内存中存储的, 随着数据集的增大,基于内存的KMeans就难 以适应.MapReduce是一个为并行处理大 量数据而设计的编程模型,它将工作划分为独立任 务组成的集合。
一个运行结果
一个实验
所有实验都是在实验室搭建的Hadoop平台 上运行的.平台有5 台机器,都是四核Inte l Corei3处理器,4GB内存.Hadoo p版本0.20.2, java版本1.6.25.每台机器之间用千 兆以太网 卡,通过交换机连接.实验所用的数据是人工数 据,维度是48维.为了测试算法的性能,实验 中构 造了分别含有10^4,10^5,10^6,2*10^6 条 记录的数据来进行测试.由于KMeans算法 中有 随机初始化中心点的操作,因此对每一组实验重 复执行25次,取其平均执行时间作为最终实验 结 果
2
与分类区别:分类与聚类最大的区别在于分类的目标事先已 知,聚类也被称为无监督机器学习
3
聚类手段:传统聚类算法 ①划分法 ②层次方法 ③基于密 度方法 ④基于网络方法 ⑤基于模型方法
什么是Kmeans算法?
Q1:K是什么?A1:k是聚类算法当中类的个数。
Q2:means是什么?A2:means是均值算法。
Summary:Kmeans是用均值算法把数 据分成K个类的算法!
Kmeans算法详解(1)
步骤一:取得k个初始初始中心点
Kmeans算法详解(2)
步骤二:把每个点划分进相应的簇
Min of three due to the EuclidDistance
Kmeans算法详解(3)
步骤三:重新计算中心点
于是得到两个很不靠 谱的聚类结果。
为什么会出错?
究竟哪里错 了!!! 上面的例子当中出错的原因 很明显。凭直觉我们很容易 知道不可能有这样的天气— —它的气温是100℃,湿度 是1100%。可见坏点对 kmeans的影响之大。另一 方面,季节有春夏秋冬之分, 而我们强行的把它们分为夏 冬两个类也是不太合理的。 如果分为四个类我们也许可 以“中和”掉坏点的影响。
Map-reduce的过程简介
Map函数设计
1Map函数的设计 MapReduce框架中Map 函数 的输入为〈key,value〉对,其 中:key为输入数据记录的偏移量;v alue为当前样本的各维坐标值组成的 向量. 首先计算该向量到各个聚簇中心点的距离, 然后选择最小的距离的聚簇作为该样本所 属的簇,之后输出〈key ′ ,valu e ′〉,其中key ′是距最近的聚簇的标 识符,value′为表示该样本的向 量.
决定性因素
Input & centroids
①数据的采集和抽象 ②初始的中心选择
MaxIterations & Convergence
①最大迭代次数 ②收敛值
factors?
Selected k
① k值的选定
Meassures
①度量距离的手段
主要讨论
初始中 心点 输入的数 据及K值 的选择 距离度 量
The algorithm of Kmeans
小组成员:徐佳、张俊飞、刘志伟、孔祥玉
主要内容:
聚类算法简介
Kmeans算法详解 Kmeans算法的缺陷及若干改进 Kmeans的单机实现与分布式实现策略 Kmeans实战
聚类算法简介
1
聚类的目标:将一组向量分成若干组,组内数据是相似的, 而组间数据是有较明显差异。
带canopy预处理的kmeans 算法
(1)将数据集向量化得到一个list后放 入内存,选择两个距离阈值:T1和T2。 (2)从list中任取一点P,用低计算成 本方法快速计算点P与所有Canopy之 间的距离(如果当前不存在Canopy, 则把点P作为一个Canopy),如果点P 与某个Canopy距离在T1以内,则将点 P加入到这个Canopy; (3)如果点P曾经与某个Canopy的距 离在T2以内,则需要把点P从list中删 除,这一步是认为点P此时与这个 Canopy已经够近了,因此它不可以再 做其它Canopy的中心了; (4)重复步骤2、3,直到list为空结 束
改进的算法——二分 Kmeans算法
为了克服k均值算法收敛于局部的问题,提出了二分k 均值算法。该算法首先将所有的点作为一个簇,然后 将该簇一分为二。之后选择其中一个簇继续划分,选 择哪个簇进行划分取决于对其划分是否可以最大程度 降低SSE值。 伪代码如下: 将所有的点看成一个簇 当簇数目小于k时 对于每一个簇 计算总误差 在给定的簇上面进行K均值聚类(K=2) 计算将该簇一分为二后的总误差 选择使得误差最小的那个簇进行划分操作
全局最小值
二分kmeans真 的能使SSE达 到全局最小值 吗? 从前面的讲解可以看到二分 kmeans算法的思想有点类 似于贪心思想。但是我们会 发现贪心的过程中有不确定 的因素比如:二分一个聚类 时选取的两个中间点是随机 的,这会对我们的策略造成 影响。那么如此一来二分 kmeans算法会不会达到全 局最优解呢?答案是:会! 尽管你可能惊诧于下面的说 法,但全局最小值的定义却 是:可能的最好结果。
Reduce函数设计
Reduce函数的输入是〈key2,va lue2〉键值对,其中:key2为聚簇的 标识符;value2为map节点处理的聚 簇中含有的样本的个数及用向量表示的聚簇的 中心点vectortemp.输出为〈ke y2′,value2′〉对,其中:key′为 聚簇的标识符;value′为新的聚簇中 心.Reduce函数首先从函数的输入中解 析出属于同一个聚簇的样本的个数及各个ma p节点传过来的vectortemp,然后 将个数及各个vectortemp相加,之 后将所得到的向量除以个数得到新的中心点坐 标。
二分Kmeans算法的效果
既然是改进算法就要体现改 进算法的优越性。为此控制 变量,在相同的实验环境下, ①取相同的k值取。 ②选取相同的的距离度量标 准(欧氏距离)
③在相同的数据集下进行测 试。
一组实验结果
一组不好的初始点产生的 Kmeans算法结果 二分kmeans产生的结果
要强调的是尽管只是这一组实验不得以得出二分kmeans的 优越性,但是经过大量实验得出的结论却是在大多数情况下 二分kmΒιβλιοθήκη ans确实优于朴素的kmeans算法。