数学建模学习笔记(十三)——主成分分析

文章目录

    • 一、综述
    • 二、主成分分析
    • 三、主成分分析的计算步骤(可在Matlab实现)
    • 四、对于主成分的解释
    • 五、主成分分析的应用

一、综述

主成分分析的本质是降维,她能够将多个指标转换为少数几个主成分。这些主成分之间互不相关,且是原变量的线性组合。通过对主成分的分析便可对原始数据有一个较为准确的把握。

二、主成分分析

假设有 nnn 个样本,ppp 个指标,则可构成大小为 n×pn \times pn×p 的样本矩阵 xxxx=[x11x12⋯x1px21x22⋯x2p⋮⋮⋱⋮xn1xn2⋯xnp]x = \begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1p} \\ x_{21} & x_{22} & \cdots & x_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n1} & x_{n2} & \cdots & x_{np} \end{bmatrix}x=x11x21xn1x12x22xn2x1px2pxnp 假设想要找到一组变量 z1,z2,⋯,zm(m≤p)z_1, z_2, \cdots, z_m (m \leq p)z1,z2,,zm(mp),且满足:{z1=l11x1+l12x2+⋯+l1pxpz2=l21x1+l22x2+⋯+l2pxp⋮zm=lm1x1+lm2x2+⋯+lmpxp\left\{ \begin{aligned} &z_1 = l_{11}x_1 + l_{12}x_2 + \cdots + l_{1p}x_p \\ & z_2 = l_{21}x_1 + l_{22}x_2 + \cdots + l_{2p}x_p \\ \vdots \\ &z_m = l_{m1}x_1 + l_{m2}x_2 + \cdots + l_{mp}x_p \end{aligned} \right.z1=l11x1+l12x2++l1pxpz2=l21x1+l22x2++l2pxpzm=lm1x1+lm2x2++lmpxp 系数 lijl_{ij}lij 的确定原则:
(1)ziz_izizj(i≠j;i,j=1,2,⋯,m)z_j(i \neq j; i, j = 1, 2, \cdots, m)zj(i=j;i,j=1,2,,m) 相互无关;
(2)z1z_1z1x1,x2,⋯,xpx_1, x_2, \cdots, x_px1,x2,,xp 的一切线性组合中方差最大者;
(3)z2z_2z2 是与 z1z_1z1 不相关的 x1,x2,⋯,xpx_1, x_2, \cdots, x_px1,x2,,xp 的所有线性组合中方差最大者;
(4)以此类推,从而可以确定 lijl_{ij}lij

三、主成分分析的计算步骤(可在Matlab实现)

  1. 对原始数据矩阵进行标准化处理
    按列计算均值 xjˉ=1n∑i=1nxij\bar{x_j} = \frac{1}{n}\sum_{i = 1}^{n}x_{ij}xjˉ=n1i=1nxij 和标准差 Sj=∑i=1n(xij−xjˉ)2n−1S_j = \sqrt{\frac{\sum_{i = 1}^{n}(x_{ij} - \bar{x_j})^2}{n - 1}}Sj=n1i=1n(xijxjˉ)2 ,计算的标准化数据 Xij=xij−xjˉSjX_{ij} = \frac{x_{ij} - \bar{x_j}}{S_j}Xij=Sjxijxjˉ,从而可以得到原始数据进行标准化后的矩阵:X=[X11X12⋯X1pX21X22⋯X2p⋮⋮⋱⋮Xn1Xn2⋯Xnp]X = \begin{bmatrix} X_{11} & X_{12} & \cdots & X_{1p} \\ X_{21} & X_{22} & \cdots & X_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ X_{n1} & X_{n2} & \cdots & X_{np} \end{bmatrix}X=X11X21Xn1X12X22Xn2X1pX2pXnp

  2. 计算标准样本的协方差矩阵 rij=1n−1∑i=1n(Xki−Xˉi)(Xkj−Xˉj)=1n−1∑i=1nXkiXkjr_{ij} = \frac{1}{n - 1}\sum_{i = 1}^{n}(X_{ki} - \bar{X}_i)(X_{kj} - \bar{X}_j) = \frac{1}{n - 1}\sum_{i = 1}^{n}X_{ki}X_{kj}rij=n11i=1n(XkiXˉi)(XkjXˉj)=n11i=1nXkiXkj 从而可以得到协方差矩阵:R=[r11r12⋯r1pr21r22⋯r2p⋮⋮⋱⋮rp1rp2⋯rpp]R = \begin{bmatrix} r_{11} & r_{12} & \cdots & r_{1p} \\ r_{21} & r_{22} & \cdots & r_{2p} \\ \vdots & \vdots & \ddots & \vdots \\ r_{p1} & r_{p2} & \cdots & r_{pp} \end{bmatrix}R=r11r21rp1r12r22rp2r1pr2prpp

  3. 计算 RRR 的特征值和特征向量
    特征值:λ1≥λ2≥⋯≥λp≥0\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_p \geq 0λ1λ2λp0
    特征向量:KaTeX parse error: Undefined control sequence: \cdtos at position 150: …\end{bmatrix}, \̲c̲d̲t̲o̲s̲, a_p = \begin…

  4. 计算主成分贡献率以及累计贡献率

    贡献率 = λi∑k=1pλk(i=1,2,⋯,p)\frac{\lambda_i}{\sum_{k = 1}^{p}\lambda_k} (i = 1, 2, \cdots, p)k=1pλkλi(i=1,2,,p)

    累计贡献率 = ∑k=1iλk∑k=1pλk(i=1,2,⋯,p)\frac{\sum_{k = 1}^{i}\lambda_k}{\sum_{k = 1}^{p}\lambda_k} (i = 1, 2, \cdots, p)k=1pλkk=1iλk(i=1,2,,p)

  5. 写出主成分
    iii 个主成分:Fi=a1iX1+a2iX2+⋯+apiXp(i=1,2,⋯,m)F_i = a_{1i}X_1 + a_{2i}X_2 + \cdots + a_{pi}X_p (i = 1, 2, \cdots, m)Fi=a1iX1+a2iX2++apiXp(i=1,2,,m)

  6. 根据系数分析主成分代表的意义
    对于每个主成分而言,指标前面的系数越大,代表该指标对于主成分的影响越大。注意:对于主成分的解释往往是最困难的一步。

四、对于主成分的解释

主成分的解释往往带有一点模糊性,没有原始变量那么清晰透彻,许多人将它称为降维的代价。一旦主成分中某个主成分无法解释,那么整个主成分分析也就失败了。

五、主成分分析的应用

  1. 主成分聚类
    计算出主成分之后,可以将其视为新的指标,然后再SPSS中进行聚类分析。

  2. 主成分回归
    主成分回归可以用于解决多重共线性的问题。计算出主成分后将其视为自变量,便可以在Stata中进行回归分析。注意进行异方差检验哦~~~

    关于多重共线性下,主成分回归和逐步回归的选取:

    1. 如果主成分能够被很好的解释,那么两者都采用(๑•̀ㅂ•́)و✧!
    2. 如果主成分不能很好的解释,那么建议采用逐步回归。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言逻辑运算符详解

情景模式&#xff1a;现在研发出了一款新的软件&#xff0c;要求使用者必须成年&#xff0c;并且成绩大于等于60&#xff0c;该怎么办呢&#xff1f; 或许你会想到使用嵌套的 if 语句&#xff0c;类似下面这样的代码&#xff1a; #include <stdio.h> int main() {int a…

C语言switch case语句详解

当分支比较少的时候我们使用if else语句解决&#xff0c;当分支比较多的时候&#xff0c;我们要使用switch case语句解决&#xff0c;针对分支的复杂性选择合适的程序解决。 当分支过多时&#xff0c;用 if else 处理会不太方便&#xff0c;而且容易出现 if else 配对出错的情…

Python实例 63,64

目录 63.题目&#xff1a;画椭圆 1.tkinter画椭圆 2.turtle画椭圆 64.题目&#xff1a;利用ellipse 和 rectangle 画图 63.题目&#xff1a;画椭圆 1.tkinter画椭圆 #63 from tkinter import * x 360 y 160 top y - 30 bottom y - 30canvas Canvas(width 500,height …

HTML学习笔记(一)

HTML5语法 文档类型 DOCTYPE声明文档类型 &#xff0c;必须位于第一行。 DOCTYPE不区分大小写以及单双引号。 DOCTYPE会触发浏览器以标准模式显示页面。 <!DOCTYPE HTML>字符编码 HTML5中简化了字符编码的写法&#xff0c;直接用 meta 即可 <meta charset "UTF-…

C语言条件运算符详解

如果希望获得两个数中最大的一个&#xff0c;可以使用 if 语句&#xff0c;例如&#xff1a; if(a>b){max a; }else{max b; }不过&#xff0c;C语言提供了一种更加简单的方法&#xff0c;叫做条件运算符&#xff0c;语法格式为&#xff1a; 表达式1 ? 表达式2 : 表达式…

C++ PAT 乙级 1007——素数对猜想

题目详情 让我们定义 dnd_ndn​ 为 dnpn1−pnd_n p_{n 1} - p_ndn​pn1​−pn​&#xff0c;其中 pip_ipi​ 是第 i 个素数。显然有 d11d_1 1d1​1&#xff0c;且对于 n > 1有 dnd_ndn​ 是偶数。 “素数对猜想”认为“存在无穷多对相邻且差为2的素数”&#xff0c;现给…

python实例 65,66

65.题目&#xff1a;一个最优美的图案 #65 import math class PTS:def __init__(self):self.x 0self.y 0 points []def LineToDemo():import tkinter screenx 400screeny 400canvas Canvas(width screenx,height screeny,bg white)AspectRatio 0.85MAXPTS 15h scr…

C语言while循环和do while循环详解

在C语言中&#xff0c;共有三大常用的程序结构&#xff1a; 顺序结构&#xff1a;代码从前往后执行&#xff0c;没有任何“拐弯抹角”&#xff1b; 选择结构&#xff1a;也叫分支结构&#xff0c;重点要掌握 if else、switch 以及条件运算符&#xff1b; 循环结构&#xff1…

C语言for循环详解

for 循环的使用更加灵活&#xff0c;在日常的程序开发过程中我们会使用的更多一些。 使用 while 循环来计算1加到100的值&#xff0c;代码如下&#xff1a; #include <stdio.h> int main(){int i, sum0;i 1; //语句①while(i<100 /*语句②*/ ){sumi;i; //语句③}…

python基础入门(6)之列表

目录 一、Python列表 一.列表基本知识 1)创建列表 2&#xff09;列出表值 3&#xff09;列表长度 4&#xff09;列表项 - 数据类型 5&#xff09;Python 集合&#xff08;数组&#xff09; 二.访问列表 1.正常索引 2)负索引 3)索引范围 4&#xff09;负指数范围 5…

山东大学 2020级数据库系统 实验一

What’s more? 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 …

C语言break和continue用法详解

使用while或for循环时&#xff0c;如果想提前结束循环&#xff08;在不满足结束条件的情况下结束循环&#xff09;&#xff0c;可以使用break或continue关键字。 break关键字 我们使用break来跳出 switch 语句。 当 break 关键字用于 while、for 循环时&#xff0c;会终止循…

python基础入门(7)之元组

目录 Python元组 一、元组理解 1.1&#xff09;基本定义 1.2&#xff09;元组长度 1.3&#xff09;数据类型 二、访问元组 2.1&#xff09;正常访问 2.2&#xff09;负索引 2.3&#xff09;范围性索引 三、更新元组 3.1&#xff09;替换 ​3.2&#xff09;添加项目…

山东大学 2020级数据库系统 实验二

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

C语言嵌套循环详解

在C语言中&#xff0c;if-else、while、do-while、for 都可以相互嵌套。**所谓嵌套&#xff08;Nest&#xff09;&#xff0c;就是一条语句里面还有另一条语句&#xff0c;**例如 for 里面还有 for&#xff0c;while 里面还有 while&#xff0c;或者 for 里面有 while&#xff…

jupyter(Anaconda)设置默认打开文件夹

win r 输入 cmd 回车 再输入如下命令回车&#xff1a; jupyter notebook --generate-config然后&#xff1a;打开生成的文件路径 进去后&#xff1a;编辑这个py ctrl f 搜索&#xff1a;notebook_dir定位 去掉# &#xff0c;引号后改为你要打开的文件路径&#xff08;路径…

山东大学 2020级数据库系统 实验三

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

C语言选择结构和循环结构的汇总

C语言中常用的编程结构有三种&#xff0c;它们分别是&#xff1a; 顺序结构&#xff1a;代码从前往后依次执行&#xff0c;没有任何“拐弯抹角”&#xff0c;不跳过任何一条语句&#xff0c;所有的语句都会被执行到。选择结构&#xff1a;也叫分支结构。代码会被分成多个部分&a…

山东大学 2020级数据库系统 实验四

What’s more 山东大学 2020级数据库系统 实验一 山东大学 2020级数据库系统 实验二 山东大学 2020级数据库系统 实验三 山东大学 2020级数据库系统 实验四 山东大学 2020级数据库系统 实验五 山东大学 2020级数据库系统 实验六 山东大学 2020级数据库系统 实验七 山东大学 20…

jupyter(Anaconda)打不开浏览器

问题描述 有时jupyter不能自动打开浏览器&#xff0c;jupyter notebook输入回车后&#xff0c;不能跳转&#xff0c;把输出的链接复制粘贴到浏览器后&#xff0c;写的代码页不能运行。 问题解决 不是软件什么的问题&#xff0c;而是他们的用户名为中文的问题。只要把用户名改为…