只有这个算法思想比较对,其他 的都没有一开始的remove: 原网址:http://www.shahuwang.com/?p=1021

Canopy Clustering 这个算法是2000年提出来的,此后与Hadoop配合,已经成为一个比较流行的算法了。确切的说,这个算法获得的并不是最终结果,它是为其他算法服务的,比如k-means算法。它能有效地降低k-means算法中计算点之间距离的复杂度。Mahout中已经实现了这个算法,不知道其他的机器学习类库和工具中,有多少是实现了这个算法的。感觉上这个算法要实现不难,难在和Hadoop如何结合上。Hadoop完全不懂,这里我就不说那么多了。

好书推荐

首先,我觉得很有必要看一个图先,这个图很好得展示了Canopy聚类的过程。图来自http://picksesame.blogspot.com/2011/05/canopy-clustering.html 可能要FQ。

图中有一个T1,一个T2,我们称之为距离阀值,显然T1>T2,这两个值有什么用呢?我们先确定了一个中心,然后计算其他点到这个中心间的距离,当距离大于T1时,小于T1大于T2时,小于T2时,对这个点的处理都是不一样的。http://micahlabrams.blogspot.com/2011/10/canopy-clustering.html 这篇文章提供了一个很好的伪代码,我觉得看完之后,加上我稍加的解释,就能明白canopy聚类的实现过程了:

while D is not empty





      select element d from D to initialize canopy c





      remove d from D





      Loop through remaining elements in D





           if distance between d_i and c < T1 : add element to the canopy c





           if distance between d_i and c < T2 : remove element from D





      end





      add canopy c to the list of canopies C





end

这里有几点要说明的:D指代一组数据,d_i表示D中的各个数据。

是不是还不够明白?下面用中文进行说明:

1:给我一组存放在数组里面的数据D

2:给我两个距离阈值T1,T2,且T1>T2

3:随机取D中的一个数据d作为中心,并将d从D中移除

4:计算D中所有点到d的距离distance

5:将所有distance<T1的点都归如到d为中心的canopy1类中(注意哦,小于T2的也是小于T1的,所以也是归入到canopy1中的哦)

6:将所有distance<T2的点,都从D中移除。(这一步很关键的,你回去看上面那个图,就明白了)

7:重复步骤4到6,直到D为空,形成多个canopy类

通过上面的描述,能理解T1和T2的作用了否?当与中心的距离大于T1时,这些点就不会被归入到中心所在的这个canopy类中。然当距离小于T1大于T2时,这些点会被归入到该中心所在的canopy中,但是它们并不会从D中被移除,也就是说,它们将会参与到下一轮的聚类过程中,成为新的canopy类的中心或者成员。亦即,两个Canopy类中有些成员是重叠的。这是canopy比较关键和高明的地方了,当然内在的高明之处我也讲不出来,水平不够。而当距离小于T2的时候,这些点就会被归入到该中心的canopy类中,而且会从D中被移除,也就是不会参加下一次的聚类过程了。

不知道现在能明白了否?

如果需要用Python利用Hadoop实现canopy的话,可以参考这篇文章http://atbrox.com/2010/02/08/parallel-machine-learning-for-hadoopmapreduce-a-python-example/ 暂时我是理解不了这篇文章先。如果你会,希望能教一下我。

Canopy聚类算法(经典,看图就明白)的更多相关文章

  1. Canopy聚类算法

    Canopy聚类算法(经典,看图就明白) 聚类算法. 这个算法获得的并不是最终结果,它是为其他算法服务的,比如k-means算法.它能有效地降低k-means算法中计算点之间距离的复杂度. 图中有一个 ...

  2. canopy聚类算法的MATLAB程序

    canopy聚类算法的MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. canopy聚类算法简介 Canopy聚类算法是一个将对象分组到 ...

  3. Python实现 K_Means聚类算法

    使用 Python实现 K_Means聚类算法: 问题定义 聚类问题是数据挖掘的基本问题,它的本质是将n个数据对象划分为 k个聚类,以便使得所获得的聚类满足以下条件: 同一聚类中的数据对象相似度较高 ...

  4. Canopy聚类算法分析

          原文链接:http://blog.csdn.net/yclzh0522/article/details/6839643 Canopy聚类算法是可以并行运行的算法,数据并行意味着可以多线程进 ...

  5. 机器学习——详解经典聚类算法Kmeans

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第12篇文章,我们一起来看下Kmeans聚类算法. 在上一篇文章当中我们讨论了KNN算法,KNN算法非常形象,通过距离公 ...

  6. 【LeetCode-面试算法经典-Java实现】【199-Binary Tree Right Side View(从右边看二叉树)】

    [199-Binary Tree Right Side View(从右边看二叉树] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 代码下载[https://github.co ...

  7. 看图轻松理解数据结构与算法系列(NoSQL存储-LSM树) - 全文

    <看图轻松理解数据结构和算法>,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握.本系列包括各种堆.各种队列.各种列表.各种树.各种图.各种排序等等几十篇的样子. 关于LSM树 ...

  8. 算法学习导图+经典排序算法PHP实现

    周末抽时间整理下算法,完整导图可点击下面链接获取. 点我看完整算法导图 八种排序算法的php实现 代码如下 拷贝后可直接运行 先上个运行后的图 代码:(有的自己些的 有的根据网友整理) <?ph ...

  9. Kmeans聚类算法原理与实现

    Kmeans聚类算法 1 Kmeans聚类算法的基本原理 K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一.K-means算法的基本思想是:以空间中k个点为中心进行聚类,对 ...

随机推荐

  1. ScrollView垂直滚动控件

    ScrollView垂直滚动控件 一.简介 二.方法 1)ScrollView垂直滚动控件使用方法 1.在layout布局文件的最外层建立一个ScrollView控件 2.在ScrollView控件中 ...

  2. compile to 32-bit elf file

    nasm -f elf -o a.o a.asm gcc -c -m32 -o b.o b.c ld -s -m elf_i386 -Ttext 0x30400 -o b.bin b.o a.o

  3. java: BufferedReader简单的菜单

    BufferedReader简单的菜单 Menu boolean flag; public Menu() { while(true) { this.show(); } } public void sh ...

  4. release和retain还有多少人在用

    这年头,看到做IOS开发的专业公司,居然还在用release和retain这样的内存管理方式,是为了表示他很厉害吗? 我只能说他没有跟上时代的潮流,或者就是参加了某种老掉牙的IOS速成培训再入行的. ...

  5. LeetCode OJ:Minimum Size Subarray Sum(最小子数组的和)

    Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...

  6. MySQL for Mac在Mac终端导入导出.sql文件

    https://www.cnblogs.com/code4app/p/6222310.html 1.导入 打开终端输入:(前提是已经配置过MySQL环境变量) mysql -u root -p cre ...

  7. python编程实例-统计apache进程占用的物理内存

    #!/usr/bin/env python import os from subprocess import PIPE,Popen def getPids(): p = Popen(['pidof', ...

  8. 剑指offer--3.用两个栈实现队列

    快速刷一遍,先捏软柿子 ----------------------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度 ...

  9. hdu4771 Stealing Harry Potter's Precious(DFS,BFS)

    练习dfs和bfs的好题. #include<iostream> #include<cstdio> #include<cstdlib> #include<cs ...

  10. opencv中VideoCapture和cvCapture有什么区别?

    VideoCapture和cvCapture其实是一样的,你可以去看看源码,VideoCapture其实在内部调用了cvCapture.这是不同 版本的opencv导致的.我接触到的opencv有过一 ...