聚类算法(2)
来源:互联网 发布:录制脚本的软件 编辑:程序博客网 时间:2024/06/12 22:19
(接上《聚类算法(1)》)
除了在聚类算法(1)中的分级聚类,关于聚类还可以使用K-均值聚类(也是为了克服分级聚类的两个不足之处)。
算法描述:
这里有比较详尽的算法描述。(嗯,《Programming Collective Intelligence 》上有幅超级好的插图。。。)
说明:
1.rows是什么?
rows是从数据文件中读入的关于单词的频度数据。比如这里的rows,共有32项(有32个博客,即初始时有32个聚类),每项有629个数据(即,有629个单词,当然这些数据只是数字,是某单词(共629个)(该单词保存在其他地方)所对应的频度)。而我们进行的是,根据这些单词,分类那32个博客。故,我们的pearson算法计算的是一个长度629的列表与另一个629长的列表之间的距离。
这个629长的列表即是我们所谓的点(我们要聚类的对象)。
2.clusters是什么?
说clusters是K个中心点。那么K个中心点到底是什么?注意这里的“点”和平常所谓的点是不同的,上面的粗体部分已具体解释。说,clusters是k个中心点,即是说,clusters是个长度为k的列表,表中的每个元素是长度为620的数组(其中为我们随机产生的单词频度)。
那么,
“ 在每一行寻找距离最近的中心点”的意义也就明确了:将这32个条目(每个条目629项数据)中的某些同这k个所谓的中心点相关联。
另,
注意“移动中心点”中的if len(bestmatches[i]) > 0:一句是不可缺少的。因为可能这K个点中存在某些点,没有数据与他们相近,于是他们的长度就为0。
同时注意bestmatches中存的是什么?看代码:bestmatches[bestmatch].append(j),我们知,bestmatches中存放的实际是某条数据在入内数据集中的序号。而在计算平均数时,也是计算的这些所有数据的平均数。
总之,记住这里的点实际上是个表。
最后再append一个Tanimoto算法,用于距离度量。更精确的说,是用于这样的数据的距离度量:该数据中只可能有0,1两种取值,其中0代表不存在,1代表存在。(即yes和no的问题)
注意这里是距离度量,因此,返回0,表示二者之间无距离,即两者喜欢的东西一模一样;返回1,则表示两者不存在都喜欢的东西(因为我们进行的是对一个列表度量距离,该列表可能代表了两个人喜欢的东西的列表)。
最后,贴出完整的代码:
数据聚类算法:
从博客订阅源中生成初始数据:
作树状图:
完
By Kewing
- 聚类算法(2)
- 聚类算法(二):DBSCAN算法
- 聚类算法综述(2)
- 聚类算法(2) ---- DBSCAN
- 聚类算法:DBScan算法
- isoData算法整理 常用算法 聚类算法 kmeans算法
- 聚类算法学习笔记(2)__K-Means聚类算法
- 聚类算法之简单聚类算法(C++)
- 聚类算法(三):层次聚类 Hieriachical算法
- 聚类算法(1)
- 聚类算法(一)
- 聚类算法(一)
- 聚类算法(一) 增类聚类算法
- 机器学习算法(一):聚类算法
- 聚类算法(一):k-均值 (k-means)算法
- 聚类算法实践(四)——算法总结
- 常用聚类算法(一) DBSCAN算法
- kMeans算法(K均值聚类算法)
- LL(1)语法分析之first、follow的实现
- 博弈好题 poi2004 gra
- jdk jre jvm 与 java环境变量
- redhat enterprise 5 简单配置yum 源
- 设置classpath环境变量详解
- 聚类算法(2)
- no search paths found in this AVD's configuration
- 嵌入式操作系统uCLinux
- jdbc连接数据库步骤
- myeclpse8.0
- 第一篇博客
- aspnet_regsql.exe 工具注册数据库
- wamp环境下不支持GD库的解决方法
- Simple guide to speaking foreign languages