【机器学习】逻辑化讲清PCA主成分分析

碎碎念:小编去年数学建模比赛的时候真的理解不了主成分分析中的“主成分”的概念!!但是,时隔两年,在机器学习领域我又行了,终于搞明白了!且看正文!再分享一个今天听到的播客中非常触动我的一句话吧:“人生也许没有诗和远方,你脚下的苟且就是你没有发现的诗和远方。”来自钱婧老师的新书《我有自己的宇宙》

第一次更新:2024/5/10

目录

一. 引入

1. 为什么要降维

2. 如何降维

二. PCA(Principal Component Analysis)主成分分析

1. 主要思想

1.1 相关性理解

1.2 特征空间重构

1.3 主成分

2. 数学建模

2.1 最大投影方差

2.2 最小重构代价

3. 算法原理

4. matlab代码


一. 引入

1. 为什么要降维

数据的维度增高在机器学习中会带来“维度灾难”:高维度数据(如大型矩阵或稠密向量)可能会占用大量存储空间,并且计算复杂性和时间可能会随着维度的增加而急剧增加。这可能导致计算资源和存储空间的瓶颈,从而影响算法性能和系统效率。同时,高维数据也会带来数据稀疏,怎么理解这个稀疏呢?

假设我们有一个全世界总人口的数据集,如果我们按照性别这个特征关注数据,会发现此时数据是稠密并且相对均匀分布的;如果我们加入年龄、学历又会发现,此时的数据相对原来有一点点稀疏;如果再加入性格、身高、外貌等多个维度的特征时会发现满足这些特征的数据只有你一个,这个维度下的数据当然是稀疏的。

所以为了提高我们处理数据的模型的性能,降低计算的复杂度我们就会用到“降维”这个手段了。

2. 如何降维

我们常见的降维手段主要包括三类:特征降维、线性降维、非线性降维

  • 特征降维主要思想就是人为或者机器来筛选我们需要的特征,将不需要的特征变量删除;
  • 线性降维是最常用的降维手段,主要包括PCA主成分降维和多维缩放降维;
  • 非线性降维主要思想是主要思想是利用非线性映射将原始数据从原始空间映射到一个低维空间,主要包括IsoMAP、LLE算法等。

二. PCA(Principal Component Analysis)主成分分析

1. 主要思想

先来搜一下常见定义:

主成分分析(PCA:Principal Component Analysis旨在通过正交变换将可能存在相关性的变量转换为一组线性不相关的变量,即主成分。PCA的核心是数据降维思想,通过降维手段实现多指标向综合指标的转化,使得转化后的综合指标(主成分)之间互不相关,并且尽可能地保留原始数据集的信息。

但看这一段是不是很懵?我也很懵,咱别看它,开始我们的正文。

我们知道一个数据集的如果特征较多的话就可能导致某些特征之间是存在相关性的,降维的一个切入点就可以是尽量让可以代表一类特征的一个变量来代替很多变量,进一步可以设想达到我们降维后的变量之间的相关性非常小,这样就说明我们降维后的变量是“有代表性的”。在数学中如何刻画这种相关性呢?我们分为几何角度代数角度

1.1 相关性理解

几何角度

我们先来看一个二维特征空间:

我们发现在x轴上数据呈现出明显的“拥挤”现象,即特征变量的相关性较高在几何上通常表现为线条的聚集或重叠。这意味着多个特征变量在图形上表现出较为接近的分布,它们的线条有时会交叉或重叠。这表明这些变量之间存在较高的相关关系,即一个变量的变化往往伴随着另一个变量的相应变化。

代数角度

数据在某一方向上的“拥挤”在数学上可以理解为在这个方向上数据的波动性较小(总体方差较小)。当特征变量之间高度相关时,在数据集中不同的特征变量波动方向和大小通常相近,因此总体方差相对较小。

同时高度相关的特征变量之间可能存在多重共线性问题,即它们之间存在相互依赖的关系。这可能导致方差解释性的降低,因为多重共线性的存在可能会混淆变量之间的因果关系。

1.2 特征空间重构

我们在原有的方向上特征重合度较高,主成分分析给予我们一个思路:换个角度看

如果旋转一下坐标系,使得在新坐标系下不同特征“分得很开”,会更有利于我们理解数据:

当我们在新的坐标系u_1u_2再观察数据时会发现,从u_1的方向上看数据已经相对不再那么“拥挤”了,此时数据在u_1方向上的离散程度最大,即方差最大

与此同时在u_2轴上的方差较小。u_1u_2所构建的新的特征空间简化了系统结构。

1.3 主成分

在主成分分析中,主成分指的是数据方差最大的方向,即数据在某一方向上的变化

在我们的二维例子中,u_1方向的方差最大,也就是第一主成分;其次,u_2为第二主成分。

在高维坐标系下我们做的工作也只是构建一个特征空间,按照每个坐标轴(也就是该特征空间下的基)方向的方差大小排序,就可以得到第一、第二、第三...主成分了。

通过将原始数据投影到主成分的坐标系中,我们可以减少数据的维度,同时保留原始数据中的大部分信息。主成分分析的目标是找到数据的主成分,这些主成分能够最大限度地保留原始数据的方差,同时尽可能减少彼此之间的相关性。

在主成分分析中,第一个主成分通常包含原始数据集中的大部分信息,因为它对应于数据的主要变化方向。后续的主成分通常包含的数据信息逐渐减少,因为它们更多地反映原始数据中的冗余或重复信息。

2. 数学建模

主成分分析的核心数学原理借鉴b站博主的又红又专的总结:一个中心,两个基本点

  • 一个中心:对原始特征空间的重构,将相关特征转化为无关特征
  • 两个基本点:(1)最大投影方差 (2)最小重构代价

机器学习-白板推导系列(五)-降维(Dimensionality Reduction)_哔哩哔哩_bilibili

在主要思想板块我们详细讲了特征空间的重构,这里就不过多赘述了,下面我们来手推两个基本点

2.1 最大投影方差

前提:

数据中心化:  x_i'=x_i-\bar{x}

向量长度:  ||u_1||=1u_1^Tu_1=1

数学模型

\hat{u_1}=argmax(u_1^TSu_1)

s.t. u_1^Tu_1=1

结论:

Su_1=\lambda u_1

主成分方向就是特征值λ的最大特征向量方向

2.2 最小重构代价

数学模型

\hat{u_k}=argmin(\sum_{k=q+1}^{p}u_k^TSu_k)

s.t. u_k^Tu_k=1

结论:

Su_k=\lambda u_k

前q个主成分最大的方向就是协方差阵的前q个特征向量

3. 算法原理

基本的算法思路如下:

  1. 数据标准化:在PCA之前,所有数据都应该标准化(归一化)。这是由于PCA通过线性变换对特征进行降维,所以任何具有非零均值的特征都可能被误导。
  2. 计算协方差矩阵:PCA基于协方差矩阵对数据进行降维。在这个过程中,我们假设所有变量之间都存在某种相关性。
  3. 计算协方差矩阵的特征向量和特征值:协方差矩阵的特征向量表示了数据的主要变化方向,而特征值的平方根表示了每个方向上的方差贡献。
  4. 选择主成分:选择前k个主成分,其中k是我们要降到的维度数。通常会选择那些特征值占总特征值之和的95%以上的主成分。
  5. 应用主成分:对于原始数据中的每个样本,我们可以通过将其投影到选定的主成分上,从而将其降维到新的维度数。

4. matlab代码

function [tg xs q px newdt]=pca(h)  
%数据标准化
h=zscore(h); 

%计算相关系数矩阵
r=corrcoef(h); 
disp('计算的相关系数矩阵如下:');
disp(r)

%计算特征向量与特征值
[x,y,z]=pcacov(r);  
s=zeros(size(z));%创建0矩阵
for i=1:length(z)
    s(i)=sum(z(1:i));
end

%主成分贡献率计算
disp('前几个特征根及其贡献率:');
disp([z,s])
tg=[z,s];
f=repmat(sign(sum(x)),size(x,1),1);
x=x.*f;

%主成分选择
n=input('请选择前n个需要计算的主成分:\n');
disp('由此可得选择的主成分系数分别为:');
for i=1:n
    xs(i,:)=(x(:,i)');
end
newdt=h*xs';
disp('以主成分的贡献率为权重,构建主成分综合评价模型系数:');
q=((z(1:n)./100)')
w=input('是否需要进行主成分综合评价?(y or n)\n');
if w==y
    df=h*x(:,1:n);
    tf=df*z(1:n)/100;
    [stf,ind]=sort(tf,'descend'); %按照降序排列
    disp('主成分综合评价结果排序:');
    px=[ind,stf]
else
    return;
end

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

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

相关文章

【网络安全入门】新手如何参加护网行动?一篇带你零基础入门到精通

前言 “没有网络安全就没有国家安全”。 当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。 一、网络安全行业特点 行业发展空间大,岗位非常多 网络安全行业产业以来,随即新增加了几十个…

LaTeX公式学习笔记

\sqrt[3]{100} \frac{2}{3} \sum_{i0}^{n} x^{3} \log_{a}{b} \vec{a} \bar{a} \lim_{x \to \infty} \Delta A B C

自动驾驶系统中的端到端学习

资料下载-《自动驾驶系统中的端到端学习(2020)》https://mp.weixin.qq.com/s/ttNpsn7qyVWvDMZzluU_pA 近年来,卷积神经网络显著提高了视觉感知能力。实现这一成功的两个主要因素是将简单的模块组合成复杂的网络和端到端的优化。然而&#xf…

哪里有高清视频素材软件?哪里有视频素材网站?

在这个视觉内容至关重要的时代,高质量的视频素材不仅能够增强信息传递的效果,还能显著提升观众的观看体验。接下来介绍的这些视频素材网站,将为您的创作提供广泛的选择,从本土到国际,满足您不同的需求和偏好。 1. 蛙学…

ICode国际青少年编程竞赛- Python-2级训练场-识别循环规律2

ICode国际青少年编程竞赛- Python-2级训练场-识别循环规律2 1、 for i in range(3):Dev.step(3)Dev.turnRight()Dev.step(4)Dev.turnLeft()2、 for i in range(3):Spaceship.step(3)Spaceship.turnRight()Spaceship.step(1)3、 Dev.turnLeft() Dev.step(Dev.x - Item[1].…

CrossManager软件安装

目录 一、CrossManager软件 1.1 下载安装程序: 1.2 注册-登录 1.3 运行安装程序 1.4 完成安装: 1.5 激活软件: 文章底部可获取安装包---CrossManager软件安装(有效期30天) 当涉及到专业的软件安装和配置时&…

Java Web 学习笔记(一) —— MySQL(3)

目录 1 Mysql 函数1.1 日期函数1.2 判断函数1.3 字符函数1.4 数学函数 2 Mysql 性能2.1 提高操作数据库性能2.2 执行次数比较多的语句2.3 sql语句的执行效率 3 Mysql 优化(***)3.1 定位慢查询3.2 SQL执行计划3.3 索引3.3.1 索引介绍与分类3.3.2 索引的使…

Python 3 中zip()函数的用法

1 创作灵感 我们在阅读代码的时候,经常会看到zip函数,有的时候还和循环在一起用,今天举几个例子测试一下该函数的用法 2.应用举例 (1)定义了两个列表一个是num,一个是letter (2)使用zip可以把num列表和letter列表中…

大模型微调之 在亚马逊AWS上实战LlaMA案例(七)

大模型微调之 在亚马逊AWS上实战LlaMA案例(七) 微调SageMaker JumpStart上的LLaMA 2模型 这是在us-west-2的测试结果。 展示了如何使用SageMaker Python SDK部署预训练的Llama 2模型,并将其微调到你的数据集,用于领域适应或指令…

numpy1

注意:reshape函数的 - 1(是让电脑 自己计算的意思 import numpy as np n np.arange(0,25).reshape(5,5) m np.array([0,5,10,15,20])nn np.repeat(n,2,axis 1) m m.reshape(-1,1)nn[:,1:8:2] np.tile(m,(1,4)) nn[:,0:-1]

无人机+光电吊舱:四光(可见光+红外热成像+广角+激光测距)吊舱设计技术详解

无人机与光电吊舱的结合,特别是四光吊舱(包含可见光、红外热成像、广角和激光测距技术)的应用,为无人机提供了强大的侦察和测量能力。以下是对四光吊舱设计技术的详解: 1. 可见光技术:可见光相机是吊舱中最…

螺栓扭矩如何设计?——SunTorque智能扭矩系统

螺栓扭矩设计的大小是一个涉及工程实践的重要问题,它直接关系到螺栓连接的紧固质量和安全性。螺栓扭矩是工程领域中常用的一个概念,用来描述螺栓在连接过程中所需的旋转力矩。正确的螺栓扭矩可以确保螺栓和螺母之间的紧密连接,避免由于松动而…

Java入门基础学习笔记10——变量

变量的学习路径: 认识变量->为什么要用变量?->变量有啥特点?->变量有啥应用场景? 什么是变量? 变量是用来记住程序要处理的数据的。 变量的定义格式: 数据类型 变量名称 数据; 数…

C语言/数据结构——(用双链表实现数据的增删查改)

一.前言 嗨嗨嗨,大家好久不见!前面我们已经通过数组实现数据的增删查改、单链表实现数据的增删查改,现在让我们尝试一下使用双链表实现数据的增删查改吧! 二.正文 如同往常一样,对于稍微大点的项目来说,…

2024洗地机选购指南 | 怎么选洗地机不会被坑?

家里的地板总是需要打扫,但工作忙碌的我们往往没有足够的时间来打理。洗地机不仅能够帮助我们节省宝贵的时间,还能让我们的家变得一尘不染。今天,笔者将为大家讲讲挑选洗地机的技巧,告诉大家怎么挑选洗地机不会被坑,顺…

解锁楼宇自动化新维度西门子Insight+BACnet IP I/O控制器

数字城市的楼宇自动化已不再是一个遥不可及的概念,而是成为了现代建筑的标配。特别是在大型商业综合体、高端写字楼和公共设施中,高效的楼宇管理系统是确保环境舒适度与能源效率的关键。当提及楼宇自动化领域的佼佼者,西门子Insight楼宇自动化…

【洛谷】动态规划之最长公共子序列

前言: 本系列目的是记录日常所刷的题,有的是自己想出来的题,有的是看了大佬题解后想明白的题 题目 P1439 【模板】最长公共子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前提: 两个排列都是1到n的排列,说…

如何使用Vite快速构建vue项目

1、在自己定义的目录下打开cmd命令窗口:如文件夹目录上面输入cmd回车就可以打开 2、检查 node环境:通过node --version看版本号表示安装好了 3、 使用Vite 快速构建Vue项目 npm init vitelatest qiuqiu.admin 注意:如何你电脑没有装vite首…

《2024网络安全报告》中文版

Check Point发布了《2024 年网络安全报告》,Check Point Research 对网络攻击数据(包括所有地区和全球的统计数据)进行了全面分析,揭示了不断变化的网络威胁形势。 ● 去年,全球 1/10 的机构遭遇勒索软件攻击尝试&a…

QTday5

目录 网络聊天室服务器 网络聊天室客户端 学生管理系统 网络聊天室服务器 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个tcp服务器sernew QTcpSe…
最新文章