IRIS數據集分解聚類的matlab實現

先上結果
在這裏插入圖片描述

1:聚類原理

聚類分析指將物理或抽象對象的集合分組爲由類似的對象組成的多個類的分析過程。它是一種重要的人類行爲。分解聚類的基本思想是首先將所有的樣本歸成一類,然後依據相似性原理將其進行分解,分解的效果好壞我們通過一個評價函數對其進行評價:
在這裏插入圖片描述
其中N是總樣本數,N1是第一類的樣本數,N2是第二類的樣本數,括號裏的是均值。我們可以從這個評價函數裏很明顯的看出,這裏採用了歐幾里得距離來衡量樣本之間的差異,同樣的,我們也可以採用馬馬哈拉諾比斯距離和明科夫斯基距離進行衡量,這裏不再贅述。

在分解聚類的過程中,我們常用的是對分算法,它的特點是將樣本分解成兩個類別。現在我們介紹對分算法:
1:選取目標函數,把全體樣品分成兩類
X = {x_1,x_2,…x_n};Y = { };E = 0
2:計算分別將x_1,x_2等樣本從X計入Y中的E值,我們設將x_i計入Y樣本時E最大,那麼就把它歸入Y。此時
X = {x_1,x_2,…x_i-1,x_i+1};
Y = {x_i};
E=E(1)
3:繼續計算將x_1,x_2等樣本從X計入Y中的E值,我們設將x_j計入Y樣本時E最大,那麼就把它歸入Y。
4:若E(K+1)>=E(K),我們就重複上述行爲,知道E(K)到達最大值停止,此時分類結果是最好的。

需要注意的是:在每次我們將一個樣本從X拿出來放到Y的過程中,X的均值和Y的均值都發生了變化,需要重新計算,我們可以使用下列遞推公式進行均值的更新
在這裏插入圖片描述

2:代碼實現

整體代碼我分成了三個部分:
1:第一部分是主函數部分,負責打亂輸入的數據次序和將得到的數據進行劃分,需要注意的是,IRIS數據集有三個大分類,我們要使用分解聚類對其進行操作,可以先進行一次聚類,然後選擇第一次聚類的較大的數據集結果進行二次聚類,這樣就可以將IRIS樣本分解成三個類別。

[E(1),cluster1,cluster2] = find_min(A,cluster1,cluster2);
[E(2),cluster1,cluster2] = find_min(A,cluster1,cluster2);
for i=3:m
    [E(i),cluster1,cluster2] = find_min(A,cluster1,cluster2);
    if (E(i-2)>=E(i-1))
        break;
    end
end
a=find(cluster1);   %第一類結果放在a裏面
------------------------------------------------------------------------------------
plot3(C_1(:,1),C_1(:,2),C_1(:,3),'r*');hold on;
plot3(C_2(:,1),C_2(:,2),C_2(:,3),'g*');hold on;
plot3(C_3(:,1),C_3(:,2),C_3(:,3),'b*');hold off;
title('可視化圖形');
legend('Iris-setosa','Iris-versicolor','Iris-virginica');
xlabel('萼片長度');ylabel('萼片寬度');zlabel('花瓣長度');

2:第二個部分是均值推導部分。

function [X1,Y1,Z1,T1,X2,Y2,Z2,T2,m1,m2] = cut_cluster(A,B,C,D,cluster1,cluster2)
cluster1_index=find(cluster1);
cluster2_index=find(cluster2);
[m1,~]=size(cluster1_index);
[m2,~]=size(cluster2_index);

3:第三個部分是評價函數部分,我將每個每次的E值放在評價矩陣裏,這樣可以方便的對程序進行處理。

function [c,cluster1,cluster2] = find_min(A,cluster1,cluster2)
cluster1_copy = cluster1;cluster2_copy = cluster2; %進行矩陣投影
[a,~] = size(A);
E = zeros(a,1);

此外,由於樣本的分類在IRIS數據集裏面已經給了出來,所以我們可以在後續中加入準確度度量函數,以評價這個方法的優劣。

E值矩陣:
在這裏插入圖片描述
分類展示:
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
結果可視化(這裏使用了四個變量裏的萼片長度和寬度,花瓣長度作爲三個座標軸進行可視化操作):
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章