文章目录

  • PCA介绍
  • SPSS实现
  • python实现
    • 简单的主成分分析
    • 主成分分析用于综合评价
  • Notice

PCA介绍

主成分分析(Principal Component Analysis,PCA):利用降维的方法,把多指标转化为几个综合指标的多元统计方法;

实际问题中,为了全面分析问题,往往提出很多与此有关的变量(因素),每个变量在不同程度上包含了结果的部分信息;

主成分:由原始指标进行线性组合形成的几个新指标,用这几个新指标尽可能地去解释原来指标包含的大部分信息;

比如:一个对国民经济的研究,经过主成分分析后,用三个新变量能够代替原来的17个变量,并且保持97.4%的精度;

主成分与原始变量的关系:

  • 主成分保留了原始变量绝大多数信息;
  • 主成分的个数大大少于原始变量的数目;
  • 各个主成分之间互不相关;
  • 每个主成分都是原始变量的线性组合;

  一般来说,代表原来m个变量的主成分不止一个,但不同主成分的信息不能相互包含,统计上的描述就是:两个主成分的协方差为0,几何上就是两个主成分正交;

SPSS实现

步骤:
SPSS导入数据 -> 分析 -> 降维 -> 因子分析;
描述 -> 系数;
抽取 -> 碎石图;
得分 -> 显示因子得分系数矩阵;

  1. 量纲

  主成分分析的结果受量纲的影响,由于各变量的单位可能不同,结果也不同;这是最大的问题,所以主成分分析之前都需要对个变量进行无量纲化处理,然后用协方差 or 相关系数矩阵进行分析;SPSS在分析之前自带无量纲化处理了

无量纲化处理一般分两种:
(1) 归一化
其一:min-max归一化 => x′=x−min(x)max(x)−min(x)x'=\frac{x-min(x)}{max(x)-min(x)} x′=max(x)−min(x)x−min(x)​
其二:平均归一化 => x′=x−mean(x)max(x)−min(x)x'=\frac{x-mean(x)}{max(x)-min(x)}x′=max(x)−min(x)x−mean(x)​
(2) 标准化
x′=x−mean(x)σ(σ为标准差)x'=\frac{x-mean(x)}{\sigma}(\sigma为标准差)x′=σx−mean(x)​(σ为标准差)


SPSS手动无量纲化(标准化):分析 -> 描述统计 -> 描述 -> 勾选"将标准化得分另存为变量"

  1. 相关性矩阵

  2. 总方差解释

  3. 碎石图

  4. 求指标对应系数

方法一:利用成分矩阵+解释总方差求得

Fn前面的系数 就是拿 Fn的贡献率/(F1和F2的累计贡献率);比如F1前面的系数:(72.2/84.5)

方法二:利用成分得分系数矩阵(简单但不建议)

计算综合评价值 F=W1F1+W2F2; Wi 为第 i 主成分的贡献率;

比如方法一代入后最终结果如下:

比如方法二代入后最终结果如下:

python实现

简单的主成分分析

sklearn.decomposition模块的PCA函数sklearn.decomposition.PCA(n_components=None,copy=True)

  • n_components:缺省默认为None,所有成分被保留;若设为2,则提取2个主成分,若为0.85,则自动选择主成分,使满足累计贡献率85%;
  • copy:缺省默认为True,表示运行算法时,将原始数据复制一份进行分析;若为false,则在原始数据上进行降维计算;

步骤

  • 对数据矩阵A进行标准化得到B;
  • 计算相关系数矩阵np.corrcoef(B.T)
  • 计算相关系数矩阵R的特征值 λ1>λ2>…>λm ,以及对于的标准正交化特征向量 u1,u2…um,向量是按列的;利用特征变量得到主成分变量表达式 F1 = u11x1’+u21x2’…+um1ym,F2=…;
  • 计算主成分贡献率和累计贡献率,一般取累计贡献率达到85%以上的主成分就行
  • 利用得到的主成分F1,F2,…Fk分析问题,进行评价;

