主成分分析;主成分回归分析——Hald水泥问题;主成分分析案例——各地区普通高等教育发展水平综合评价;matlab

article/2025/9/14 10:14:10

目的

  • 对原变量加以“改造”,在不致损失原变量太多信息的条件下尽可能地降低变量地维数,即用较少的“新变量”代替原来地各变量。
  • 通过变换:用低维(主成分)近似高维(较全面)信息。

思想

在这里插入图片描述

  • 若有二维数据分布如上图所示,↗方向的数据分布最离散,方差最大,包含的信息最多,作为第一主成分;↖方向与第一主成分的方向是正交(信息不重叠)的,且在所有与第一主成分正交的方向中,它是最离散,方差最大的,作为第二主成分。
  • 注意:上述表达只是为了方便理解主成分分析的思想,用语不是很严谨。
  1. X = ( X 1 , X 2 , . . . , X p ) T X=(X_1,X_2,...,X_p)^T X=(X1,X2,...,Xp)T,协方差为

C o v ( X ) = Σ = ( σ i j ) p × p = E [ ( X − E ( X ) ) ( X − E ( X ) ) T ] Cov(X)=\Sigma=(\sigma_{ij})_{p\times p}=E[(X-E(X))(X-E(X))^T] Cov(X)=Σ=(σij)p×p=E[(XE(X))(XE(X))T]

