评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释

数学建模系列文章:

以下是个人在准备数模国赛时候的一些模型算法和代码整理,有空会不断更新内容:
评价模型(一)层次分析法(AHP),熵权法,TOPSIS分析 及其对应 PYTHON 实现代码和例题解释
评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释
优化模型(零)总述,分类,解析各类优化模型及普适做题步骤
优化模型(一)线性规划详解,以及例题,用python的Pulp库函数求解线性规划
优化模型(二)非线性规划详解,以及例题,Scipy.optimize 求解非线性规划

文章目录

      • 1.4 主成分分析
        • 数据降维的作用:
        • 基本步骤:
        • 代码:
        • 补充和解释说明:
      • 1.5 因子分析
        • 基本思想 原理:
        • 基本步骤总结:
        • 详细步骤分析:
      • 1.6 因子分析和主成分分析的对比

1.4 主成分分析

主成分分析(PCA)详解

主成分分析(PCA)

主成分分析(PCA)是一种比较基础的数据降维方法,也是多元统计中的重要部分,在数据分析、机器学习等方面具有广泛应用。主成分分析目的是用较少的变量来代替原来较多的变量,并可以反映原来多个变量的大部分信息。

主成分分析是把原来多个变量划为少数几个综合指标的一种统计分析方法。从数学角度来看,这是一种降维处理技术

数据降维的作用:
  • 使得数据集更易使用,有利于问题的简化;

  • 数据降维后变量的减少,会使计算机处理的数据大大减少,从而缩短数据处理时间。;

  • 去除噪声;

  • 使得结果容易理解,可以看主成分的权重来进行分析;

主成分分析(PCA)的思想

评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第1张图片

评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第2张图片

图解: 可以通过旋转坐标轴来理解上述 ”线性组合中方差最大者“

对于一个含有n个数据,变量的个数为p的一个样本,我们可以用p维空间的n个点来表示这些数据。例如含有2个变量(三个变量的话就是立体图像),3个数据(1,2),(2,2),(3,3)的样本,即可以表示为:

评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第3张图片

我们在实验初会提出很多变量,并且采集这些数据,这些数据中各个变量往往会存在一定的相关性。而这些相关性便意味着可以进行数据的降维,用更少的变量来替代这些变量。

主成分分析的直观理解,可以认为是旋转坐标轴,使得在旋转坐标轴后这些点在新的坐标系下在各个坐标轴(变量)方向投影的方差变大。其中如果在某坐标轴上的方差最大,那么这个坐标轴对应的这些散点的坐标轴就是第一主成分**,其次就是第二主成分,依此类推。 如上图若这些点在某个斜线Z=aX+bY上方差最大那么 这就是第一主成分类似上述公式z1=l1x1 + l2x2

评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第4张图片
对于上图的8组数据,我们发现在x轴方向方差很大,而在y轴方向方差为0,所以就可以用这些点的横坐标数据作为第一主成分并且只选第一主成分便可以达到要求(看累计贡献率)

对于下图的情况,我们发现这些数据都几乎排列在一条直线上,并且在x轴方向和y轴方向的方差都比较大。但是如果把坐标轴旋转一定角度,使得这些数据在某个坐标轴的投影的方差比较大,便可以用新坐标系下**方差较大的一个坐标轴坐标作为主成分
评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第5张图片
> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zGmpgaCC-1693302842726)(D:\S\typora文件夹\img\image-20230807224208534.png)]
大多数情况,数据各个变量基本服从正态分布,所以
变量为2的数据散点分布大致为一个椭圆**,变量为3的散点分布大致为一个椭球p个变量的数据大致分布在一个超椭圆。而通过旋转坐标系,使得超椭圆的长轴落在一个坐标轴上,其次超椭圆另一个轴也尽量落在坐标轴上。这样各个新的坐标轴上的坐标值便是相应的主成分。
评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第6张图片

可以通过旋转坐标系,使得椭圆两个轴尽量落在坐标轴上。
评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第7张图片

这样,我们便以散点在新坐标系下的x坐标作为第一主成分(因为x方向方差最大)y轴的坐标为第二主成分。

协方差矩阵相关概念、性质、应用意义及矩阵特征向量的用处

基本步骤:

评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第8张图片

  1. 数据标准化处理
    评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第9张图片
    评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第10张图片

  2. 计算标准化样本的协方差矩阵
    评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第11张图片

  3. 计算R的特征值和特征向量:

  • 特征值和特征向量一般借助软件可以直接计算
    评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第12张图片
  1. 计算主成分贡献率以及累计贡献率:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3C8MnNVH-1693302842730)(D:\S\typora文件夹\img\image-20230807231351750.png)]
