【机器学习】逻辑化讲清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:nxs(i,:)=(x(:,i)');
end
newdt=h*xs';
disp('以主成分的贡献率为权重,构建主成分综合评价模型系数:');
q=((z(1:n)./100)')
w=input('是否需要进行主成分综合评价?(y or n)\n');
if w==ydf=h*x(:,1:n);tf=df*z(1:n)/100;[stf,ind]=sort(tf,'descend'); %按照降序排列disp('主成分综合评价结果排序:');px=[ind,stf]
elsereturn;
end

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

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

相关文章

Web3 Tools - Base58

Base58编码 Base58编码是一种用于表示数字的非常见的编码方法。它通常用于加密货币领域,例如比特币和其他加密货币的地址表示。 什么是Base58编码? Base58编码是一种将数字转换为人类可读形式的编码方法。与常见的Base64编码不同,Base58编码…

Double 4 VR智能互动教学系统在轨道交通客运服务课堂上的应用

一、模拟真实场景,提高教学效果 Double 4 VR智能互动教学系统能够模拟真实的轨道交通客运场景,让学生身临其境地感受客运服务的全过程。通过虚拟现实技术,学生可以在系统内扮演不同的角色,如列车员、站务员、乘客等,亲…

JCR一区 | Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预测

JCR一区 | Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预测 目录 JCR一区 | Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 基本介绍 Matlab实现1D-2D-GASF-CNN-GRU-MATT的多通道输入数据分类预…

android 蓝牙技术 学习记录 二

android 蓝牙连接 关键类 BluetoothDevice--------------------蓝牙设备 BluetoothGattCallback--------------连接回调 BluetoothGatt----------------------gatt 1. public BluetoothGatt connectGatt(Context context, boolean autoConnect, BluetoothGattCallback call…

Ascent DMS AE电源说明书和设备连接调试教程

Ascent DMS AE电源说明书和设备连接调试教程

世上最全前端开发教程(HTMLCSS)

HTML介绍 HTML,全称为HyperText Markup Language,即超文本标记语言,是一种用来创建网页的标准标记语言。HTML使用一系列的标签(Tags)来定义网页的不同部分和它们的行为,比如段落、链接、图片等。 CSS介绍 …

《这就是ChatGPT》读书笔记

书名:这就是ChatGPT 作者:[美] 斯蒂芬沃尔弗拉姆(Stephen Wolfram) ChatGPT在做什么? ChatGPT可以生成类似于人类书写的文本,它基本任务是弄清楚如何针对它得到的任何文本产生“合理的延续”。当ChatGPT写…

如何对Java对象数组多个属性值进行汇总

1、问题 最近在做报表统计相关的任务,中间涉及到很多的地方,需要同时使用SQL进行数据汇总或者在内存进行数据汇总,在内存汇总的时候,遇到一个场景,就是对Java对象数组多个属性值进行汇总。 最后认为方法三使用反射进…

数据库基础语法二

一、数据库 1、登陆数据库 2、创建数据库zoo 3、修改数据库zoo字符集为gbk 4、选择当前数据库为zoo 5、查看创建数据库zoo信息 6、删除数据库zoo mysql -uroot -p #登陆数据库 create database zoo; #创建数据库zoo alter database zoo character set gbk collate gbk_…

Android 12.0 TvSettings系统设置wifi连接密码框点击Enter键失去焦点

1.前言 在12.0的系统box产品开发中,在TvSettings中,在wifi连接的时候,在用遥控器输入wifi密码框的时候,会发现在按遥控器Enter键的时候, 发现EditText焦点失去了,导致输入法消失了,为了解决这个问题就需要拦截Enter键保证正常输入wifi密码,接下来就来实现这个功能 如图…

实用的Chrome命令 帮你打开Chrome浏览器的隐藏功能

前言 Chrome作为主力浏览器,支持相当丰富的第三方扩展,其实浏览器本身也内置了大量实用的命令。许多实用的功能并没有直接显示在Chrome的菜单上。在这篇文章中,我们将介绍几个实用的chrome:// commands。 通过下面整理的 Chrome 命令&#x…

uboot Ethernet初始化

目录 initr_net eth_initialize eth_common_init phy_init genphy_init uclass_first_device_check eth_write_hwaddr initr_net

Liunx-Tcp Wrapper-访问控制工具

目录 主要功能 工作原理 配置示例 允许所有来自特定 IP 范围的访问 拒绝所有其他访问 允许特定服务来自特定域名的访问 拒绝特定 IP 地址的访问 注意事项 应用范围 查看某一个程序是否支持 TCP wrapper Telnet 用途 1. 远程登录 2. 网络诊断 3. 测试网络服务 安…

LVS(Linux Virtual Server)知识点详解

引言 LVS(Linux Virtual Server)是一种虚拟服务器技术,它主要用于实现多台服务器的负载均衡。 LVS的核心作用是通过负载均衡技术将客户端的请求分发到不同的服务器上进行处理,以此来提高整体的服务能力和资源的利用效率。在构建高…

什么是Unreal Engine游戏引擎?它有什么优势?

大家好,我是咕噜土豆,很高兴又和大家见面了。在游戏开发行业中,选择合适的游戏引擎是非常重要的。其中,Unreal Engine作为一款功能强大的游戏引擎,在业界非常受欢迎。今天我带大家简单的了解一下。 什么是Unreal Engi…

基于STM32移植lvgl(V8.2)(SPI接口的LCD)

目录 概述 1 认识LVGL 1.1 LVGL官网 1.2 LVGL库文件下载 2 认识SPI接口型LCD 2.1 PIN引脚定义 2.2 MCU IO与LCD PIN对应关系 3 实现LCD驱动 3.1 使用STM32Cube配置Project 3.2 STM32Cube生成工程 4 移植LVGL 4.1 准备移植文件 4.2 添加lvgl库文件到项目 4.2.1 src下…

【Pytorch】6.torch.nn.functional.conv2d的使用

阅读之前应该先了解基础的CNN网络的逻辑 conv2d的作用 是PyTorch中用于执行二维卷积操作的函数。它的作用是对输入数据进行二维卷积操作,通常用于图像处理和深度学习中的卷积神经网络(CNN)模型。 conv2d的使用 我们先查看一下官方文档 inpu…

云视频,也称为视频云服务,是一种基于云计算技术理念的视频流媒体服务

云视频,也称为视频云服务,是一种基于云计算技术理念的视频流媒体服务。它基于云计算商业模式,为视频网络平台服务提供强大的支持。在云平台上,所有的视频供应商、代理商、策划服务商、制作商、行业协会、管理机构、行业媒体和法律…

[Linux深度学习笔记5.10]

5.10学习笔记 计划任务: 一. 一次性计划任务安装yum -y install at启动systemctl start atd开机自启systemctl enable atd查看atq删除atrm创建at now 1minat>useraddctrl d二.周期性计划任务创建计划任务 : crontabe -e查看计划任务 : crontabe -l删除计划任务 : crontab…

深度学习之前馈神经网络

1.导入常用工具包 #在终端中输入以下命令就可以安装工具包 pip install numpy pip install pandas Pip install matplotlib注: numpy是科学计算基础包 pandas能方便处理结构化数据和函数 matplotlib主要用于绘制图表。 #导包的代码: import numpy as n…