- 浏览: 1639743 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- C/C++ (16)
- Linux (60)
- Algorithm (41)
- ACM (8)
- Ruby (39)
- Ruby on Rails (6)
- FP (2)
- Java SE (39)
- Java EE (6)
- Spring (11)
- Hibernate (1)
- Struts (1)
- Ajax (5)
- php (2)
- Data/Web Mining (20)
- Search Engine (19)
- NLP (2)
- Machine Learning (23)
- R (0)
- Database (10)
- Data Structure (6)
- Design Pattern (16)
- Hadoop (2)
- Browser (0)
- Firefox plugin/XPCOM (8)
- Eclise development (5)
- Architecture (1)
- Server (1)
- Cache (6)
- Code Generation (3)
- Open Source Tool (5)
- Develope Tools (5)
- 读书笔记 (7)
- 备忘 (4)
- 情感 (4)
- Others (20)
- python (0)
最新评论
-
532870393:
请问下,这本书是基于Hadoop1还是Hadoop2?
Hadoop in Action简单笔记(一) -
dongbiying:
不懂呀。。
十大常用数据结构 -
bing_it:
...
使用Spring MVC HandlerExceptionResolver处理异常 -
一别梦心:
按照上面的执行,文件确实是更新了,但是还是找不到kernel, ...
virtualbox 4.08安装虚机Ubuntu11.04增强功能失败解决方法 -
dsjt:
楼主spring 什么版本,我的3.1 ,xml中配置 < ...
使用Spring MVC HandlerExceptionResolver处理异常
K-means是一个简单容易实现的聚类算法,我们以对一个图片的颜色的RGB值进行聚类为例,
实现这个算法。
K-means算法是一个EM的迭代过程:
1.随机选择k个作为聚类中心
2.E step:
对每一个点,计算它到每一个聚类中心的距离,把这个点分配到最近的聚类中心代表的
聚类中。
3.M step:
重新计算每个聚类的中心:每个聚类中心为该聚类所有点的均值。
重复2~3直到达到最大的迭代次数或者聚类不再发生变化。
可以使用聚类算法对这个图片进行有损压缩。
实现这个算法。
K-means算法是一个EM的迭代过程:
1.随机选择k个作为聚类中心
2.E step:
对每一个点,计算它到每一个聚类中心的距离,把这个点分配到最近的聚类中心代表的
聚类中。
3.M step:
重新计算每个聚类的中心:每个聚类中心为该聚类所有点的均值。
重复2~3直到达到最大的迭代次数或者聚类不再发生变化。
#!/usr/bin/ruby # autor: fuliang http://fuliang.iteye.com/ class RGB attr_accessor :r,:g,:b def initialize(r=0,g=0,b=0) @r,@g,@b = r,g,b end def +(rgb) @r += rgb.r @g += rgb.g @b += rgb.b self end def /(n) @r /= n @g /= n @b /= n self end end def random_k_centers(instances,k) rand_indxes = (0...instances.size).sort_by{rand}[0...k] instances.values_at(*rand_indxes) end def distance(ins1,ins2)#采用余弦值,因为255,255,255和200,200,200颜色基本类似 dot_product = ins1.r * ins2.r + ins1.g * ins2.g + ins1.b * ins2.b mod1 = Math.sqrt(ins1.r * ins1.r + ins1.g * ins1.g + ins1.b * ins1.b) mod2 = Math.sqrt(ins2.r * ins2.r + ins2.g * ins2.g + ins2.b * ins2.b) return 1 - dot_product / (mod1 * mod2) end def k_means_cluster(instances,k,max_iter=100) random_centers = random_k_centers(instances,k) p random_centers instance_cluster_map = {} change_count = 0 clusters = [] 0.upto(max_iter) do |iter_num| clusters = [] puts "iterate #{iter_num} ..." change_count = 0 # E-step instances.each do |instance| min_distance = 1.0/0 min_indx = 0 random_centers.each_with_index do |center,index| current_distance = distance(center,instance) if min_distance > current_distance then min_indx = index min_distance = current_distance end end if instance_cluster_map[instance] != min_indx then#trace the change change_count += 1 instance_cluster_map[instance] = min_indx end clusters[min_indx] ||= [] clusters[min_indx] << instance end puts "change_count=#{change_count}" break if change_count.zero? #M-step clusters.each_with_index do |cluster,index| center = RGB.new cluster.each do |instance| center += instance end center /= cluster.size random_centers[index] = center # update center end end return clusters end instances = [] File.open("rgbs.txt").each_line do |line| line.split(/\t/).each do | rgb | r,g,b = rgb.split(/,/).collect{|e| e.to_i} instances << RGB.new(r,g,b) end end clusters = k_means_cluster(instances,5,100) k_candidates = [] clusters.each do |cluster| sum = cluster.inject(RGB.new) {|sum,ins| sum + ins} candidate = sum / cluster.size k_candidates << candidate end p k_candidates
可以使用聚类算法对这个图片进行有损压缩。
发表评论
-
[zz]推荐系统-从入门到精通
2013-04-20 14:38 2452为了方便大家从理论到实践,从入门到精通,循序渐进系统地理解和掌 ... -
机器学习在公司的分享
2013-02-23 12:38 2862机器学习在公司的分享,ppt见附件,主要简单介绍了机器学习: ... -
Deep learning的一些教程[rz]
2013-02-03 19:14 27060转载自http://baojie.o ... -
[ZZ]计算机视觉、模式识别、机器学习常用牛人主页链接
2012-11-30 13:13 12139牛人主页(主页有很多论文代码) Serge ... -
Deep learning的一些有用链接
2012-11-12 19:09 3462deeplearning tutorials: http:// ... -
信息论学习总结(二)最大熵模型
2012-06-04 08:13 0显然,如果A表示可能的类别,B表示可能的上下文,p应该最大化熵 ... -
信息论学习总结(一)基础知识
2012-06-02 22:57 4365我们考虑一下一个离散的随机变量x,当我们观察到它的一个值,能给 ... -
loss function
2012-05-11 22:54 2554几种损失函数: 对于回归问题: 平方损失: 绝对值损失: −i ... -
Large-Scale Support Vector Machines: Algorithms and Theory
2012-04-12 00:32 0支持向量机是一种流行 ... -
使用SGD(Stochastic Gradient Descent)进行大规模机器学习
2012-05-11 23:01 44025使用SGD(Stocha ... -
构建自己的DSL之三 抓取文件管理
2011-07-18 23:26 1714转载请标明出处:http://fuliang.iteye.co ... -
构建自己的DSL之二 抓取文本处理
2011-07-11 23:18 2255转载请标明出处:http://fuliang.iteye.co ... -
构建自己的DSL之一 Simple Crawler
2011-07-11 22:08 2967转载请标明出处:http://fuliang.iteye.co ... -
paper and book阅读
2011-06-28 23:19 2613我微博每周读论 ... -
模式识别和机器学习 笔记 第四章 线性分类模型(二)
2011-05-29 23:13 04.3 概率判别模型 对于两类的分类问题,我们已经看到c1的后 ... -
模式识别和机器学习 笔记 第四章 线性分类模型(一)
2011-05-26 23:36 9806转载请标明出处: http:/ ... -
模式识别和机器学习 第六章 核方法
2011-05-11 23:55 0在第3,4章,我们已经考虑了回归和分类的线性参数模型,参数向量 ... -
开始读Jordan大神的《Graphical Models,Exponetial Families and Variation Inference》
2011-05-04 00:24 0概率图模型提供了统一的框架来捕捉和描述随机变量之间的依赖关系, ... -
模式识别和机器学习 笔记 第三章 线性回归模型
2011-04-27 14:08 6088第三章 线性回归模型 这章主要介绍线性回归模型,回归 ... -
模式识别和机器学习 笔记 第二章 概率分布
2011-03-21 23:52 6252这章主要介绍概 ...
相关推荐
基于K-means聚类算法的图像分割 算法的基本原理: 基于K-means聚类算法的图像分割以图像中的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。 算法步骤: ①随机选取...
主要介绍了详解Java实现的k-means聚类算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
基于 K-means 聚类算法的图像区域分割,首先从数据样本种选取K个点作为初始聚类中心,其次计算各个样本到聚类的距离,把样本归到离它最近的那个聚类中心所在的累,计算新形成的每个聚类的数据对象的平均值来得到新的...
基于k-means聚类算法的研究,黄韬,刘胜辉,本文首先分析研究聚类分析方法,对多种聚类分析算法进行分析比较,讨论各自的优点和不足,同时针对原k-means算法的聚类结果受随机��
实验五 K-Means聚类算法.ipynb
K-MEANS聚类算法的实现K-MEANS聚类算法的实现
主要介绍了Python用K-means聚类算法进行客户分群的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
将流形距离引入K-means聚类算法中,对于具有流形结构的数据集有很好的聚类效果,流形距离计算参数的设定充分考虑了全局和局部一致性。
(带注释)基于K-means聚类算法的图像区域分割.zip,MATLAB实现,详情可以参考:https://blog.csdn.net/didi_ya/article/details/115376184
多维k-means聚类算法java简单实现,导入运行KmeansTest.java可看到结果 多维k-means聚类算法java简单实现,导入运行KmeansTest.java可看到结果
PPT用于初步理解K-means算法,且基于K-means算法衍生出了三类算法:K-medoids,k-means++,FCM。该PPT的传输来自导师的资源分享,不涉及商用,用于大家对K-means算法的理解。如有侵权,本人将撤销资源上传。以上。
算法改进基于python实现K-Means聚类算法及其改进(kmean++)源码.zip算法改进基于python实现K-Means聚类算法及其改进(kmean++)源码.zip算法改进基于python实现K-Means聚类算法及其改进(kmean++)源码.zip算法改进基于...
上述代码是利用python内置的k-means聚类算法对鸢尾花数据的聚类效果展示,注意在运行该代码时需要采用pip或者其他方式为自己的python安装sklearn以及iris扩展包,其中X = iris.data[:]表示我们采用了鸢尾花数据的四...
K-means聚类算法利用matlab实现,可以查看每次迭代的效果
1.版本:matlab2019a,不会运行可私信 2.领域:【数据聚类】 3.内容:基于k-means聚类算法实现三维数据分类含Matlab源码 4.适合人群:本科,硕士等教研学习使用
k-means聚类算法的java实现描述