標簽(空格分隔): 算法學習
首先要來了解的一個概念就是聚類,簡單地說就是把相似的東西分到一組,同 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));新聞熱點
疑難解答