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