案例:

import numpy as np
from sklearn.decomposition import PCAa = np.loadtxt("Pdata11_7.txt")
b = np.r_[a[:, 1:4], a[:, -3:]]  # 构造数据矩阵
print("相关系数矩阵:", np.around(np.corrcoef(b.T), decimals=3))  # 数据标准化并计算相关系数矩阵,并保留三位小数md = PCA(n_components=0.85).fit(b)  # 构造并训练模型(累计贡献率>85%即可)print("特征值为:", md.explained_variance_)
print("各主成分的贡献率:", md.explained_variance_ratio_)
print("奇异值为:", md.singular_values_)
print("各主成分的系数:\n", md.components_)  # 每行是一个主成分
"""下面直接计算特征值和特征向量,和库函数进行对比"""
cf = np.cov(b.T)  # 计算协方差阵
c, d = np.linalg.eig(cf)  # 求特征值和特征向量
print("特征值为:", c)
print("特征向量为:\n", d)
print("各主成分的贡献率为:", c / np.sum(c))


分析评价:

主成分分析用于综合评价

  主成分分析可应用于诸多评价领域,诸如投资组合风险管理、企业效益的综合分析、图像特征识别等;将主成分分析于聚类分析、判别分析以及回归分析方法相结合;
一般步骤

  • 若各指标的属性不同(成本型、利润型等),将原矩阵A标准化为B;
  • 计算B的相关系数矩阵R;
  • 计算 R 的特征值 λ 以及相应的特征向量 u;
  • 根据特征值计算累计贡献率,确定主成分的个数,而特征向量 ui 就是第 i 主成分的系数向量
  • 计算主成分的得分矩阵,若选定 K 个主成分,则主成分得分矩阵为 F = B ·[u1,u2,···,uk]
  • 计算综合评价值 Z=FW,其中 W 是第 i 主成分的贡献率(占总主成分贡献率的多少);根据综合评价值进行排序,若为效益型指标,则评价值越大排名越靠前;若为成本型指标值,则评价越小排名越靠前;

对于下列案例:

import numpy as np
from scipy.stats import zscorea = np.loadtxt("Pdata11_8.txt")
print("相关系数阵为:\n", np.corrcoef(a.T))
b = np.delete(a, 0, axis=1)  # 删除第1列数据
c = zscore(b)
r = np.corrcoef(c.T)  # 数据标准化并计算相关系数阵
d, e = np.linalg.eig(r)  # 求特征值和特征向量
rate = d / d.sum()  # 计算各主成分的贡献率
print("特征值为:", d)
print("特征向量为:\n", e)
print("各主成分的贡献率为:", rate)
k = 1  # 提出主成分的个数
F = e[:, :k]
score_mat = c.dot(F)  # 计算主成分得分矩阵
score1 = score_mat.dot(rate[0:k])  # 计算各评价对象的得分
score2 = -score1  # 通过表中数据以及score1观测,需要调整得分的正负号
print("各评价对象的得分为:", score2)
index = score1.argsort() + 1  # 排序后的每个元素在原数组中的位置
print("从高到低各个城市的编号排序为:", index)



Notice

  • 主成分分析时,主成分的系数的正负号是不可控的,因为特征向量乘以 -1 仍然是特征向量,所以一定要根据实际问题判断系数要不要取相反数!
  • 主成分分析之前,一定要进行数据的标准化 or 归一化,一般是标准化;

