MATLAB感悟(3)--聚類分析

目的描述

​ 出於模型的須要,咱們的團隊選擇作一次聚類分析,一般這部分在隊伍中是會有同窗專門負責這塊的,至於爲何筆者就不在這裏多說了。code

解決思路

​ 在MATLAB中封裝了有關因子分析的方法--cluster,讀者能夠經過help命令來查看如何調用這個方法。orm

須要讀者注意的是,聚類分析在分析以前會計算"幾種距離"的值,具體哪種距離的值比較合適是須要讀者自行選取的,爲了達到最優,筆者封裝了將各類聚類都計算以後選取最優的方法,在接下來的代碼中會給出。get

​ 同時具體分紅幾類也是須要讀者自行選取的。it

代碼展現

function [Max,Method_Max_Index,Incon,Incon_Max,Incon_Max_Index]=Max_cohenet_clust(Data_Y,Method,Depth)
    %檢查那種距離方式是最好的
    for i=1:7
        Data_Z=linkage(Data_Y,Method{i});
        Cophenet(i)=cophenet(Data_Z,Data_Y);
    end
    Max=max(Cophenet);
    Method_Max_Index=find(Cophenet==Max);
    Data_Z=linkage(Data_Y,Method{Method_Max_Index});
    TEMP=inconsistent(Data_Z,Depth);
    SIZE=size(TEMP);
    %求取最好距離方式下逐步分類的不一致值
    for j=1:SIZE(1)
        if j~=SIZE(1)
            Incon(SIZE(1)-j)=TEMP(SIZE(1),4)-TEMP(SIZE(1)-j,4); 
        end
    end
    %檢查出最大不一致值以找出最好的分類數目
    Incon_Max=max(Incon);
    Incon_Max_Index=find(Incon==Incon_Max);
function [FData_M,LOCATION,Lab]=Split_Factor_Data(title,F_title,DataSet,index)
%index 表示要提取的Lab有多少個
    LOCATION=[];
    Lab={};
    NUM=1;
    for i=1:index
        OBJECT=F_title{i,1};         
                for j=1:584
                    MSN=title{1,j};
                    if j~=1
                        if  MSN==OBJECT
                            LOCATION(:,NUM)=j;
                            Lab(i,1)={MSN};
                            Lab(i,2)={OBJECT};
                            NUM=NUM+1;
                        end
                    end
                end
        FData_M=DataSet(:,LOCATION);
    end
%,拿到location,先選出值
[TX_C_D,Loc,Lab]=Split_Cluster_Data(title,Factormatrix,DataSet{1,1},index);

%,求和
SUM_C_D=TX_D'+AZ_D'+CA_D'+NM_D';

%數據規格化
SUM_C_D=zscore(SUM_C_D);

%求取距離向量
Cluster_Method={'average','centroid','complete','median','single','ward','weighted'}
SUM_C_Y=pdist(SUM_C_D);

depth=13;
Cluster_Method={'average','centroid','complete','median','single','ward','weighted'};
%第一步聚類
[Max,Method_Max_Index,Incon,Incon_Max,Incon_Max_Index]=Max_cohenet_clust(SUM_C_Y,Cluster_Method,depth)

Class_Num=?;
%第二次聚類
SUM_C_Best=cluster(linkage(SUM_C_Y,Cluster_Method{Method_Max_Index}),'maxclust',Class_Num)

SUM_C_Z=linkage(SUM_C_Y,Cluster_Method{Method_Max_Index});

%畫出cluster輪廓圖
silhouette(SUM_C_D,SUM_C_Best)

color=?;
%畫出系統聚類樹形矩陣圖
dendrogram(SUM_C_Z,0,'orientation','right','labels',Factormatrix,'colorthreshold',color)

結果展現

因爲結果有多種多樣的,直接給出MATLAB的工做空間,有興趣的讀者能夠自行下載。io

連接: 密碼:5gidfunction

相關文章
相關標籤/搜索