hiyouga / hiyouga-blog-project

填坑ing...
http://blog.hiyouga.top
MIT License
7 stars 3 forks source link

聚类分析、主成分分析和因子分析 #17

Closed hiyouga closed 5 years ago

hiyouga commented 6 years ago

pic1

聚类分析

聚类分析(Cluster Analysis)作为一种定量方法,从数据分析的角度,给出一个更准确、细致的分类工具。

聚类分析相似性度量

在聚类分析中,对于定量变量,最常用的是Minkowski距离: $$d_q(x, y)=\left[\sum_{k=1}^p\left|x_k-y_k\right|^q\right]^{\frac1q}, q>0$$ 当q=1, 2或q→+∞时,则分别得到:

  1. 绝对值距离$$d_1(x, y)=\sum_{k=1}^p\left|x_k-y_k\right|$$
  2. 欧式距离$$d_2(x, y)=\left[\sum_{k=1}^p\left|x_k-y_k\right|^2\right]^{\frac12}$$
  3. Chebyshev距离$$d_{\infty}(x, y)=\max\limits_{1\le k\le p} \left|x_k-y_k\right|$$

在Minkowski距离中,最常用的是欧氏距离,它的主要优点是当坐标轴进行正交旋转时,欧式距离是保持不变的。因此,如果对原坐标系进行平移和旋转变换,则变换后样本点间的距离和变换前完全相同。

值得注意的是在采用Minkowski距离时,一定要采用相同量纲的变量。如果变量的量纲不同,测量值变异范围相差悬殊时,建议首先进行数据的标准化处理,然后再计算距离。在采用Minkowski距离时,还应尽可能地避免变量的多重相关性(multicollinearity)。多重相关性所造成的信息重叠,会片面强调某些变量的重要性。由于Minkowski距离的这些缺点,一种改进的距离就是马氏距离(Mahalanobis),定义如下: $$d(x, y)=\sqrt{(x-y)^T\Sigma^{-1}(x-y)}$$ 其中x, y为来自p维总体Z的样本观测值,∑为Z的协方差矩阵,实际上∑往往是不知道的,常常需要用样本协方差来估计。马氏距离对一切线性变换是不变的,故不受量纲的影响(无需数据标准化)。

还可采用样本相关系数、夹角余弦和其它关联性度量作为相似性度量。

数据标准化
系统聚类法

系统聚类法是聚类分析方法中最常用的一种方法。它的有点在于可以指出由粗到细的多种分类情况,典型的系统聚类结果 可由一个聚类图展示出来。 pic2 方法有:最长距离法、最短距离法等。

变量聚类法

在系统分析或评估过程中,为避免遗漏某些重要因素,往往在一开始选取指标时,尽可能多地考虑所有的相关因素。而这样做的结果,则是变量过多,变量间的相关度高,给系统分析与建模带来很大的不便。因此,人们常常希望能研究变量间的相似关系,按照变量的相似关系把它们聚合成若干类,进而找出影响系统的主要因素。

  1. 变量相似性度量
    在对变量进行聚类分析时,首先要确定变量的相似性度量,常用的变量相似性度量有两种。
    • 相关系数$$r_{jk}=\frac{\sum_{i=1}^n(x_{ij}-\bar{x}_j)(x_{ik}-\bar{x}_k)}{\left[\sum_{i=1}^n(x_{ij}-\bar{x}_j)^2\sum_{i=1}^n(x_{ik}-\bar{x}_k)^2\right]^{\frac12}}$$
    • 夹角余弦$$r_{jk}=\frac{\sum_{i=1}^nx_{ij}x_{ik}}{\left(\sum_{i=1}^nx_{ij}^2\sum_{i=1}^nx_{ik}^2\right)^{\frac12}}$$
  2. 变量聚类法
    类似于样本集合聚类分析中最常用的最短距离法、最长距离法等,变量聚类法采用了与系统聚类法相同的思路和过程。在变量聚类问题中,常用的有最长距离法、最短距离法等。

MATLAB画聚类图:

%把下三角相关系数矩阵粘贴到ch.txt中
clc, clear
a = textread('ch.txt');
d = 1 - abs(a); %进行数据变换,把相关系数转化为距离
d = tril(d); %提取d矩阵的下三角部分
b = nonzeros(d); %去掉d中的零元素
b = b'; %化成行向量
z = linkage(b, 'complete'); %按最长距离法聚类
y = cluster(z, 'maxclust', 2); %把变量划分成两类
ind1 = find(y==1); ind1 = ind1' %显示第一类对应的变量标号
ind2 = find(y==2); ind2 = ind2' %显示第二类对应的变量标号
dendrogram(z); %画出聚类图