在这里插入图片描述
5. 写出主成分&&根据系数分析主成分代表的意义:
>[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JcOMWmyh-1693302842730)(D:\S\typora文件夹\img\image-20230807231422195.png)]

  1. 利用主成分的结果进行后续分析:
  • 聚类分析
  • 回归分析
代码:
import numpy as np
import pandas as pd
 
df=pd.read_csv('corn.csv') #读取文件
df=pd.DataFrame(df)
R=df.corr() #样本相关阵
l,T=np.linalg.eig(R) #求特征值l与特征向量T,特征值默认从大到小排序
n,p=df.shape 
s=0
t=0
cr=[] #累计贡献率
for i in range(len(l)):
    t+=1
    contri=l[i]/np.sum(l) #第i主成分贡献率
    cr.append(contri)
    s+=contri #累计贡献率
    if s>=0.8: #累计贡献率达80%即停止
        break
pc=[] #主成分
for i in range(t):
    Y=np.dot(df,T[i].T) #计算第i主成分
    pc.append(Y)
factor_loading=[]
for i in range(t):
    a=[]
    for j in range(p):
        a.append(np.sqrt(l[i])*T[i][j]) #计算第i主成分在第j个变量上的载荷
    factor_loading.append(a)
factor_loading=np.array(factor_loading)
print('主成分个数:',t)
print('主成分:',np.mat(pc))
print('贡献率:',cr)
print('累计贡献率:',s)
print('因子载荷:',factor_loading)
补充和解释说明:
  • 主成分的解释其含义一般多少带有点模糊性,不像原始变量的含义那么清楚、确切,这是变量降维过程中不得不付出的代价。
  • 主成分分析的困难之处主要在于要能够给出主成分的较好解释,所提取的主成分中如有一个主成分解释不了,整个主成分分析也就失败了。
  • 下面给出一些主成分分析解释的例子
  • 第一个例子

评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第13张图片
评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第14张图片
评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第15张图片

  • 第二个例子

评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第16张图片

1.5 因子分析

因子分析例题

因子分析(FA)算法简述

基本思想 原理:

概述:

​ 研究从变量群中提取共性因子的统计技术,因子分析法通过研究变量间的相关系数矩阵,因为因子分析的前提是变量Xi之间存在内部关系,这样才能分解为各因子),把这些变量间错综复杂的关系归结成少数几个综合因子,由于归结出的因子个数少于原始变量的个数,但是它们又包含原始变量的信息,所以,这一分析过程也称为降维。由于因子往往比主成分更易得到解释,故因子分析比主成分分析更容易成功,从而有更广泛的应用。例如,一个学生的英语、数据、语文成绩都很好,那么潜在的共性因子可能是智力水平高。因此,因子分析的过程其实是寻找共性因子和个性因子并得到最优解释的过程。

​ 这里注意相关系数矩阵为非单位阵,故可实施因子分析,因为因子分析的前提是变量Xi之间存在内部关系,这样才能分解为各因子。

起源:

​ 因子分析由斯皮尔曼在1904年首次提出,其在某种程度上可以被看成是主成分分析的推广和扩展。

核心问题:

因子分析有两个核心问题: 一是如何构造因子变量二是如何对因子变量进行命名解释。

类型:

因子分析类型: R型因子分析与Q型因子分析,就像聚类分析分为R型和Q型一样,R型的因子分析是对变量作因子分析,Q型因子分析是对样品作因子分析,R型是数学建模中常用的类型。因此本文主要针对R型进行讲解。

因子分析的原理:

评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第17张图片

矩阵形式:
评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第18张图片

给出一些假设 来计算A矩阵

评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第19张图片

假设: 公因子彼此不相关,且具有单位方差;特殊因子彼此不相关且与公因子也不相关。

因子载荷矩阵的求解:

  1. 主成分分析法:
    • 求相关矩阵的 特征值和特征矩阵,一般要特征值大于1的,该方法更常用,下列计算步骤中用的此法
  2. 主因子法
  3. 极大似然估计法
基本步骤总结:
  1. 确定原有若干变量是否适合因子分析
    • 相关性检验
  2. 构造求解因子变量
    • 输入原始数据X (n*p维),计算样本均值和方差,对数据样本进行标准化处理
    • 计算样本的相关矩阵R
    • 求相关矩阵R的特征根和特征向量
    • 根据系统要求的累积贡献率 && 碎石图 确定公共因子的个数以及因子载荷矩阵A
  3. 利用旋转使得因子变量 && 解释公共因子
    • 对载荷矩阵进行旋转,以求能更好地解释公共因子
    • 解释公共因子
    • 选取每个因子中载荷系数最高的几个指标,进行综合解释因子的作用
  4. 计算因子变量的得分
    • 计算成分得分系数矩阵表
    • 因子权重分析
    • 根据上述计算结果,求因子得分,对系统进行分析
详细步骤分析:

