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

news2024/11/20 11:26:51

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

第一次更新: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.coloradmin.cn/o/1661664.html

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

相关文章

ICode国际青少年编程竞赛- Python-4级训练场-绿色能量1

ICode国际青少年编程竞赛- Python-4级训练场-绿色能量1 1、 Dev.step(3) Dev.turnLeft() Dev.step(3) Spaceship.step(4) Spaceship.turnRight() Spaceship.step(4) Dev.step(3) while Item[1].y ! Dev.y:wait()2、 Dev.step(4) while Item[0].x ! Dev.x:wait() Dev.turnLe…

luceda ipkiss教程 69:导出器件或者线路的三维模型

ipkiss 3.12版加入write_obj函数,可以直接输出器件的三维模型。 如,输出自定义的mmi的三维模型: 代码如下: from si_fab import all as pdk from ipkiss3 import all as i3class MMI1x2(i3.PCell):"""MMI with …

北京车展现场体验商汤DriveAGI自动驾驶大模型展现认知驱动新境界

在2024年北京国际汽车展的舞台上,众多国产车型纷纷亮相,各自展示着独特的魅力。其中,小米SUV7以其精美的外观设计和宽敞的车内空间,吸引了无数目光,成为本届车展上当之无愧的明星。然而,车辆的魅力并不仅限…

学习3D几何和特征一致的高斯溅射目标去除

earning 3D Geometry and Feature Consistent Gaussian Splatting for Object Removal 学习3D几何和特征一致的高斯溅射目标去除 Yuxin Wang 王玉欣 HKUST &Qianyi Wu Monash University &Guofeng Zhang Zhejiang University &Dan Xu HKUST 香港科技大学&吴倩…

java期末复习

java jdk jre jvm .java-------->.class----jvm---->机器语言 编写源文件 编译源文件生成字节码 加载运行字节码 java语句执行顺序 顺序 选择 循环 异常处理 基本语法 方法格式 权限修饰符 返回值声明 方法名称(参数列表){方法中封装的逻辑功能;return 返回值;}–权…

三级综合医院微信预约挂号系统源码,PC后台管理端+微信公众号+支付宝小程序全套源码

智慧医院预约挂号系统,微信医疗预约挂号小程序源码,实体医院预约挂号支付系统源码 本系统主要面向中大型的医疗机构,适用于各级公立和民营医院,可对接院内his、lis、pacs系统。 PC后台管理端微信公众号支付宝小程序 系统支持当日…

mac安装禅道

前提已安装:phpapacheMySQL mac安装 php7.1/apache-CSDN博客 安装MySQL 一、禅道下载 安装官方文档 源码包下载地址:禅道下载 - 禅道开源项目管理软件 。 1. 解压禅道源码包 2. 将解压后的文件复制到Apache访问目录下 (默认路径为 /Libra…

0510_IO5

练习题&#xff1a; #include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>#include <pthread.h>#include <semaphore.h>#incl…

LED出海混战,雷曼光电“冲锋陷阵”的数智化暗线

2022年春天&#xff0c;在北京冬奥会开幕式上&#xff0c;晶莹剔透的“冰雪五环”从巨型冰块中徐徐升起&#xff0c;成为国人经典集体回忆。这个面积达134平方米、重约3吨的冰雪五环&#xff0c;是LED技术与光影艺术的完美融合。深圳LED上市公司雷曼光电参与“冰雪五环”异形屏…

车载电子电器架构 —— 应用软件开发(中)

车载电子电器架构 —— 应用软件开发(中) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

GPT+Python近红外光谱数据分析

原文链接&#xff1a;GPTPython近红外光谱数据分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247603913&idx1&sn6eb8fd6f1abcdd8160815997a13eb03d&chksmfa82172ecdf59e389a860547a238bb86c7f38ae3baa14e97c7490a52ef2a2c206f88d503a5eb&token…

推荐几款国内的AI写作工具,好用免费还能在线生成AI文案

AI写作简介&#xff1a; 在专业领域中&#xff0c;人工智能技术的进步正以前所未有的速度推动着写作行业的革新。当前&#xff0c;我们见证了生成式人工智能&#xff08;AI&#xff09;在文本产生领域的广泛应用&#xff0c;其对提升创作效率和拓展创意边界的贡献是显著的。以…

Vue3知识总结-1

前面学习一段时间的前端&#xff0c;但是没有进行过太多的练习&#xff0c;并且对于里面一些重要的知识点也没有去着重的记忆&#xff0c;所以打算在学习Vue3的时候&#xff0c;做一些笔记&#xff0c;方便后面翻看。这个笔记会对于学习一些做一些&#xff0c;而不是一个整体的…

java中的oop(一)、概念

一、三大主线 &#xff08;非官方&#xff09; 成员&#xff1a;属性、方法、构造器、&#xff08;代码块&#xff0c;内部类&#xff09;&#xff1b; 特征&#xff1a;封装、继承、多态、&#xff08;抽象&#xff09;——三大特征&#xff1b; 关键字&#xff1a; this、…

免费软件不一定不好用,分享5个实用小工具

​ 今天继续分享5个超实用的小工具&#xff0c;都是非常小巧精致的免费软件。 1.广告拦截与隐私保护——AdGuard ​ AdGuard是一款跨平台广告拦截和隐私保护软件&#xff0c;支持Windows、MacOS、Android和iOS系统。它能有效屏蔽不必要的广告、弹窗和跟踪&#xff0c;同时抵御…

(Mac)RocketMQ的本地安装测试(详细图示)

目录 部署服务 namesrv / broker下载解压缩运行 namesrvnohup ./bin/mqnamesrv & 启动命令详解运行 broker 测试收发消息运行自带的生产者测试类运行自带的消费者测试类 部署 Dashboard 可视化下载打包运行访问 部署服务 namesrv / broker 下载解压缩 官网下载 https://r…

会话劫持攻击就在我们身边,我们要如何防范

会话劫持攻击&#xff08;Session Hijacking&#xff09;是一种网络攻击方式&#xff0c;攻击者通过某种手段获取到用户的会话标识&#xff08;Session ID&#xff09;&#xff0c;然后使用这个会话标识冒充合法用户进行恶意操作。这种攻击方式允许攻击者以合法用户的身份访问受…

【go项目01_学习记录10】

操作数据库 1 插入数据2 显示文章2.1 修改 articlesShowHandler() 函数2.2 代码解析 3 编辑文章3.1 添加路由3.2 编辑articlesEditHandler()3.3 新建 edit 模板3.4 代码重构3.5 完善articlesUpdateHandler()3.6 测试更新3.7 封装表单验证 1 插入数据 . . . func articlesStore…

测径仪供风设备的操作和维护

关键字:测径仪供风系统,测径仪供风设备,测径仪冷却设备维护,测径仪冷却设备故障, 测径仪的供风设备包括高压鼓风机和空气过滤装置两部分。 鼓风机要求有独立的供电系统和电源开关&#xff0c;安装时应调整好风机叶轮的旋向&#xff0c;保证接通电源后鼓风机正常工作。另外&am…

Nginx rewrite项目练习

Nginx rewrite练习 1、访问ip/xcz&#xff0c;返回400状态码&#xff0c;要求用rewrite匹配/xcz a、访问/xcz返回400 b、访问/hello时正常访问xcz.html页面server {listen 192.168.99.137:80;server_name 192.168.99.137;charset utf-8;root /var/www/html;location / {root …