聚类分析又称群分析,是对多个样本(或指标)进行定量分类的一种多元统计分析方法。对样本进行分类称为Q型聚类分析,对指标进行分类称为R型聚类分析。两者可以结合使用。 R型聚类分析:

clc, clear
load gj.txt; %把原始数据保存在纯文本文件gj.txt中
r = corrcoef(gj); %计算相关系数矩阵
d = 1 - r; %进行数据变换,把相关系数转化为距离
d = tril(d); %去除矩阵d的下三角元素
d = nonzeros(d); %取出非零元素
d = d'; %化为行向量
z = linkage(d, 'average'); %按类平均法聚类
dendrogram(z); %画聚类图
T = cluster(z, 'maxclust', 6); %把变量划分成6类
for i=1:6
    tm = find(T==i); %求第i类的对象
    tm = reshape(tm, 1, length(tm)); %变成行向量
    fprintf('第%d类的有%s\n', i, int2str(tm)); %显示分类结构
end

Q型聚类分析:

clc, clear
load gj.txt; %把原始数据保存在纯文本文件gj.txt中
gj(:, 3:6) = []; %假设使用变量1,2,7,8,9,删去数据矩阵的第三列~第六列
gj = zscore(gj); %数据标准化
y = pdist(gj); %求对象间的欧氏距离,每行是一个对象
z = linkage(y, 'average'); %按类平均法聚类
dendrogram(z); %画聚类图
for k=3:5
    fprintf('划分成%d类的结果如下:\n', k);
    T = cluster(z, 'maxclust', k); %把样本点划分成k类
    for i=1:k
        tm = find(T==i); %求第i类的对象
        tm = reshape(tm, 1, length(tm)); %变成行向量
        fprintf('第%d类的有%s\n', i, int2str(tm); %显示分类结果
    end
    if k==5
        break;
    end
    fprintf('*************************\n');
end

主成分分析

主成分分析概念

主成分分析(Principal Component Analysis, PCA)是一种统计方法。它通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。主成分分析首先是在1901年由Karl Pearson对非随机变量引入的,1933年Hotelling将此方法推广到随机向量的情形,主成分分析和聚类分析有很大的不同,它有严格的数学理论作基础。 主成分分析的主要目的是希望用较少的变量去解释原来资料中的大部分变异,将我们手中许多相关性很高的变量转化成彼此相互独立不相关的变量。通常是选出比原始变量个数少,能解释大部分资料中的变异的几个新变量,即所谓主成分,并用以解释资料的综合性指标。由此可见,主成分分析实际上是一种降维方法。 $$\begin{cases} Z_1=c_{11}X_1+c_{12}X_2+\cdots+c_{1p}X_p\\ Z_2=c_{21}X_1+c_{22}X_2+\cdots+c_{2p}X_p\\ \cdots\\ Z_p=c_{p1}X_1+c_{p2}X_2+\cdots+c_{pp}X_p \end{cases}$$ 其中\(Z_1, Z_2, \cdots, Z_p\)是主成分。

主成分分析注意事项
  1. 主成分分析的结果受量纲的影响,由于各变量的单位可能不一样,如果各自改变量纲,结果会不一样,这是主成分分析的最大问题,回归分析则不存在这种情况,所以实际中可以先把各变量的数据标准化,然后使用协方差矩阵相关系数矩阵进行分析。
  2. 使方差达到最大的主成分分析不用转轴(由于统计软件常把主成分分析和因子分析放在一起,后者往往需要转轴,使用时应注意)。
  3. 主成分的保留。用相关系数矩阵求主成分时,Kaiser主张将特征值小于1的主成分予以放弃(这也是SPSS软件的默认值)。
  4. 在实际研究中,由于主成分的目的是为了降维,减少变量的个数,故一般选取少量的主成分(不超过5个或6个),只要它们能解释变异的70%~80%(称累积贡献率)就行了。
主成分估计

主成分估计(Principal Component Estimate)是Massy在1965年提出的,它是回归系数参数的一种线性有偏估计(biased estimate),同其它有偏估计,如岭估计(ridge estimate)等一样,是为了克服最小二乘(LS)估计在设计阵病态(即存在多重共线性)时表现出的不稳定性而提出的。 主成分估计采用的方法是将原来的回归自变量通过线性变换到另一组变量,即主成分,选择其中一部分重要的主成分作为新的自变量(此时丢弃了一部分影响不大的自变量,这实际达到了降维的目的),然后用最小二乘法对选取主成分后的模型参数进行估计,最后再变换回原来的模型求出参数的估计。

特征因子的筛选

主成分分析,将\(X^TX\)的特征值按由大到小的次序排列之后,如何筛选这些特征值?一个实用的方法就是删去\(\lambda_{r+1}, \lambda_{r+2}, \cdots, \lambda_p\)后,这些删去的特征值之和占整个特征值之和\(\sum\lambda_i\)的15%以下,换句话说,余下的特征值所占的比重(定义为累积贡献率)将超过85%,当然这不是一种严格的规定。 单纯考虑累积贡献率是不够的,还需要考虑选择的主成分对原始变量的贡献值,我们用相关系数的平方和来表示,如果选取的主成分为\(z_1, z_2, \cdots, z_r\),则它们对原变量\(x_j\)的贡献值为 $$\rho_i=\sum_{j=1}^rr^2(z_j, x_i)$$ 这里\(r(z_j, x_i)\)表示\(z_j\)与\(x_i\)相关系数。

案例分析——我国各地区普通高等教育发展水平综合评价

主成分分析试图在力保数据信息丢失最少的原则下,对多变量的截面数据表进行最佳综合简化,也就是说,对高维变量空间进行降维处理。本案例运用主成分分析方法综合评我国各地区普通高等教育的发展水平。 主成分分析法进行评价的步骤如下: 1)对原始数据进行标准化处理: 假设进行主成分分析的指标变量有m个:\(x_1, x_2, \cdots, x_m\),共有n个评价对象,第i个评价对象的第j个指标的取值为\(a_{ij}\),将各指标值\(a_{ij}\)转换成标准化指标\(\tilde{a_{ij}}\) $$\tilde{a_{ij}}=\frac{a_{ij}-\mu_j}{s_j}, (i=1, 2, \cdots, n; j=1, 2, \cdots, m)$$ 其中 $$\mu_j=\frac1n\sum_{i=1}^na_{ij}, s_j=\frac1{n-1}\sum_{i=1}^n(a_{ij}-\mu_j)^2, (j=1, 2, \cdots, m)$$ 即\(\mu_j, s_j\)为第j个指标的样本均值和样本标准差,对应地,称 $$\tilde{x_i}=\frac{x_i-\mu_i}{s_i}, (i=1, 2, \cdots, m)$$ 为标准化指标变量。 2)计算相关系数矩阵R 相关系数矩阵\(R=(r_{ij})_{m\times m}\) $$r_{ij}=\frac{\sum_{k=1}^n\tilde{a}_{ki}\cdot\tilde{a}_{kj}}{n-1}, (i, j=1, 2, \cdots, m)$$ 式中\(r_{ii}=1\),\(r_{ij}=r_{ji}\),\(r_{ij}\)是第i个指标与第j个指标的相关系数。 3)计算特征值和特征向量 计算相关系数矩阵R的特征值\(\lambda_1\ge\lambda_2\ge\cdots\lambda_m\ge 0\),以及对应的特征向量\(u_1, u_2, \cdots, u_m\),其中\(u_j=(u_{1j}, u_{2j}, \cdots, u_{mj})^T\),由特征向量组成m个新的指标变量: $$\begin{cases} y_1=u_{11}\tilde{x}_1+u_{12}\tilde{x}_2+\cdots+u_{m1}\tilde{x}_p\\ y_2=u_{12}\tilde{x}_1+u_{22}\tilde{x}_2+\cdots+u_{m2}\tilde{x}_p\\ \cdots\\ y_m=u_{1m}\tilde{x}_1+u_{2m}\tilde{x}_2+\cdots+u_{mm}\tilde{x}_p \end{cases}$$ 式中\(y_1\)是第1主成分,\(y_2\)是第2主成分,…,\(y_m\)是第m主成分。 4)选择p(p<m)个主成分,计算综合评价值

  1. 计算特征值\(\lambda_j(j=1, 2, \cdots, m)\)的信息贡献率和累积贡献率。称: $$b_j=\frac{\lambda_j}{\sum_{k=1}^m\lambda_k}, (j=1, 2, \cdots, m)$$ 为主成分\(y_j\)的信息贡献率,称: $$\alpha_p=\frac{\sum_{k=1}^p\lambda_k}{\sum_{k=1}^m\lambda_k}$$ 为主成分\(y_1, y_2, \cdots, y_p\)的累积贡献率,当\(\alpha_p\)接近于1(\(\alpha_p=0.85,0.90,0.95\))时,则选择前p个指标变量\(y_1, y_2, \cdots, y_p\)作为p个主成分,代替原来m个指标变量,从而可以对p个主成分进行综合分析。
  2. 计算综合得分 $$Z=\sum_{j=1}^pb_jy_j$$ 其中\(b_j\)为第j个主成分的信息贡献率,根据综合得分值就可进行评价。