1. 确定原有若干变量是否适合因子分析:

因子分析的基本逻辑是从原始变量中构造出少数几个具有代表意义的因子变量,这就要求原有变量之间要具有比较强的相关性,因而需要进行相关性检验。

  • 相关性检验,一般采用KMO检验法和Bartlett球形检验法两种方法来对原始变量进行相关性检验;

    • KMO检验法

      • 是 Kaiser, Meyer和 Olkin提出的,该检验是对原始变量之间的简单相关系数和偏相关系数的相对大小进行检验,主要应用于多元统计的因子分析。
      • KMO取值在0~1越接近于1,意味着变量间的相关性越强,原有变量越适合作因子分析;当所有变量间的简单相关系数平方和接近0时,KMO值越接近于0,意味着变量间的相关性越弱,原有变量越不适合作因子分析。
      • 其中,Kaiser给出一个KMO检验标准:KMO>0.9,非常适合;0.8
    • Bartlett巴特利特球形检验法

      • 巴特利特球形检验是以变量的相关系数矩阵为出发点的。它的原假设是相关系数矩阵是一个单位阵(不适合做因子分析,指标之间的相关性太差,不适合降维)

      • 巴特利特球形检验的统计量是根据相关系数矩阵的行列式得到的。如果该值较大,且其对应的p值小于用户心中的显著性水平(一般为0.05),那么应该拒绝原假设,认为相

        关系数不可能是单位阵,即原始变量之间存在相关性,适合于作因子分析。

2. 构造求解因子变量:

  • 输入原始数据X n*p维,计算样本均值和方差,对数据样本进行标准化处理;

    • 主成分分析和因子分析用于处理高斯数据,所以数据需要经过标准化处理
  • 计算样本的相关矩阵R;

    • 借助于软件一键生成样本变量的相关矩阵R: 假设某一社会经济系统问题,其主要特性可用4个指标表示,它们分别是生产、技术、交通和环境。其相关矩阵为:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z9J4rhJg-1693302842734)(D:\S\typora文件夹\img\image-20230808164740937.png)]

  • 求相关矩阵R的特征根和特征向量;

    • 相关矩阵为:
      评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第20张图片

      根据相关矩阵求出来相应的特征值、占总体百分比和累计百分比如下表:

      评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第21张图片

      对应特征值的特征向量矩阵(一个特征值对应一个纵向的向量)为:

      评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第22张图片

  • 根据系统要求的累积贡献率&&碎石图 确定公共因子的个数以及因子载荷矩阵A;

    • 一般取累计贡献率达到80%的公共因子的作为最终的因子
      评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第23张图片

    • 碎石检验(scree test)

      • 可通过直接观察特征值的变化来决定因素数。当某个特征值较前一特征值的值出现较大的下降,而这个特征值较小,其后面的特征值变化不大,说明添加相应于该特征值的因素只能增加很少的信息,所以前几个特征值就是应抽取的公共因子数。
        评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第24张图片
    • 假如要求所取特征值反映的信息量占总体信息量的90%以上,则从累计特征值所占百分比看,只需取前两项即可。 也就是说,只需取两个主要因子。对应于前两列特征值的特征向量,可求的其因子载荷矩阵A为:
      评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第25张图片

3. 利用旋转使得因子变量 && 解释公共因子:

  • 对载荷矩阵进行旋转,以求能更好地解释公共因子;

    正是因为因子载荷矩阵A不是唯一的,在实际的应用中我们常常利用这一点,通过因子的变换,使得新的因子具有更容易解释的实际意义。这就是因子分析往往比主成分分析的结果更容易解

    释的原因。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dlgticwR-1693302842737)(D:\S\typora文件夹\img\image-20230808170358446.png)]

    我们在得到一个因子载荷矩阵的估计时,有可能会出现多个变量均在同一个因子上出现较大因子载荷,或者一个变量在多个因子上具有较大的载荷,此时很难对因子进行解释或命名,此时我们希望通过对因子载荷矩阵进行旋转得到新的简化后的因子载荷矩阵,新的因子载荷之间区分度更高,便于因子分析和命名。

  • 解释公共因子

    这个相当于A是15*4的载荷矩阵,因子对应的变量值大的说明,该变量对该因子的贡献度大
    评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第26张图片

  • 选取每个因子中载荷系数最高的几个指标,进行综合解释因子的作用

    • 假设前文确定得到n个因子,因子i中a,b,c,d的因子载荷系数较大,因此可将因子i确定为某一个成分(可进行总结重命名)

    • 比如因子2 载荷系数最高的几个指标是 玩电脑情况、散步情况、逛街情况、日常锻炼情况;那这个因子很明显可以概括为 休闲娱乐因子,其他因子也类比如此。

    • 再比如下列例子:

