数学建模:主成分分析法

news2025/1/21 12:04:06

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛

主成分分析法

算法流程

  1. 构建原始数据矩阵 X X X ,其中矩阵的形状为 x ∗ n x * n xn ,有 m m m 个对象, n n n 个评价指标。
  2. 然后进行矩阵的归一化处理
  3. 首先计算矩阵的指标之间的相关系数矩阵 R R R。使用matlab 的 corr 即可得到。
  4. 计算相关系数矩阵 R R R 的****特征值 D D D 和特征向量 V V V** ,并且特征值从大到小排序,由特征向量组成 n n n 个新的指标向量。
    1. y 1 , y 2 , y 3 y_1 , y_2 , y_3 y1,y2,y3 为新的主成分。

在这里插入图片描述

  1. 选择 p p p 个主成分,计算综合评价值:

    1. 计算特征值 λ i , i ∈ ( 1 , 2 , . . . n ) \lambda _i,i\in(1,2,...n) λii(1,2,...n)信息贡献率累计贡献率:

      α i = ∑ k = 1 n λ k ∑ k = 1 m λ k \alpha_i=\frac{\sum_{k=1}^n\lambda_k}{\sum_{k=1}^m\lambda_k} αi=k=1mλkk=1nλk

      b j = λ j ∑ k = 1 m λ k ( j = 1 , 2 , ⋯   , m ) b_j=\frac{\lambda_j}{\sum_{k=1}^m\lambda_k}(j=1,2,\cdots,m) bj=k=1mλkλj(j=1,2,,m)

    2. 找到累计贡献达到85%的位置,选择前 p p p 个指标变量 y 1 y 2 . . . y p y_1 y_2 ... y_p y1y2...yp作为新的主成分,代替原来的 n n n 个指标,从而对 p p p 个主成分进行综合分析。

      Z = ∑ j = 1 p b j y j Z=\sum_{j=1}^{p}b_{j}y_{j} Z=j=1pbjyj


    代码实现

    %% A_data 是一个 m*n列的矩阵,包含 n个指标
    
    %% 
    corr_A = corrcoef(A_data);
    [a,b,c] = pcacov(corr_A);
    
    %% 最后根据c的前 85% 来得到降维后的指标个数
    

    自实现:

    function [Score,Vec,p]=mfunc_PCA(data)
        % 进行主成分分析
        % paramts:
        %   data: 传递一个原始数据矩阵,需要首先进行数据的标准化mapminmax。Shape: (m*n),m为对象个数,n为指标个数
        % returns:
        %   Score: 综合评价得分
        %   Vec: (n,3)的矩阵,第一列:特征值;第二列:贡献率,第三列:累计贡献率
    		%   p:指标降维后的个数
    
        % 计算指标的相关系数矩阵
        R=corr(data);
        %计算特征向量和特征值
        [V,D] = eig(R);  %V特征向量,D特征值对角线矩阵
        lam=diag(D);%取出对角线元素
        %对特征值从大到小排列
        [lam_sort,index]=sort(lam,'descend');
        V_sort=V(:,index);
        Vec = zeros(length(lam_sort),3);
        Vec(:,1) = lam_sort;
    
        contribution=lam_sort./sum(lam_sort); %贡献率
        Vec(:,2) = contribution;
        cContribution=cumsum(contribution); %累计贡献率
        Vec(:,3) = cContribution;
        p=find(cContribution>=0.85); 
        p=p(1); %找到累计贡献达到85%的位置第一个位置
        %
        M=data*V_sort;
        M=M(:,1:p);  %这就是得到的新的累计贡献率超过85%主成分
        %以下为用新的主成分评分
        M(:,find(sum(M)<0))=-M(:,find(sum(M)<0));
        %M(find(sum()))=-M(:,2);
        a=contribution(1:p);
        F=M.*a';
        s=sum(F');
        Score=100*s/max(s);
    end
    

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

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

相关文章

Python学习 -- 枚举类

当谈到在Python中管理一组常量或者枚举类型的时候&#xff0c;Enum&#xff08;枚举&#xff09;类是一个非常有用的工具。Python的Enum类允许你创建具有有意义的、可读性高的常量集合&#xff0c;而不必使用硬编码的数字或字符串。在本篇博客中&#xff0c;我们将深入探讨Pyth…

【LeetCode75】第四十题 最大层内元素和

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这道题和LeetCode75的上一题大同小异&#xff0c;都是要我们对二叉树进行层序遍历。 那具体如何层序遍历我再上一题也详细介绍过了&#…

System.Environment在Unity和常规.NET应用程序中的应用与兼容性

什么是 System.Environment&#xff1f; System.Environment 是 .NET Framework 的一个类&#xff0c;它提供了关于当前环境和平台的信息&#xff0c;以及与它们进行交互的方法。这些环境可以是操作系统、版本、机器配置等。该类为应用程序提供了访问特定于操作系统的功能的方…

常用命令之docker生命周期管理和镜像管理命令

一、docker简介 Docker是一个开源的容器化平台&#xff0c;用于构建、部署和管理应用程序。它使用容器技术来将应用程序及其依赖项打包为一个独立的可移植容器&#xff0c;可以在不同的环境中运行&#xff0c;而不需要依赖特定的操作系统或硬件。   Docker的主要特点包括&…

poi-tl设置图片

选中图片右击 选择设置图片格式

有哪些情感书单素材?怎么制作成视频?

如果你想要制作一段能够引起观众共鸣的情感书单视频&#xff0c;你需要准备哪些素材呢&#xff1f;下面我们将介绍制作情感书单视频的素材和方法。 情感书单素材 书籍封面 制作情感书单视频的第一个素材是书籍封面。封面上的图案能够很好地表达书本的主题和情感&#xff0c;是…

Hadoop HA模式切换

Hadoop HA模式下 主从的切换&#xff08;操作命令&#xff09; YARN HA 获取所有RM节点的状态 yarn rmadmin -getAllServiceState获取 rm1 节点的状态 yarn rmadmin -getServiceState rm1手动将 rm1 的状态切换到STANDBY yarn rmadmin -transitionToStandby rm1 ##或者 y…

5年经验之谈 —— 性能测试中故障排查及解决方法!

引言&#xff1a; 在进行性能测试过程中&#xff0c;同事反馈报错率突然攀升。通过查看相关日志和服务器状态&#xff0c;发现了一些关键信息。本文将详细介绍导致报错率攀升的原因&#xff0c;并提供相应的解决方法。 1. 问题背景 在使用JMeter进行性能测试时&#xff0c;我…

vue、elementui控制前一级选择后,后一级才会有数据

<el-form-item label"废物类型&#xff1a;"><el-select clearable v-model"queryForm.hswCateType" placeholder"请选择" change"industryCategoryChange" focus"industryCategoryFocus"><el-option v-for&…

微软用 18 万行 Rust 重写了 Windows 内核

微软正在使用 Rust 编程语言重写其核心 Windows 库。 5 月 11 日——Azure 首席技术官 Mark Russinovich 表示&#xff0c;最新的 Windows 11 Insider Preview 版本是第一个包含内存安全编程语言 Rust 的版本。 “如果你参加了 Win11 Insider 环&#xff0c;你将在 Windows 内…

C语言“牵手”天猫商品详情数据方法,天猫商品详情API接口申请指南

天猫商城平台是阿里巴巴集团旗下的一个综合性购物网站。 天猫商城的前身是淘宝商城&#xff0c;于2012年1月11日上午更名。天猫是一个整合数千家品牌商、生产商&#xff0c;为商家和消费者之间提供一站式解决方案的B2C&#xff08;Business-to-Consumer&#xff0c;商业零售&a…

干货!证书超实用小Tips

1.CSA 是加拿大标准协会(Canadian Standards Association)的简称&#xff0c;它成立于1919年&#xff0c;是加拿大首家专为制定工业标准的非盈利性机构。在北美市场上销售的电子、电器等产品都需要取得安全方面的认证。 2.EAC认证 是海关联盟国家的认证。海关联盟是由俄罗斯…

C# WPF监听USB插入拨出

可以全部监听。好用 private void FormF100WriteCortexLicense_Load(object sender, EventArgs e){this.Text this.Text " " FT_Tools.Program.version;USB USBWatcher new USB();USBWatcher.AddUSBEventWatcher(USBEventHandler, USBEventHandler, new TimeSpa…

【MongoDB系列】3. MongoDB 安全策略:验证和授权

前言 前面文章中通过客户端工具&#xff08;MongoDB Shell、Robo 3T&#xff09;连接 MongoDB 服务时&#xff0c;只要有 IP 地址和端口号&#xff0c;就能连接到数据库&#xff0c;之后就能操作数据库。这是因为默认安装的 MongoDB 没有启用身份验证&#xff0c;也没有设置初…

PlotAI = Matplotlib + AI

PlotAI是在 Python 和 Matplotlib 中创建绘图的最简单方法&#xff0c;它使用 LLM 生成Python代码和Matplotlib绘图。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 1、PlotAI简介 PlotAI的思路&#xff1a; 用户提供输入数据框和提示。PlotAI 构建了 LLM 的提示&…

代码随想录打卡—day46—【DP】— 8.29 背包END

1 139. 单词拆分 139. 单词拆分 做了很久...估计2h 一开始我的思路卡死了 看题解之后的思路的详解见注释&#xff0c; 我的写法和carl 答案在一些微小的细节上略有不同&#xff0c;我的更好理解&#xff0c;但他的解法更简单。 我写的过程中&#xff0c;需要注意下标和字符…

记一次空字符串判断的大坑

1. 控制台打印数据如下 2.尝试做判断 如图我肉眼看到的是 " " 于是我做了如下判断 结果竟然是false 我做了修改 竟然还是false 3. 开始各种转数据类型 发现了问题,空字符串的布尔值应该是false,但是这个玩意儿是true 4. 查看数据 我发现在往控制台粘贴数据时,是个…

SAP SD之如何定义销售组织(Sales Organization)

目录 前言 一、注意点 二、创建步骤 1.Step By Step 总结 前言 SAP中的销售组织是SD中的最高级别组织单位&#xff0c;负责公司中发生的所有销售和服务活动。销售组织是根据公司的销售需求在SAP中定义的。控制向客户销售、谈判销售等条款。它只能分配给一个公司代码和一个…

Python(Web时代)—— Django数据库整合

简介 ORM框架介绍 ORM&#xff08;Object Relation Mapping&#xff09;框架&#xff0c;可以帮助我们把类和数据表进行一个映射&#xff0c;让我们可以通过类和类对象来直接操作数据库中的数据。 优势&#xff1a;根据对接的数据库引擎翻译成对应的sql语句&#xff0c;所以…

平均值和方差的点估计、区间估计

0&#xff0c;预备知识 0.1&#xff0c;中心极限定理 0.2&#xff0c;均值的标准误差 0.3&#xff0c;卡方分布 1&#xff0c;总体均值的无偏估计量 2.1&#xff0c;当总体方差已知时对样本均值的描述&#xff08;Z统计量&#xff09; 2.2&#xff0c;当总体方差未知时对样本均…