数学建模:主成分分析法

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

主成分分析法

算法流程

  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
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从过滤器初识责任链设计模式

下面用的过滤器都是注解方式 可以使用非注解方式,就是去web.xml配置映射关系 上面程序的执行输出是 再加一个过滤器 下面来看一段程序 输出结果 和过滤器是否非常相识 但是上面这段程序存在的问题:在编译阶段已经完全确定了调用关系,如果你想改变他们的调用顺序或者继续添加一…

ADRV9009子卡 设计原理图:FMCJ450-基于ADRV9009的双收双发射频FMC子卡 便携测试设备

FMCJ450-基于ADRV9009的双收双发射频FMC子卡 一、板卡概述 ADRV9009是一款高集成度射频(RF)、捷变收发器&#xff0c;提供双通道发射器和接收器、集成式频率合成器以及数字信号处理功能。北京太速科技&#xff0c;这款IC具备多样化的高性能和低功耗组合&#xff0c;FMC子…

uniapp的 picker 日期时间选择器

效果图&#xff1a; dateTimePicker.js function withData(param){return param < 10 ? 0 param : param; } function getLoopArray(start,end){var start start || 0;var end end || 1;var array [];for (var i start; i < end; i) {array.push(withData(i))…

QT登陆注册界面练习

一、界面展示 二、主要功能界面代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QMainWindow(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setFixedSize(540,410); //设置固定尺寸th…

CentOS 8 安装 Code Igniter 4

在安装好LNMP运行环境基础上&#xff0c;将codeigniter4文件夹移动到/var/nginx/html根目录下&#xff0c;浏览器地址栏输入IP/codeigniter/pulbic 一直提示&#xff1a; Cache unable to write to "/var/nginx/html/codeigniter/writable/cache/". 找了好久&…

nowcoder NC236题 最大差值

目录 题目描述&#xff1a; 示例1 示例2 题干解析&#xff1a; 暴力求解&#xff1a; 代码展示&#xff1a; 优化&#xff1a; 代码展示&#xff1a; 题目跳转https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204?tpId128&tqId33768&ru/exa…

SpringBoot Mybatis 多数据源 MySQL+Oracle

一、背景 在SpringBoot Mybatis 项目中&#xff0c;需要连接 多个数据源&#xff0c;连接多个数据库&#xff0c;需要连接一个MySQL数据库和一个Oracle数据库 二、依赖 pom.xml <dependencies><dependency><groupId>org.springframework.boot</groupId&…

Windows:解决MySQL登录ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using passwor=YES)问题

我在下载的MySQL是8.0.32版本&#xff0c;刚下的时候没什么问题第二天启动MySQL服务就出现了 ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES) 或 ERROR 1045 (28000): Access denied for user rootlocalhost (using password: NO) 这样的问题…

十六、pikachu之SSRF

文章目录 1、SSRF概述2、SSRF&#xff08;URL&#xff09;3、SSRF&#xff08;file_get_content&#xff09; 1、SSRF概述 SSRF(Server-Side Request Forgery&#xff1a;服务器端请求伪造)&#xff1a;其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能&…

【ES6】Getter和Setter

JavaScript中的getter和setter方法可以用于访问和修改对象的属性。这些方法可以通过使用对象字面量或Object.defineProperty()方法来定义。 以下是使用getter和setter方法的示例&#xff1a; <!DOCTYPE html> <script>const cart {_wheels: 4,get wheels(){retu…

利用torchvision库实现目标检测与语义分割

一、介绍 利用torchvision库实现目标检测与语义分割。 二、代码 1、目标检测 from PIL import Image import matplotlib.pyplot as plt import torchvision.transforms as T import torchvision import numpy as np import cv2 import randomCOCO_INSTANCE_CATEGORY_NAMES …

【计算机组成原理】一文快速入门,很适合JAVA后端看

作者简介&#xff1a; CSDN内容合伙人、CSDN新星计划导师、JAVA领域优质创作者、阿里云专家博主&#xff0c;计算机科班出身、多年IT从业经验、精通计算机核心理论、Java SE、Java EE、数据库、中间件、分布式技术&#xff0c;参加过国产中间件的核心研发&#xff0c;对后端有…

怎么把pdf图片转换成jpg?pdf转jpg的方法分享

pdf文件在我们的日常工作中非常的常见&#xff0c;因为这种文件安全性高&#xff0c;不会轻易的乱码&#xff0c;所以受到了我们的欢迎&#xff0c;但是它不容易被编辑&#xff0c;而且占用内存会比较大&#xff0c;所以我们需要将pdf文件进行转换&#xff0c;接下来小编会为大…

【网络】多路转接——poll | epoll

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 书接上文五种IO模型 | select。 poll | epoll &#x1f367;poll&#x1f9c1;认识接口&#x1f9c1;简…

WebAgent-基于大型语言模型的代理程序

大型语言模型&#xff08;LLM&#xff09;可以解决多种自然语言任务&#xff0c;例如算术、常识、逻辑推理、问答、文本生成、交互式决策任务。最近&#xff0c;LLM在自主网络导航方面也取得了巨大成功&#xff0c;代理程序助HTML理解和多步推理的能力&#xff0c;通过控制计算…

【Linux】centos8安装cmake3.27.4

第一步&#xff0c;去官网下安装包&#xff0c;一定不要下错了 下好了之后&#xff0c;用ftp软件传到云服务器或者虚拟机上&#xff0c;我用的是centos8系统&#xff0c;安装之前先准备好这些依赖项 yum install -y gcc gcc-c make automake yum install -y openssl openssl-…

git rebase和merge区别

一、概述 merge和rebase 标题上的两个命令&#xff1a;merge和rebase都是用来合并分支的。 这里不解释rebase命令&#xff0c;以及两个命令的原理&#xff0c;详细解释参考这里。 下面的内容主要说的是两者在实际操作中的区别。 1.1 什么是分支 分支就是便于多人在同一项目…

[USACO07DEC] Sightseeing Cows G(分数规划+负权回路判定)

题面 [USACO07DEC] Sightseeing Cows G - 洛谷 题目大意&#xff1a; 给出一张n点m边的带点权带边权的有向图 求一个回路使得路上点权和除以边权和最大&#xff08;最优比率回路&#xff09; 题解 首先一定仔细读题&#xff0c;是回路不是路径 由于回路上所有点权只能获取…

百万级单细胞多组学数据集成

写在前面 这是一篇粉丝来稿&#xff0c;文章题目为“Multi-omics integration in the age of million single-cell data”&#xff0c;于2021年发表于《Nature Reviews Nephrology》上&#xff0c;影响因子为42.439。由于单细胞目前快速的买入了百万级、多组学的时代&#xff…

upload-labs文件上传漏洞靶场练习

任意文件上传靶场upload-labs下载地址 文章目录 Pass-01- 前端JS校验绕过Pass-02- 文件类型MIME类型绕过Pass-03- 文件名后缀黑名单绕过Pass-04- .htaccess绕过Pass-05- 文件名后缀大写绕过Pass-06- 文件名后缀加空格绕过Pass-07- 文件名后缀加点绕过Pass-08-文件名后缀 ::$DAT…