MATLAB程序:

clc, clear
load gj.txt; %把原始数据保存在gj.txt中
gj = zscore(gj); %数据标准化
r = corrcoef(gj); %计算相关系数矩阵
%下面利用相关系数矩阵进行主成分分析,x的列为r的特征向量,即主成分的系数
[x, y, z] = pcacov(r); %y为r的特征值,z为各个主成分的贡献率
f = repmat(sign(sum(x)), size(x, 1), 1); %构造与x同维数的元素为±1的矩阵
x = x.*f; %修改特征向量的正负号,每个特征向量乘以所有分量和的符号函数值
num = 4; %num为选取的主成分的个数
df = gj * x(:, 1:num); %计算各个主成分的得分
tf = df * z(1:num) / 100; %计算综合得分
[stf, ind] = sort(tf, 'descend'); %把得分按照从高到低的次序排列
stf = stf'
ind = ind'
总结

主成分分析:将原来具有相关关系的多个指标简化为少数几个新的综合指标的多元统计方法。 主成分:由原始指标综合形成的几个新指标。根据主成分所含信息量的大小称为第一主成分、第二主成分等等。 主成分与原始变量之间的关系:

  1. 主成分保留了原始变量绝大多数信息。
  2. 主成分的个数远远少于原始变量的数目。
  3. 各个主成分之间互不相关。
  4. 每个主成分都是原始变量的线性组合。
