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

相关文章
相关标签/搜索