d q ( x , y ) = [ ∑ k = 1 p ∣ x k − y k ∣ q ] 1 q d_q(x,y)=[\sum_{k=1}^p|x_k-y_k|^q]^{\frac{1}{q}} dq(x,y)=[k=1∑p∣xk−yk∣q]q1
d 1 ( x , y ) = ∑ k = 1 p ∣ x k − y k ∣ d_1(x,y)=\sum_{k=1}^p|x_k-y_k| d1(x,y)=k=1∑p∣xk−yk∣
d 2 ( x , y ) = [ ∑ k = 1 p ∣ x k − y k ∣ 2 ] 1 2 d_2(x,y)=[\sum_{k=1}^p|x_k-y_k|^2]^{\frac{1}{2}} d2(x,y)=[k=1∑p∣xk−yk∣2]21
d ∞ ( x , y ) = max 1 ≤ k ≤ p ∣ x k − y k ∣ d_{\infty}(x,y)=\max_{1\le k\le p}|x_k-y_k| d∞(x,y)=1≤k≤pmax∣xk−yk∣
d
(
x
,
y
)
=
(
x
−
y
)
T
Σ
−
1
(
x
−
y
)
d(x,y)=\sqrt{(x-y)^T\Sigma^{-1}(x-y)}
d(x,y)=(x−y)TΣ−1(x−y)
x
x
x,
y
y
y来自
p
p
p维总体
Z
Z
Z的样本观测值;
Σ
\Sigma
Σ为
Z
Z
Z的协方差矩阵,实际中
Σ
\Sigma
Σ往往是位置的,常常需要用样本协方差矩阵来估计。
D ( G 1 , G 2 ) = min x i ∈ G 1 y j ∈ G 2 { d ( x i , y j ) } D(G_1,G_2)=\min_{\substack{x_i\in G_1 \\ y_j\in G_2}}\{d(x_i,y_j)\} D(G1,G2)=xi∈G1yj∈G2min{d(xi,yj)}
D ( G 1 , G 2 ) = max x i ∈ G 1 y j ∈ G 2 { d ( x i , y j ) } D(G_1,G_2)=\max_{\substack{x_i\in G_1 \\ y_j\in G_2}}\{d(x_i,y_j)\} D(G1,G2)=xi∈G1yj∈G2max{d(xi,yj)}
D
(
G
1
,
G
2
)
=
d
(
x
ˉ
,
y
ˉ
)
D(G_1,G_2)=d(\bar x,\bar y)
D(G1,G2)=d(xˉ,yˉ)
x
ˉ
\bar x
xˉ,
y
ˉ
\bar y
yˉ分别为
G
1
G_1
G1,
G
2
G_2
G2的重心。
D ( G 1 , G 2 ) = 1 n 1 n 2 ∑ i ∈ G 1 ∑ y j ∈ G 2 d ( x i , y j ) D(G_1,G_2)=\frac{1}{n_1n_2}\sum_{_i\in G_1}\sum_{y_j\in G_2}d(x_i,y_j) D(G1,G2)=n1n21i∈G1∑yj∈G2∑d(xi,yj)
D
1
=
∑
x
i
∈
G
1
(
x
i
−
x
ˉ
)
T
(
x
i
−
x
ˉ
)
D_1=\sum_{x_i\in G_1}(x_i-\bar{x})^T(x_i-\bar x)
D1=xi∈G1∑(xi−xˉ)T(xi−xˉ)
D
2
=
∑
y
j
∈
G
2
(
y
j
−
y
ˉ
)
T
(
y
j
−
y
ˉ
)
D_2=\sum_{y_j\in G_2}(y_j-\bar y)^T(y_j-\bar y)
D2=yj∈G2∑(yj−yˉ)T(yj−yˉ)
D
12
=
∑
z
k
∈
G
1
∪
G
2
(
z
k
−
z
ˉ
)
T
(
z
k
−
z
ˉ
)
D_{12}=\sum_{z_k\in{G_1\cup G_2}}(z_k-\bar z)^T(z_k-\bar z)
D12=zk∈G1∪G2∑(zk−zˉ)T(zk−zˉ)
x
ˉ
\bar x
xˉ,
y
ˉ
\bar y
yˉ,
z
ˉ
\bar z
zˉ分别为
G
1
G_1
G1,
G
2
G_2
G2和
G
1
∪
G
2
G_1\cup G_2
G1∪G2的重心。
D
(
G
1
,
G
2
)
=
D
12
−
D
1
−
D
2
D(G_1,G_2)=D_{12}-D_1-D_2
D(G1,G2)=D12−D1−D2
r j k = ∑ i = 1 n ( x i j − x j ˉ ) ( x i k − x k ˉ ) [ ∑ i = 1 n ( x i j − x j ˉ ) 2 ∑ i = 1 n ( x i k − x k ˉ ) 2 ] 1 2 r_{jk}=\frac{\sum_{i=1}^n(x_{ij}-\bar{x_j})(x_{ik}-\bar{x_k})}{[\sum_{i=1}^n(x_{ij}-\bar{x_j})^2\sum_{i=1}^n(x_{ik}-\bar{x_k})^2]^{\frac{1}{2}}} rjk=[∑i=1n(xij−xjˉ)2∑i=1n(xik−xkˉ)2]21∑i=1n(xij−xjˉ)(xik−xkˉ)
r j k = ∑ i = 1 n x i j x i k ( ∑ i = 1 n x i j 2 ∑ i = 1 n x i k 2 ) 1 2 r_{jk}=\frac{\sum_{i=1}^nx_{ij}x_{ik}}{(\sum_{i=1}^nx_{ij}^2\sum_{i=1}^nx_{ik}^2)^{\frac{1}{2}}} rjk=(∑i=1nxij2∑i=1nxik2)21∑i=1nxijxik
R
(
G
1
,
G
2
)
=
max
x
j
∈
G
1
x
k
∈
G
2
{
d
j
k
}
R(G_1,G_2)=\max_{\substack{x_j\in G_1 \\ x_k\in G_2}}\{d_{jk}\}
R(G1,G2)=xj∈G1xk∈G2max{djk}
d
j
k
=
1
−
∣
r
j
k
∣
d_{jk}=1-|r_{jk}|
djk=1−∣rjk∣或
d
j
k
2
=
1
−
∣
r
j
k
∣
2
d_{jk}^2=1-|r_{jk}|^2
djk2=1−∣rjk∣2
x
1
x_1
x1为每百万人口高等院校数;
x
2
x_2
x2为 每十万人口高等院校毕业生数;
x
3
x_3
x3为每十万人口高等院校招生数;
x
4
x_4
x4为每十万人口高 等院校在校生数;
x
5
x_5
x5为每十万人口高等院校教职工数;
x
6
x_6
x6为每十万人口高等院校专职 教师数;
x
7
x_7
x7 为高级职称占专职教师的比例;
x
8
x_8
x8 为平均每所高等院校的在校生数;
x
9
x_9
x9为 国家财政预算内普通高教经费占国内生产总值的比重;
x
10
x_{10}
x10 为生均教育经费 。
部分数据如下表所示:
先对变量进行聚类选出指标,再对样本进行聚类。
clc;clear
a=load('gj.txt');
b=zscore(a); %数据标准化
%% R型聚类
r=corrcoef(b);%计算相关系数
d=tril(1-abs(r));%根据相关系数计算距离,并取矩阵的下三角部分
d=nonzeros(d)'; %取出非零数据形成一个向量
%或者直接使用这种方法求距离向量
%d=pdist(b','correlation'); %b需要转置是因为在R型聚类中,b的每一列是一个样本,而pdist需要的是每一行是一个样本
z=linkage(d,'average');%按类平均法聚类
figure()
h=dendrogram(z);
set(h,'Color','k','LineWidth',1.3)
T=cluster(z,'maxclust',6);
%可以将求距离pdist,聚类过程linkage,聚类结果cluster 合并为一个函数
%hidx=clusterdata(data,'maxclust',numClust,'distance',dist_h,'linkage',link);
%T=clusterdata(b','maxclust',6,'distance','correlation','linkage','average');
for i=1:6
tm=find(T==i); %求第i类的对象
tm=reshape(tm,1,length(tm)); %变成行向量
fprintf('第%d类的有%s\n',i,int2str(tm)); %显示分类结果
end
%根据聚类结果选择2(在第2类中,2是最后被聚类的) 1 9 7 8 10六个指标
%% Q型聚类
%根据这6个指标对30个地区进行聚类
b_=b(:,[1:2,7:10]);
y=pdist(b_);%求对象间的欧式距离(默认),y的结果是行向量,squareform(y)可转成距离矩阵
z=linkage(y,'average');
figure()
h=dendrogram(z);
set(h,'Color','k','LineWidth',1.3)
%% 用sse画肘部图
sse=[];
for k=2:5
T=cluster(z,'maxclust',k);
s=zeros(1,k);
for i=1:k
tm = find(T==i);%第i类有哪些地区
mean_=mean(b_(tm,:),1);
for j=1:length(tm)
s(i)=s(i)+sum((b_(tm(j),:)-mean_).^2);
end
end
sse=[sse,sum(s)];
%fprintf('分为%d类时的sse=%f\n',k,sum(s));
end
figure()
plot(2:5,sse,'*-')
% 设分为K个类别
K=4;
for i=1:K
tm=find(T==i); %求第i类的对象
tm=reshape(tm,1,length(tm)); %变成行向量
fprintf('第%d类的有%s\n',i,int2str(tm)); %显示分类结果
end