数学建模:评价模型——主成分分析 PCA SPSS实现、python实现相关推荐

  1. 清风数学建模学习笔记——主成分分析(PCA)原理详解及案例分析

    主成分分析   本文将介绍主成分分析(PCA),主成分分析是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息. 一般 ...

  2. 数学建模——评价模型

    文章目录 一.模糊综合评价模型 1.基础知识 2.一级模糊综合评价 3.二级模糊综合评价 二.灰色关联分析模型 1.灰色关联分析原理 2.灰色关联分析步骤 三. Topsis(理想解法) 1.理想解法 ...

  3. 数学建模常用模型04:灰色关联分析法

    数学建模常用模型04:灰色关联分析法 灰色关联分析法 本文所用的资料参考来源:美赛资料网:美赛资料网 与灰色预测模型一样,比赛不能优先使用,灰色关联往往可以与层次分析结合使用.层次分析用在确定权重上面 ...

  4. 数学建模常见模型总结

    数学建模常见模型总结 一.插值 当已有数据量不够,需要补充,且认定已有数据可信时,通常利用函数插值方法. 常用插值方法 拉格朗日插值 分段线性插值 Hermite 三次样条插值 克里金法 matlab ...

  5. 数学建模——支持向量机模型详解Python代码

    数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...

  6. 数学建模——线性规划模型详解Python代码

    数学建模--线性规划模型详解Python代码 标准形式为: min z=2X1+3X2+x s.t x1+4x2+2x3>=8 3x1+2x2>=6 x1,x2,x3>=0 上述线性 ...

  7. 数学建模传染病模型_数学建模| 时间序列模型

    1 数学建模 时间序列模型 1.与实践有关系的一组数据,叫做时间序列: 2.得到时间序列的数据后,要构建模型,其中平稳时间序列的模型,是本节课重点介绍的: 3.y=at+季节性+周期性 一.     ...

  8. 数学建模常用模型(一):灰色预测法

    数学建模常用模型(一):灰色预测法 灰色预测法是一种用于处理少量数据.数据质量较差或者缺乏历史数据的预测方法.它适用于一些非线性.非平稳的系统,尤其在短期预测和趋势分析方面有着广泛的应用.灰色预测法作 ...

  9. 数学建模——智能优化之遗传算法详解Python代码

    数学建模--智能优化之遗传算法详解Python代码 import numpy as np import matplotlib.pyplot as plt from matplotlib import ...

最新文章

  1. linux下oracle数据库升级,Oracle数据库在LinuxAS4升级
  2. MySQL默认安装目录
  3. Git 使用文档( git pull/fetch )
  4. AiLearning:一个 GitHub万星的中文机器学习资源
  5. 【思维、费马小定理】CQXYM Count Permutations
  6. CruiseControl.Net+SVN+MSBuild 自动编译
  7. win10如何修改鼠标指针样式
  8. 世界头号电脑黑客 - 凯文•米特尼克(Kevin Mitnick)
  9. Mac上如何修改itunes的默认备份地址
  10. 常见文件编码 - 多字节编码与Unicode编码区别
  11. 上门洗车APP --- Android客户端开发 前言及业务简介
  12. 教你10分钟电脑配置挑选装机速成攻略
  13. stringstream切割字符串
  14. Lesson 10
  15. 计算机软件水平考试都是选择题吗,计算机软考选择题多少分一道?
  16. 大数据精准营销应用(三)
  17. [Java面试九]脚本语言知识总结.
  18. 计算机剪切文件保存在哪里,电脑剪切的文件怎么恢复
  19. 计算机二级Excel常考函数:
  20. API实现自动处理物料搬运单

热门文章

  1. Visual Studio启用64位 IIS Express 解决 x64位的dll 而出现 未能加载文件或程序集“xxxxxxxx”或它的某一个依赖项。试图加载格式不正确的程序。...
  2. 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
  3. 文件上传漏洞原理与实例测试
  4. 意见簿---在批评中成长
  5. 如何避免在Block里用self造成循环引用
  6. java版 二叉树 所有递归和非递归遍历算法
  7. centos7安装python3.7.0
  8. 机器学习之01篇:初步窥探
  9. 在用到select2时,临时抱佛脚学习了一下
  10. 多线程中,NSOperationQueue和GCD的区别