Y 1 = a 1 T X = a 11 X 1 + a 12 X 2 + . . . + a 1 p X p Y_1=a_1^TX=a_{11}X_1+a_{12}X_2+...+a_{1p}X_p Y1=a1TX=a11X1+a12X2+...+a1pXp
s . t . { max ⁡ V a r ( Y 1 ) = V a r ( a 1 T X ) = a 1 T Σ a 1 ( 方差最大,信息最多 ) a 1 T a 1 = 1 ( 长度不变 ) s.t.\quad \begin{cases} \max \quad Var(Y_1)=Var(a_1^TX)=a_1^T \Sigma a_1(方差最大,信息最多)\\ a_1^Ta_1=1(长度不变) \end{cases} s.t.{maxVar(Y1)=Var(a1TX)=a1TΣa1(方差最大,信息最多)a1Ta1=1(长度不变)
由此得第一主成分。

Y 2 = a 2 T X = a 21 X 1 + a 22 X 2 + . . . + a 2 p X p Y_2=a_2^TX=a_{21}X_1+a_{22}X_2+...+a_{2p}X_p Y2=a2TX=a21X1+a22X2+...+a2pXp
s . t . { max ⁡ V a r ( Y 1 ) = V a r ( a 1 T X ) = a 1 T Σ a 1 a 1 T a 1 = 1 C o v ( Y 2 , Y 1 ) = C o v ( a 2 T X , a 1 T X ) = a 2 T Σ a 1 = 0 ( 和前面的向量不相关 ) s.t.\quad \begin{cases} \max \quad Var(Y_1)=Var(a_1^TX)=a_1^T \Sigma a_1\\ a_1^Ta_1=1\\ Cov(Y_2,Y_1)=Cov(a_2^TX,a_1^TX)=a_2^T\Sigma a_1=0(和前面的向量不相关) \end{cases} s.t. maxVar(Y1)=Var(a1TX)=a1TΣa1a1Ta1=1Cov(Y2,Y1)=Cov(a2TX,a1TX)=a2TΣa1=0(和前面的向量不相关)
由此得第二主成分。

  1. 一般若 Y 1 , Y 2 , . . . , Y k − 1 Y_1,Y_2,...,Y_{k-1} Y1,Y2,...,Yk1还不够,则继续作

Y k = a 2 T X = a k 1 X 1 + a k 2 X 2 + . . . + a k p X p Y_k=a_2^TX=a_{k1}X_1+a_{k2}X_2+...+a_{kp}X_p Yk=a2TX=ak1X1+ak2X2+...+akpXp
s . t . { max ⁡ V a r ( Y 1 ) = V a r ( a 1 T X ) = a 1 T Σ a 1 a 1 T a 1 = 1 C o v ( Y k , Y i ) = a k T Σ a i = 0 , i = 1 , . . , k − 1 ( 和前面的向量不相关 ) s.t.\quad \begin{cases} \max \quad Var(Y_1)=Var(a_1^TX)=a_1^T \Sigma a_1\\ a_1^Ta_1=1\\ Cov(Y_k,Y_i)=a_k^T\Sigma a_i=0,i=1,..,k-1(和前面的向量不相关) \end{cases} s.t. maxVar(Y1)=Var(a1TX)=a1TΣa1a1Ta1=1Cov(Yk,Yi)=akTΣai=0,i=1,..,k1(和前面的向量不相关)
由此得第k主成分。

计算过程

  • 具体的证明过程不在此作详细阐述。

image.png
image.png
image.png
在这里插入图片描述

主成分回归分析

  • 主成分回归分析是为了克服最小二乘法(LS)估计在数据矩阵存在多重共线性时表现出的不稳定性质而提出的
  • 主成分回归分析选择其中一部分重要的主成分作为新的自变量,丢弃了一部分影响不大的自变量,实际上达到了降维的目的,然后用最小二乘法对选取主成分后的模型进行参数估计,最后再变换回原来的模型求出参数的估计

案例

image.png
image.png
image.png

  1. x 0 = ( 13 , 4 ) y 0 = ( 12 , 1 ) x0=(13,4)\quad y0=(12,1) x0=(13,4)y0=(12,1)
  2. 标准化 x d = ( 13 , 4 ) y d = ( 12 , 1 ) xd=(13,4)\quad yd=(12,1) xd=(13,4)yd=(12,1)
  3. 进行主成分,vec2=(4×4)的每一列是特征向量,df=xd*vec2=(13×4)的一行就是一个样本在不同主成分上的得分(也就是原来的xd经过变换得到的新的数据df)
  4. 选择三个主成分:

[ z 1 z 2 z 3 ] 3 × 1 = v e c 2 [ : , 1 : 3 ] ( 3 × 4 ) T ∗ [ x ~ 1 x ~ 2 x ~ 3 x ~ 4 ] 4 × 1 \begin{bmatrix} z_1\\ z_2\\ z_3 \end{bmatrix}_{3\times 1} =vec2[:,1:3]^T_{(3×4)}*\begin{bmatrix} \tilde x_1\\ \tilde x_2\\ \tilde x_3\\ \tilde x_4 \end{bmatrix}_{4\times 1} z1z2z3 3×1=vec2[:,1:3](3×4)T x~1x~2x~3x~4 4×1
则df的前三列进行回归 y ^ = b _ c p a 1 × 3 T ∗ [ z 1 z 2 z 3 ] 3 × 1 \hat y=b\_cpa^T_{1\times 3}*\begin{bmatrix} z_1\\ z_2\\ z_3 \end{bmatrix}_{3\times 1} y^=b_cpa1×3T z1z2z3 3×1

  1. 化成标准化回归即 z → x ~ z\to \tilde x zx~

y ^ = b _ c p a ( 1 × 3 ) T ∗ v e c 2 [ : , 1 : 3 ] ( 3 × 4 ) T ∗ [ x ~ 1 x ~ 2 x ~ 3 x ~ 4 ] 4 × 1 = b _ s t d _ c p a ( 1 × 4 ) T ∗ [ x ~ 1 x ~ 2 x ~ 3 x ~ 4 ] 4 × 1 \hat y=b\_cpa^T_{(1\times 3)}*vec2[:,1:3]^T_{(3×4)}*\begin{bmatrix} \tilde x_1\\ \tilde x_2\\ \tilde x_3\\ \tilde x_4 \end{bmatrix}_{4\times 1}=b\_std\_cpa^T _{(1\times 4)}*\begin{bmatrix} \tilde x_1\\ \tilde x_2\\ \tilde x_3\\ \tilde x_4 \end{bmatrix}_{4\times 1} y^=b_cpa(1×3)Tvec2[:,1:3](3×4)T x~1x~2x~3x~4 4×1=b_std_cpa(1×4)T x~1x~2x~3x~4 4×1

  1. 恢复到原始变量,即 x ~ → x \tilde x \to x x~x

[ x ~ 1 x ~ 2 x ~ 3 x ~ 4 ] 4 × 1 = ( [ x 1 x 2 x 3 x 4 ] 4 × 1 − m e a n ( x 0 ) ( 1 × 4 ) ) . / s t d ( x 0 ) \begin{bmatrix} \tilde x_1\\ \tilde x_2\\ \tilde x_3\\ \tilde x_4 \end{bmatrix}_{4\times 1} = (\begin{bmatrix} x_1\\ x_2\\ x_3\\ x_4 \end{bmatrix}_{4\times 1} -mean(x0)_{(1\times 4)})./{std(x0)} x~1x~2x~3x~4 4×1=( x1x2x3x4 4×1mean(x0)(1×4))./std(x0)
y ^ = [ y − m e a n ( y 0 ) ] . / s t d ( y 0 ) \hat y=[y-mean(y0)]./std(y0) y^=[ymean(y0)]./std(y0)
[ y − m e a n ( y 0 ) ] . / s t d ( y 0 ) = b _ s t d _ c p a ( 1 × 4 ) T ∗ ( [ x 1 x 2 x 3 x 4 ] 4 × 1 − m e a n ( x 0 ) ( 1 × 4 ) ) . / s t d ( x 0 ) [y-mean(y0)]./std(y0)=b\_std\_cpa^T _{(1\times 4)}*(\begin{bmatrix} x_1\\ x_2\\ x_3\\ x_4 \end{bmatrix}_{4\times 1} -mean(x0)_{(1\times 4)})./{std(x0)} [ymean(y0)]./std(y0)=b_std_cpa(1×4)T( x1x2x3x4 4×1mean(x0)(1×4))./std(x0)
y = m e a n ( y 0 ) − s t d ( y 0 ) ∗ m e a n ( x 0 ) . / s t d ( x 0 ) ∗ b _ s t d _ c p a + s t d ( y 0 ) ∗ b _ s t d _ c p a T . / s t d ( x 0 ) ∗ x y=mean(y0)-std(y0)*mean(x0)./std(x0)*b\_std\_cpa\\+std(y0)*b\_std\_cpa^T./std(x0)*x y=mean(y0)std(y0)mean(x0)./std(x0)b_std_cpa+std(y0)b_std_cpaT./std(x0)x

clc,clear
load sn.txt
[m,n]=size(sn);
x0=sn(:,[1:n-1]);
y0=sn(:,n);r=corrcoef(x0);  %计算相关系数矩阵
xd=zscore(x0);  %对设计矩阵进行标准化处理
yd=zscore(y0);  %对y0进行标准化处理
%% 普通的回归
[b,BINT,R,RINT,STATS] = regress(y0,[ones(m,1),x0],0.05);%b=XY^{-1}
% BINT 回归系数的估计区间
% R 残差
% RINT 置信区间
% STATS 用于检验回归模型的统计量。有4个数值:判定系数r2r2,F统计量观测值,检验的p的值,误差方差的估计
% 越接近1,回归方程越显著;时拒绝,F越大,回归方程越显著;时拒绝
% ALPHA 显著性水平(缺少时默认0.05)
%% 1.主成分回归
[vec1,lamda,rate]=pcacov(r); %vec1为r的特征向量,lamda为r的特征值,rate为各个主成分的贡献率
contr=cumsum(rate); %计算累积贡献率,第i个分量表示前i个主成分的贡献率%书上这一步不懂为什么要这样干?????希望有人能帮忙解答一下
f=repmat(sign(sum(vec1)),size(vec1,1),1); %构造与vec1同维数的元素为±1的矩阵
vec2=vec1.*f %修改特征向量的正负号,使得特征向量的所有分量和为正df=xd*vec2;  %计算所有主成分的得分
num=input('请选项主成分的个数:');   %通过累积贡献率交互式选择主成分的个数
b_cpa=df(:,[1:num])\yd;  %主成分变量的回归系数,这里由于数据标准化,回归方程的常数项为0
%% 2.标准化的主成分回归
b_std_cpa=vec2(:,1:num)*b_cpa;  %标准化变量的回归方程系数
%% 3.逆标准化(原始)的主成分回归
b_=[mean(y0)-std(y0)*mean(x0)./std(x0)*b_std_cpa, std(y0)*b_std_cpa'./std(x0)];  %计算原始变量回归方程的系数
%% 下面计算两种回归分析的剩余标准差
rmse1=sqrt(sum((b(1)+x0*b(2:end)-y0).^2)/(m-n));   %拟合了n个参数  rmse1 =  2.4460
rmse2=sqrt(sum((b_(1)+x0*b_(2:end)'-y0).^2)/(m-num)); %拟合了num个参数 rmse2 = 2.2029

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

  • 例子是聚类分析里的
clc,clear
load gj.txt   %把原始数据保存在纯文本文件gj.txt中
gj=zscore(gj); %数据标准化
r=corrcoef(gj);  %计算相关系数矩阵
%下面利用相关系数矩阵进行主成分分析,vec1的列为r的特征向量,即主成分的系数
[vec1,lamda,rate]=pcacov(r); %lamda为r的特征值,rate为各个主成分的贡献率
contr=cumsum(rate); %计算累积贡献率
f=repmat(sign(sum(vec1)),size(vec1,1),1);%构造与vec1同维数的元素为±1的矩阵
vec2=vec1.*f;  %修改特征向量的正负号,使得每个特征向量的分量和为正
num=4;  %num为选取的主成分的个数
df=gj*vec2(:,1:num);  %计算各个主成分的得分
tf=df*rate(1:num)/100; %计算综合得分
[stf,ind]=sort(tf,'descend');  %把得分按照从高到低的次序排列
stf=stf'; ind=ind';

在这里插入图片描述


http://chatgpt.dhexx.cn/article/vscmm6A2.shtml

相关文章

hadoopHA

一、HA介绍 HA(High Available), 高可用,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,分为活动节点(Active)及备用节点(Standby)。 hadoop2.x之后Clouera提出了QJM/Qurom Jou…

AIDL 和 HIDL

AIDL概述 aidl是常用的android IPC方式,本文将根据一个demo来解析下AIDL的原理。 为了便于读者理解,本文不会探究Binder的实现细节,可以认为Binder在此文的分析中被看做是一个“黑盒”。 有一定经验的读者可以直接到文末看总结,最…

Linux守护进程HALD

hal(hardware abstract lever)硬件抽象。 但是Linux的hal运行于用户空间作为一个daemon进程。监听一个socket接口。等待udev发来的通知。 udev为设备加载驱动,设备可用后,往往有udev的规则,让udev通知hald表示设备变动…

.har文件使用

背景 在做web开发的过程中, 查看http请求/响应是非常常见的操作. 有时可能有这样的需求: 将某次操作的请求/响应保存下来, 给别人看或者分析, 那你可能需要har文件. 另外你还需要Fiddler来查看har文件内容 操作截图 在"Network"面板中, 将某次操作的请求保存为har…

head 命令

转载:每天一个linux命令(14):head 命令_weixin_33794672的博客-CSDN博客head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中&#x…

颜色查找表LUT

查找表(LUT,LookUp Table)是图像颜色转换的强大工具,在许多图形和视频编辑器中使用。 2D LUT CLUT-from-images 2D LUT生成 def generate_identify_color_matrix(width, height, channel):img np.zeros((width, height, chan…

Hadoop HA介绍

1、HA 概述 所谓HA(High Available),即高可用(7*24小时不中断服务)。实现高可用最关键的策略是消除单点故障。Hadoop-HA严格来说应该分成各个组件的HA机制: HDFS的HA和YARN的HA。Hadoop2.0之前&#xff0c…

HAL 库

HAL库 1、初识HAL库 1.1 CMSIS 简介 CMSIS(微控制器软件接口标准):Crotex Microcontroller Software Interface Standard,是由ARM和与其合作的芯片厂商、软件工具厂商,共同制定的标准 ARM官方提供的CMSIS规范架构 …

HIDL(HAL interface definition langguage)

HIDL的相关介绍 HIDL的全称是HAL interface definition language(硬件抽象层接口定义语言),在此之前 Android 有AIDL,架构在Android binder 之上,用来定义Android 基于Binder通信的Client 与Service之间的接口。HIDL…

内部类

一、非静态内部类。 1、修饰符 非静态内部类有四个作用域,所以有四个修饰符。 private : 只能在外部类的内部使用。 protected : 可被与外部类处于同一个包中的其他类和外部类的子类所访问。 省略 : 只能被与外部类处于同一个包中的其他类访问。 public : 可…

python的类作用_python中类的作用是什么

简单来说,类是一种高级抽象,就是一种高级的数据类型,是对象的蓝图,就是用来定义你要用的对象的属性和行为的。 以下是面向对象简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性…

C# 内部类的作用

作用一:限制对类的可访问性 有时候会遇到这样的需求,希望一个类仅能被另一个类(以及其派生类)访问。 代码 class BaseClass {public class PublicNestedClass { }protected class ProtectedNestedClass { }private class Priva…

内部类详解

1.成员内部类 1.样例 class OutClass {class InnerClass {public String SayHi() {return "你好";}} }2.特点 内部类能够无条件的访问外部类的成员变量,外部类要访问内部类成员变量需要使用new。内部类和外部类有相同名称的变量或者是方法,…

Java 静态内部类作用

需要了解2个概念:内部类和静态修饰符static 1)首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。 2)静态都是用来修饰类的内部成员的。…

java内部类的四大作用

一、内部类的作用 我们为什么需要内部类?或者说内部类为啥要存在?其主要原因有如下几点: 内部类方法可以访问该类定义所在作用域中的数据,包括被 private 修饰的私有数据内部类可以对同一包中的其他类隐藏起来内部类可以解决java …

Flink--- 批处理 / 流处理

目录 Flink的主要特点 Flink 和 Spark Streaming 搭建maven工程 FlinkTutorial 添加Scala框架 和 Scala文件夹 Flink-批处理wordcount Flink---流处理wordcount Flink 是一个框架和分布式的处理引擎,用于对无界和有界数据流进行状态计算。 传统数据处理架构 事…

流数据处理利器

流处理 (Stream processing) 是一种计算机编程范式,其允许给定一个数据序列 (流处理数据源),一系列数据操作 (函数) 被应用到流中的每个元素。同时流处理工具可以显著提高程序员的开发效率,允许他们编写有效、干净和简洁的代码。 流数据处理在…

流处理(Stream)和批处理(Batch)

1 流处理和批处理的概念 在程序计算当中,同一节点或者不同节点之间的数据的传递是实时传递还是延迟传递,这就引出了两个概念。其实在非大数据领域这两个概念所起的作用也是很有限,但是在大数据领域,处理上亿级别的时候&#xff0…

管道模式 流处理

(一)介绍 管道这个名字源于自来水厂的原水处理过程。原水要经过管道,一层层地过滤、沉淀、去杂质、消毒,到管道另一端形成纯净水。我们不应该把所有原水的过滤都放在一个管道中去提纯,而应该把处理过程进行划分&#…

Flink流处理API大合集:掌握所有flink流处理技术,看这一篇就够了

大家好,我是百思不得小赵。 创作时间:2022 年 5 月 18 日 博客主页: 🔍点此进入博客主页 —— 新时代的农民工 🙊 —— 换一种思维逻辑去看待这个世界 👀 今天是加入CSDN的第1172天。觉得有帮助麻烦&#x…