问题

如何进行主成分分析?(主成分分析的方法) 基于相关系数矩阵或基于协方差矩阵做主成分分析。当分析中所选择的经济变量具有不同的量纲,变量水平差异很大,应该选择基于相关系数矩阵的主成分分析。 P.S.:相关系数矩阵可能会弱化数据的特征,而协方差矩阵不会。 如何确定主成分个数? 主成分分析的目的是简化变量,一般情况下主成分的个数应该小于原始变量的个数。关于保留几个主成分,应该权衡主成分个数和保留的信息。

注意事项
  1. 由协方差矩阵出发求解主成分所得的结果与由相关系数矩阵求解主成分所得结果有很大不同:所得的主成分的方差贡献率与主成分表达式均有显著区别。
    1. 一般而言,对于度量单位不同的指标或是取值范围彼此差异非常大的指标,不直接由其协方差矩阵进行主成分分析,而应该考虑将数据标准化。(若不标准化,则基于相关系数矩阵进行主成分分析。)
    2. 对同度量或是取值范围在同量级的数据,还是直接从协方差矩阵求解主成分为宜。因为:对数据标准化的过程实际上也就是抹杀原始变量离散程度差异的过程,标准化后的各变量方差相等均为1,而方差是数据信息的重要概括形式。数据标准化后抹杀了一部分重要信息,使得标准化后各变量在对主成分构成中的作用趋于相等。
  2. 与很多多元统计分析方法不同,主成分分析不要求数据来自于正态总体。
    实际上,主成分分析就是对矩阵结构的分析,其中主要用到的技术是矩阵运算的技术及矩阵对角化和矩阵的谱分解技术。
  3. 主成分是有效剔除了原始变量中的重叠信息,还是按原来的 模式将原始信息中的绝大部分用几个不相关的新变量表示出来 ,还值得讨论。
    如果计算所得协方差阵(或相关系数矩阵)的最小特征值接近于0,则意味着中心化以后的原始变量之间存在着多重共线性问 题,即原始变量存在着不可忽视的重叠信息。此时应注意对主成分的解释,或者考虑对最初纳入分析的指标进行筛选。
  4. 对原始变量存在多重共线性问题,在应用主成分分析时一定要慎重,应考虑所选初始变量是否合适,是否真实地反映事物的本来面目。
    ž主成分分析不能有效地剔除重叠信息,但它至少可发现原始变量是否存在重叠信息,这对减少分析中的失误是有帮助的。
主成分分析步骤:
  1. 根据研究问题选取初始分析变量。
  2. 根据初始变量特性判断由协方差阵求主成分还是由相关系数阵求主成分。
  3. 求协差阵或相关阵的特征根与相应标准特征向量。
  4. 判断是否存在明显的多重共线性,若存在,则回到第一步。
  5. 得到主成分的表达式并确定主成分个数,选取主成分。
  6. 结合主成分对研究问题进行分析并深入研究。

因子分析

待补充

参考文档:聚类、主成分、因子分析.pdf

Myriad-Dreamin commented 6 years ago

我们创新实践课的内容.. 话说方差为零的时候标准化怎么办

Guro2 commented 6 years ago

@Myriad-Dreamin 用其他的标准化方法,文章里的是z-score标准化

hiyouga commented 6 years ago

@Myriad-Dreamin 楼上正解,z-score对标准差有限制,但是其他标准化函数也可以做,具体选用那种可以针对数据考虑。