标签(空格分隔): 算法学习
首先要来了解的一个概念就是聚类,简单地说就是把相似的东西分到一组,同 Classification (分类)不同,对于一个 classifier ,通常需要你告诉它“这个东西被分为某某类”这样一些例子,理想情况下,一个 classifier 会从它得到的训练集中进行“学习”,从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做 supervised learning (监督学习),而在聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起,因此,一个聚类算法通常只需要知道如何计算相似 度就可以开始工作了,因此 clustering 通常并不需要使用训练数据进行学习,这在 Machine Learning 中被称作 unsupervised learning (无监督学习)。
我们经常接触到的聚类分析,一般都是数值聚类,一种常见的做法是同时提取 N 种特征,将它们放在一起组成一个 N 维向量,从而得到一个从原始数据集合到 N 维向量空间的映射——你总是需要显式地或者隐式地完成这样一个过程,然后基于某种规则进行分类,在该规则下,同组分类具有最大的相似性。
假设我们提取到原始数据的集合为(x1, x2, …, xn),并且每个xi为d维的向量,K-means聚类的目的就是,在给定分类组数k(k ≤ n)值的条件下,将原始数据分成k类 S = {S1, S2, …, Sk},在数值模型上,即对以下表达式求最小值: /underset{/mathbf{S}} {/Operatorname{arg,min}} /sum_{i=1}^{k} /sum_{/mathbf x_j /in S_i} /left| /mathbf x_j - /boldsymbol/mu_i /right|^2 这里μi 表示分类Si 的平均值。
那么在计算机编程中,其又是如何实现的呢?其算法步骤一般如下:
1、从D中随机取k个元素,作为k个簇的各自的中心。
2、分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
3、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
4、将D中全部元素按照新的中心重新聚类。
5、重复第4步,直到聚类结果不再变化。
6、将结果输出。
该段调用代码是将一副RGB图像转化在HSV颜色模型空间下进行聚类,输出为染色聚类结果
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%功能:利用kmeans算法对rgb图像进行聚类,并显示聚类染色结果%kmeans算法中当聚类的中心距离过小,或者某一类数量过低,可以将这些类合并到旁边类%调用run_kmeans算法%输入参数:% X:输入样本数据集% k: 聚类中心个数% max_iter:kmeans最大迭代次数%输出参数:% centroids:类中心的坐标 维数与样本集一致% labels: (1:k)被标记好的分类输出%rgb2ycbcrclear all;close all;clc;%%读图% image=double(imread('lena.bmp'));% % figure(1);% % imshow(uint8(image)),title('Input image');% %%存储图像尺寸% image_rows=size(image,1);% image_cols=size(image,2);%%% %把图片存成样本X% X=(reshape(image,[image_rows*image_cols,3])');% % scatter(X(1,:),'r','filled');% % figure();% %scatter3(X(1,:)', X(2,:)', X(3,:)', c,'filled'),view(0,255); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%rgb2hsv%读一张rgb图像,在hsv模型里面处理图像%功能:rgb图像转换成HSV模型图像,弄明白HSV图像在matlab中的存储方式,并reshape成图像进行输入clear all;close all;clc;% H=double(I);%H为RGB图像% [hue,s,v]=rgb2hsv(H);image=double(imread('lena.bmp'));image_rows=size(image,1);image_cols=size(image,2);[hue,s,v]=rgb2hsv(image);figure;imshow(hue),title('hue');figure;imshow(s),title('s');figure;imshow(uint8(v)),title('v');% image_hsv=rgb2hsv(image);hue=reshape(hue,1,image_rows*image_cols);s=reshape(s,1,image_rows*image_cols);v=reshape(v,1,image_rows*image_cols);X=[hue;s;v];%%%对样本空间进行聚类k=3;%聚类个数max_iter=100;%最大迭代次数[centroids, labels] = run_kmeans(X, k, max_iter); %kmeans把图像聚成3类% labeled_X=[X;labels];%%显示染色结果% if labeled_X(4,:)==1% out_image=image(:,:,1)% elseif labeled_X(4,:)==2% out_image=image(:,:,2)% elseif labeled_X(4,:)==3% out_image=image(:,:,3)% end;pixels_labeled=reshape(labels,image_rows,image_cols);image_r=zeros(image_rows,image_cols);image_r(pixels_labeled==1)=255;% reshape(image_r,image_rows,image_cols);image_g=zeros(image_rows,image_cols);image_g(pixels_labeled==2)=255;% reshape(image_g,image_rows,image_cols);image_b=zeros(image_rows,image_cols);image_b(pixels_labeled==3)=255;% reshape(image_b,image_rows,image_cols);out_image=zeros(size(image));out_image(:,:,1)=image_r;out_image(:,:,2)=image_g;out_image(:,:,3)=image_b;figure(2)imshow(uint8(out_image));新闻热点
疑难解答