%--------------------------------------------------------------------------
% 例9.1 系统聚类
%--------------------------------------------------------------------------
%******************************计算例9.1的距离矩阵*************************
x = [1, 2, 6, 8, 11]'; %例9.1中的观测数据
y = pdist(x) %计算样品间欧氏距离
D = squareform(y) %将距离向量转为距离矩阵
%**************************根据原始数据创建系统聚类树************************
x = [1, 2, 6, 8, 11]'; % 例9.1中的观测数据
Z = linkage(x, 'single', 'cityblock') %利用最短距离法创建系统聚类树
%***************************分步聚类,绘制聚类树形图*************************
x = [1 2 6 8 11]'; % 例9.1中的观测数据
y = pdist(x,'cityblock'); % 计算样品间绝对值距离
z = linkage(y); % 利用最短距离法创建系统聚类树
% 设定每个观测的标签
obslabel = {'G1 = {1}';'G2 = {2}';'G3 = {6}';'G4 = {8}';'G5 = {11}'};
% 创建聚类树形图,方向为从右至左,叶节点标签在左边
[H,T] = dendrogram(z,'orientation','Right','labels',obslabel);
set(H,'LineWidth',2,'Color','k') % 设置线宽为2,颜色为黑色
xlabel('并类距离') % 设定X轴标签
text(1.1,1.65,'G6') % 在点(1.1,1.65)处放置字符串'G6'
text(2.1,3.65,'G7') % 在点(2.1,3.65)处放置字符串'G7'
text(3.1,4.4,'G8') % 在点(3.1,4.4)处放置字符串'G8'
text(4.1,3,'G9') % 在点(4.1,3)处放置字符串'G9'
%*******************计算7种系统聚类法对应的Cophenetic相关系数****************
x = [1 2 6 8 11]'; % 例9.1中的观测数据
y = pdist(x,'cityblock'); % 计算样品间绝对值距离
% 定义元胞数组method,各元胞分别对应不同系统聚类法
method={'average','centroid','complete','median','single','ward','weighted'};
% 通过循环计算7种系统聚类法对应的Cophenetic相关系数
for i = 1:7
Z = linkage(y,method{i}); % 利用第i种系统聚类法创建聚类树
c(i) = cophenet(Z,y); % 计算第i种系统聚类法对应的Cophenetic相关系数
end
c % 查看Cophenetic相关系数值
Z = linkage(y, 'average'); % 利用类平均法创建聚类树
[c, d] = cophenet(Z,y) % 计算Cophenetic相关系数c和cophenetic距离向量d
RHO = corr(y',d') % 计算y和d的线性相关系数
%*************************调用cluster函数进行系统聚类************************
x = [1 2 6 8 11]'; % 例9.1中的观测数据
y = pdist(x,'cityblock'); % 计算样品间绝对值距离
z = linkage(y); % 利用最短距离法创建聚类树
T = cluster(z,'maxclust',3) % 将原始样品聚为3类
%***********************调用clusterdata函数进行系统聚类**********************
x = [1 2 6 8 11]'; % 例9.1中的观测数据
T = clusterdata(x,'maxclust',3) % 将原始样品聚为3类
%--------------------------------------------------------------------------
% 例9.1 K均值聚类
%--------------------------------------------------------------------------
x = [1 2 6 8 11]'; % 例9.1中的观测数据
opts = statset('Display','final'); % 显示每次聚类的最终结果
% 将原始的5个点聚为3类,距离采用绝对值距离,重复聚类5次,显示每次聚类的最终结果
idx = kmeans(x,3,'Distance','city','Replicates',5,'Options',opts)
%****************************绘制聚类轮廓图*********************************
x = [1 2 6 8 11]'; % 例9.1中的观测数据
% 将原始的5个点聚为3类,距离采用绝对值距离,重复聚类5次
idx = kmeans(x,3,'Distance','city','Replicates',5);
[S, H] = silhouette(x,idx) % 绘制轮廓图,并返回轮廓值向量S和图形句柄H