- 浏览: 1653780 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 2494为了方便大家从理论到实践,从入门到精通,循序渐进系统地理解和掌 ... -
机器学习在公司的分享
2013-02-23 12:38 2908机器学习在公司的分享,ppt见附件,主要简单介绍了机器学习: ... -
Deep learning的一些教程[rz]
2013-02-03 19:14 27122转载自http://baojie.o ... -
[ZZ]计算机视觉、模式识别、机器学习常用牛人主页链接
2012-11-30 13:13 12211牛人主页(主页有很多论文代码) Serge ... -
Deep learning的一些有用链接
2012-11-12 19:09 3496deeplearning tutorials: http:// ... -
信息论学习总结(二)最大熵模型
2012-06-04 08:13 0显然,如果A表示可能的类别,B表示可能的上下文,p应该最大化熵 ... -
信息论学习总结(一)基础知识
2012-06-02 22:57 4411我们考虑一下一个离散的随机变量x,当我们观察到它的一个值,能给 ... -
loss function
2012-05-11 22:54 2601几种损失函数: 对于回归问题: 平方损失: 绝对值损失: −i ... -
Large-Scale Support Vector Machines: Algorithms and Theory
2012-04-12 00:32 0支持向量机是一种流行 ... -
使用SGD(Stochastic Gradient Descent)进行大规模机器学习
2012-05-11 23:01 44126使用SGD(Stocha ... -
构建自己的DSL之三 抓取文件管理
2011-07-18 23:26 1744转载请标明出处:http://fuliang.iteye.co ... -
构建自己的DSL之二 抓取文本处理
2011-07-11 23:18 2293转载请标明出处:http://fuliang.iteye.co ... -
构建自己的DSL之一 Simple Crawler
2011-07-11 22:08 3010转载请标明出处:http://fuliang.iteye.co ... -
paper and book阅读
2011-06-28 23:19 2646我微博每周读论 ... -
模式识别和机器学习 笔记 第四章 线性分类模型(二)
2011-05-29 23:13 04.3 概率判别模型 对于两类的分类问题,我们已经看到c1的后 ... -
模式识别和机器学习 笔记 第四章 线性分类模型(一)
2011-05-26 23:36 9849转载请标明出处: 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 6138第三章 线性回归模型 这章主要介绍线性回归模型,回归 ... -
模式识别和机器学习 笔记 第二章 概率分布
2011-03-21 23:52 6288这章主要介绍概 ...
相关推荐
Java实现的k-means聚类算法详解 k-means聚类算法是一种常用的无监督学习算法,用于对数据进行聚类分析。该算法的主要思想是将相似的数据点聚类到一起,形成不同的簇。Java语言是实现k-means聚类算法的不二之选。 ...
基于K-means聚类算法的图像分割 算法的基本原理: 基于K-means聚类算法的图像分割以图像中的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。 算法步骤: ①随机选取...
K-MEANS聚类算法的实现 K-MEANS聚类算法是一种常用的无监督机器学习算法,主要用于对数据进行聚类分析。该算法的主要思想是将相似的数据对象划分到同一个簇中,使得簇内的数据对象尽量相似,而簇间的数据对象尽量...
基于 K-means 聚类算法的图像区域分割,首先从数据样本种选取K个点作为初始聚类中心,其次计算各个样本到聚类的距离,把样本归到离它最近的那个聚类中心所在的累,计算新形成的每个聚类的数据对象的平均值来得到新的...
《基于K-means聚类算法的图像分割在MATLAB中的实现》 图像分割是计算机视觉领域中的基础任务,它旨在将图像划分为多个区域或对象,每个区域具有相似的特征。K-means聚类算法是一种广泛应用的数据分析方法,它通过...
实验五 K-Means聚类算法.ipynb
尽管K-means简单且易于实现,但它有一些固有的局限性,例如对初始质心敏感、无法处理非凸形状的簇以及对异常值敏感。因此,出现了许多改进版本,如: - **K-means++**:通过概率方式选择初始质心,减少对初始值的...
总结来说,基于Python的K-Means聚类算法设计与实现涉及到数据预处理、K值选择、模型训练和结果评估等多个步骤。`scikit-learn`库提供了便捷的接口,使得这一过程变得更加简单。在实际应用中,需要根据数据特性调整...
k-means算法作为一种划分方法,其优点包括算法简单、快速且易于实现;缺点则是需要提前指定簇的数目,且对噪声和离群点敏感,易受初始聚类中心选择的影响导致收敛到局部最优解。针对这些问题,研究者提出通过多次...
K-means聚类算法,作为一种简单而有效的无监督机器学习方法,被广泛应用于数据挖掘和图像处理领域,尤其是在计算机视觉中,它能够对图像进行自动分类,识别特征,帮助理解复杂的数据结构。MATLAB作为强大的科学计算...
标题“基于 K-means 聚类算法的图像区域分割”揭示了这是一个关于利用K-means算法处理图像处理问题的项目。K-means聚类是一种常见的无监督学习方法,用于将数据集划分为K个互不重叠的类别,每个类别由其内部数据点的...
在 Spark ML 中,Bisecting k-means 聚类算法的实现类为 BisectingKMeans,具有以下参数: def __init__(self, featuresCol="features", predictionCol="prediction", maxIter=20, seed=None, k=4, ...
k-means聚类算法是其中最简单且广泛使用的算法之一,尤其适用于处理大规模数据集。本篇文章将深入探讨如何在Matlab环境下实现k-means算法对三维数据进行分类,并结合提供的源代码进行解析。 首先,k-means算法的...
以下是关于K-Means聚类算法及其C#实现的关键知识点: 1. **K-Means算法原理**:K-Means的目标是将n个数据点划分为k个不同的簇(类别),每个数据点被分配到与其最近的质心(中心点)所属的簇。算法包括两个主要步骤...
将流形距离引入K-means聚类算法中,对于具有流形结构的数据集有很好的聚类效果,流形距离计算参数的设定充分考虑了全局和局部一致性。
K-Means聚类算法详解 K-Means聚类算法是一种常用的无监督学习方法,主要用于将数据点分组成不同的簇,以便更好地理解数据的结构和特征。在这里,我们将详细介绍K-Means聚类算法的原理、步骤和应用。 一、聚类算法...
分布式K-means聚类算法是大数据分析中处理大规模数据集的一个重要工具。随着数据量的日益增长,传统的集中式K-means算法在面对海量数据时,由于计算资源和内存限制,常常效率低下,甚至无法有效执行。为了解决这一...
总的来说,K-means聚类算法的C++实现结合了分词器和TF-IDF,为文本数据的分类提供了有效的工具。在理解和实现过程中,需要关注数据预处理、算法优化以及评估方法,以确保聚类效果的准确性和效率。