评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第27张图片评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第28张图片

  • 最右边一列是共同度 (公因子方差 实际上是这些共因子能够解释出来原来变量的百分之多少,,越多越好
    评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第29张图片

  • 因子荷载矩阵热力图,直观看出可以概括的因子的变量。
    评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第30张图片

4. 计算因子变量的得分:

  • 计算成分得分系数矩阵表;

    • 成分得分系数矩阵表,是经过旋转后的因子载荷矩阵,意在说明各个成分的所包含的因子得分系数(主成分载荷),用于计算出成分得分,得出主成分公式。
      评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第31张图片
  • 因子权重分析:
    评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第32张图片

    • 上表为因子分析的根据载荷系数等信息所做的主成分权重分析,其计算公式为:方差解释率/旋转后累积方差解释率。
  • 根据上述计算结果,求因子得分,对系统进行分析
    评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第33张图片

    • 最终提取出来四个因子(用15个变量表示)(数据降维)
    • 根据因子和权重计算综合评分:
      评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第34张图片

应用例子

实现方法

通过spsspro spsspro进行因子分析

1.6 因子分析和主成分分析的对比

  • 思想上的不同
    • 因子分析(FA factor analysis)类似于一个因式分解找公因子的过程,找到公共因子然后用公共因子表示所有的变量xi,因子是线性无关的
    • 主成分分析(PCA)是用所有的变量线性组合构成线性无关的新的变量,进而用新的变量继续分析,其实这个变量已经不是原本的变量特征。所以上次那个国赛例题选取729个特征的20个最好的不可以使用主成分分析。

评价模型(二)主成分分析、因子分析、二者对比及其对应 PYTHON 实现代码和例题解释_第35张图片

  • 其他方面的不同
  1. 假设不同: 主成分分析只是简单的数值计算,不需要构造一个模型,几乎没什么假定;而因子分析需要构造一个因子模型,并伴随几个关键性的假定

  2. 解的个数: 主成分的解是唯一的,而因子可有许多解,可以旋转找最优。因子解释成功的可能性要远大于主成分解释成功的可能性。

  3. 求解方法不同: 主成分分析的求解方法从协方差阵出发,而因子分析的求解方法包括主成分法、主轴因子法、极大似然法、最小二乘法、a因子提取法等;

  4. 线性表示方法不同; 因子分析是把变量表示成各公因子的线性组合;主成分分析中则是把主成分表示成各变量的线性组合。

  5. 解释重点不同; 主成分分析:重点在于解释个变量的总方差;因子分析:则把重点放在解释各变量之间的协方差。

  6. 算法上的不同; 主成分分析:协方差矩阵的对角元素是变量的方差;因子分析:所采用的协方差矩阵的对角元素不在是变量的方差,而是和变量对应的共同度(变量方差中被各因子所解释的部分)。

  • 应用途径:
  • 因子分析跟主成分分析一样,由于侧重点都是进行数据降维,因此很少单独使用,大多数情况下都会有一些模型组合使用。例如:
    (1) 因子分析(主成分分析)+多元回归分析:判断并解决共线性问题之后进行回归预测;
    (2) 因子分析(主成分分析)+聚类分析:通过降维后的数据进行聚类并分析数据特点,但因子分析会更适合,原因是基于因子的聚类结果更容易解释,而基于主成分的聚类结果很难解释;
    (3) 因子分析(主成分分析)+分类:数据降维(或数据压缩)后进行分类预测,这也是常用的组合方法。
  • 因子分析通过寻找公共因子的方式达到数据降维的目的(因子分析还可以用于分析不同变量之间的内在联系),主成分分析则是求特征矩阵,实现数据的降维。
  • 因子分析的主要作用:
    (1) 寻求基本数据结构;
    (2) 用少数因子,描述具有相关性的多个指标;
    分分析一样,由于侧重点都是进行数据降维,因此很少单独使用,大多数情况下都会有一些模型组合使用。例如:
    (1) 因子分析(主成分分析)+多元回归分析:判断并解决共线性问题之后进行回归预测;
    (2) 因子分析(主成分分析)+聚类分析:通过降维后的数据进行聚类并分析数据特点,但因子分析会更适合,原因是基于因子的聚类结果更容易解释,而基于主成分的聚类结果很难解释;
    (3) 因子分析(主成分分析)+分类:数据降维(或数据压缩)后进行分类预测,这也是常用的组合方法。
  • 因子分析通过寻找公共因子的方式达到数据降维的目的(因子分析还可以用于分析不同变量之间的内在联系),主成分分析则是求特征矩阵,实现数据的降维。
  • 因子分析的主要作用:
    (1) 寻求基本数据结构;
    (2) 用少数因子,描述具有相关性的多个指标;
    (3) 数据简化,即降维。

你可能感兴趣的:(数学建模,数学建模)