出于模型的须要,咱们的团队选择作一次聚类分析,一般这部分在队伍中是会有同窗专门负责这块的,至于为何笔者就不在这里多说了。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