机器学习:主成分分析笔记

主成分分析(Principal Component Analysis,PCA)是一种无监督的机器学习算法,通常用于高维数据的降维、提取主要特征、数据降噪和可视化。PCA的基本思想是将原始数据的多个变量转换为少数几个相互独立的变量(即主成分),这些主成分能够尽可能多地保留原始数据的信息。


目录

基本概念

1.主成分(Principal Component)

2.方差(Variance)

3.协方差

4.协方差矩阵

5.特征值和特征向量

工作步骤

1.准备数据矩阵

2.标准化数据

3.计算协方差矩阵

4.计算特征值和特征向量

5.构建主成分得分

6.解释主成分

应用

1.准备数据

2.PCA降维

3.数据可视化


基本概念

          

1.主成分(Principal Component)

通过原始数据集变量的线性组合构成的新变量。第一个主成分捕获了数据中最多的信息(即最大的方差),第二个主成分捕获了剩余方差中最大的部分,且与第一个主成分正交(即无相关性),以此类推。

2.方差(Variance)

衡量数据分布的离散程度。在PCA中,方差越大,表示该成分包含的信息量越多。计算公式为:S^{2} = \frac{1}{n-1}\sum_{i=1}^{n} (x_{i} - \bar{x})^{2}  。

3.协方差

衡量两个随机变量联合变化趋势的统计量。若两变量的增减趋势相同(即一个变量增加,另一个变量也增加,呈正相关),则协方差 > 0;若一个变量增加而另一个变量减少,则协方差 < 0。计算公式为:

Cov(x, y) = \frac{1}{n-1}\sum_{i=1}^{n} (x_{i} - \bar{x}) (y_{i} - \bar{y})  。

4.协方差矩阵

表示各变量间协方差的矩阵,不仅包含变量自身的方差,还包含变量间的协方差。表示为:

C_{p\times p} = \begin{pmatrix} S^{2}(x_{1}) & Cov(x_{1}, x_{2}) & ... & Cov(x_{1}, x_{p}) \\ & & & \\ Cov(x_{2}, x_{1}) & S^{2}(x_{2}) & ... & Cov(x_{2}, x_{p}) \\ & & & \\ . & . & ... & . \\ . & . & ... & . \\ . & . & ... & . \\ & & & \\ Cov(x_{p}, x_{1}) & Cov(x_{p}, x_{2}) & ... & S^{2}(x_{p}) \end{pmatrix}   ,其中 p表示变量数。

若已知 n×p的数据矩阵A,其中 n表示观测数。则经过标准化处理,协方差矩阵可以这样计算:C = \frac{1}{n-1}A^{T}A  。

5.特征值和特征向量

即协方差矩阵的特征值和特征向量,揭示了数据的内在结构。特征向量表示方向,即主成分的方向,是单位向量;特征值表示方差的大小,反映原始数据点映射到主成分方向上与中心的距离。满足:C \vec{v} = \lambda \vec{v}  。



工作步骤

1.准备数据矩阵

将原始数据整理成一个矩阵,每一行代表一个观测(或样本),每一列代表一个变量。对于有 n个样本和 p个变量的数据集,将得到一个 n×p的矩阵。

2.标准化数据

当变量的量纲量级差异较大时,会高估或低估其表达的信息量,从而影响分析,因此在应用PCA之前通常需要对数据进行标准化(又称中心化)。常用 z-score标准化,即使每个变量满足均值为0,标准差为1。计算公式为:z = \frac{x_{i}-\bar{x}}{s}  。

3.计算协方差矩阵

计算经标准化后数据矩阵的协方差矩阵。协方差矩阵反映了数据中变量之间的线性关系。

4.计算特征值和特征向量

计算协方差矩阵的特征值和对应的特征向量。特征值有多个解,因为协方差矩阵是一个方阵,所以其特征值 ≤ p。按特征值的大小,将对应的特征向量从大到小排序,特征值越大,对应的主成分就越重要(即在该方向上数据的变异性越大)。最后,根据需要保留的信息量(如保留总方差的90%),选择前 k个最大的特征值对应的特征向量作为主成分。

5.构建主成分得分

利用选定的主成分对应的特征向量,将原始数据转换为一组新的低维数据。转换方法为:将数据矩阵与特征向量矩阵相乘得到低维空间的数据矩阵。计算公式为:

A_{低维} = A_{高维}V,其中 V = \begin{pmatrix} v_{1} & v_{2} & ... & v_{k} \end{pmatrix}

k亦可以解释为原始数据在最重要的 k个方向上的投影。

6.解释主成分

根据特征向量的元素(即载荷),可以用原始变量来表达主成分,并反映原始变量的贡献程度。载荷反映了原始变量在新的主成分方向上的权重,表示为:

v_{k} = \begin{pmatrix} a_{k1}\\ a_{k2}\\ .\\ .\\ .\\ a_{kp}\\ \end{pmatrix}   ,其中 k表示为主成分的个数,p表示为原始变量的个数,a_{k1},a_{k2},...,a_{kp} 表示为第 k个主成分的载荷,v_{k} 表示为第 k个主成分的特征向量。故主成分可以表示为:

Z_{1} = a_{11}X_{1} + a_{12}X_{2} + ... + a_{1p}X_{p}

Z_{2} = a_{21}X_{1} + a_{22}X_{2} + ... + a_{2p}X_{p}

...

Z_{k} = a_{k1}X_{1} + a_{k2}X_{2} + ... + a_{kp}X_{p}

其中 Z_{k} 表示为第 k个主成分,X_{p} 表示为第 p个原始变量。

通过分析每个主成分的载荷,我们可以进一步解释每个主成分的含义:

高载荷变量:对于第 k个主成分,载荷的绝对值较大的变量对该主成分的形成贡献较大,因此这些变量在解释主成分时更为重要;

载荷的符号:载荷的符号(正或负)有助于理解变量之间的关系。同一主成分中,载荷符号相同的变量表现为正相关,符号不同的变量表现为负相关。



应用

通过 Python sklearn库实现 PCA:

1.准备数据

随机生成一组6维的数据集。

import numpy as np

np.random.seed(42)  # 确保数据可重复
mean = np.zeros(6)  # 随机生成6维数据的均值向量
cov = np.diag(np.arange(1, 7))  # 创建一个6x6的协方差矩阵,方差从1到6
X = np.random.multivariate_normal(mean, cov, 200)  # 随机生成200个数据点
X

2.PCA降维

将数据降维到2维。

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 应用PCA
pca = PCA(n_components=2)  # 降至2维
X_pca = pca.fit_transform(X_scaled)

3.数据可视化

import matplotlib.pyplot as plt

plt.figure(figsize=(8, 8))
plt.scatter(X_pca[:, 0], X_pca[:, 1], s=40, alpha=1, edgecolors='black', linewidths=0.5)
plt.title('PCA Result', fontsize=20)
plt.xlabel('Principal Component 1', fontsize=15)
plt.ylabel('Principal Component 2', fontsize=15)
plt.grid(True)

# 保存为PDF格式
plt.savefig('PCA_Result_scatter.pdf', format='pdf')

plt.show()

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

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

相关文章

上海亚商投顾:深成指震荡涨超1% 两市成交连续破万亿

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指3月1日震荡反弹&#xff0c;深成指、创业板指午后涨超1%。充电桩概念股集体走强&#xff0c;英可瑞、欧陆…

Stable Video文本生成视频公测地址——Scaling Latent Video Diffusion Models to Large Datasets

近期&#xff0c;Stability AI发布了首个开放视频模型——"Stable Video"&#xff0c;该创新工具能够将文本和图像输入转化为生动的场景&#xff0c;将概念转换成动态影像&#xff0c;生成出电影级别的作品&#xff0c;旨在满足广泛的视频应用需求&#xff0c;包括媒…

leetcode10正则表达式匹配

leetcode10正则表达式匹配 思路python 思路 难点1 如何理解特殊字符 ’ * ’ 的作用&#xff1f; 如何正确的利用特殊字符 ’ . ’ 和 ’ * ’ &#xff1f; * 匹配零个或多个前面的那一个元素 "a*" 可表示的字符为不同数目的 a&#xff0c;包括&#xff1a; "…

二维码门楼牌管理系统技术服务:制作详解

文章目录 前言一、二维码门楼牌制作技术要求二、二维码门楼牌管理系统的优势与应用 前言 随着信息化时代的到来&#xff0c;二维码技术已广泛应用于各个领域。在城市管理中&#xff0c;二维码门楼牌管理系统的应用为城市管理带来了极大的便利。本文将详细探讨二维码门楼牌管理…

绝地求生:【2024PGC之路——PUBG电竞积分分布】

亲爱的PUBG电竞爱好者&#xff0c; 你们好&#xff01; 2024年PUBG电竞即将开始&#xff0c;让我们一起深入了解下今年令人激动的PGS 和 PGC赛事积分分配情况。 PUBG GLOBAL SERIES&#xff08;PGS全球系列赛&#xff09;: 积分分布 根据我们之前概述的《PUBG 2024电竞计划》…

camunda7数据库schame和表结构介绍

本文基于Camunda7.19.0版本&#xff0c;介绍Camunda开源工作流引擎的数据库架构和ER模型&#xff0c;Camunda7.19.0共49张表&#xff0c;包括了BPMN流程引擎、DMN规则引擎、CMMN引擎、历史数据、用户身份等方面的表结构定义&#xff0c;以及表与表之间的关联关系。 1、camunda…

SQL优化——插入数据、主键优化、order by 优化、group by 优化、limit 优化、count优化、update优化、

目录 1、SQL优化1——插入数据&#xff08;Insert&#xff09; 1.1、普通插入&#xff1a; 1.1.1、采用批量插入&#xff08;一次插入的数据不建议超过1000条&#xff09; 1.1.2、手动提交事务 1.1.3、主键顺序插入 1.2、大批量插入 1.2.1、在客户端连接服务器的时候&am…

Python——桌面摄像头软件(附源码+打包)

目录 一、前言 二、桌面摄像头软件 2.1、下载项目 2.2、功能介绍 三、打包工具&#xff08;nuitka&#xff09; 四、项目文件复制&#xff08;我全部合到一个文件里面了&#xff09; 五、结语 一、前言 看见b站的向军大叔用electron制作了一个桌面摄像头软件 但是&#x…

【离散化】【 树状树状 】100246 将元素分配到两个数组中

本文涉及知识点 离散化 树状树状 LeetCode 100246 将元素分配到两个数组中 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount &#xff0c;使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。 你需要使用 n 次操作&#x…

Network LSA 结构简述

Network LSA主要用于描述一个区域内的网络拓扑结构&#xff0c;包括网络中的路由器和连接到这些路由器的网络。它记录了每个路由器的邻居关系、连接状态以及连接的度量值&#xff08;如带宽、延迟等&#xff09;&#xff0c;以便计算最短路径和构建路由表。display ospf lsdb n…

CentOS下安装Kafka3

kafka是分布式消息队列&#xff0c;本文讲述其在centos&#xff08;centos 7.5&#xff09;下的安装。安装过程可以参考其官方文档https://kafka.apache.org/36/documentation.html 首先在官网 https://kafka.apache.org/downloads 下载Kafka二进制文件&#xff08;官网的压缩包…

WordPress免费的远程图片本地化下载插件nicen-localize-image

nicen-localize-image&#xff08;可在wordpress插件市场搜索下载&#xff09;&#xff0c;是一款用于本地化文章外部图片的插件&#xff0c;支持如下功能&#xff1a; 文章发布前通过编辑器插件本地化 文章手动发布时自动本地化 文章定时发布时自动本地化 针对已发布的文章…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于条件风险价值的虚拟电厂参与能量及备用市场的双层随机优化》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 这篇文章的标题涉及到以下几个关键点…

数字革命的浪潮:Web3如何改变一切

随着数字技术的不断发展&#xff0c;人类社会正迎来一场前所未有的数字革命浪潮。在这个浪潮中&#xff0c;Web3技术以其去中心化、安全、透明的特性&#xff0c;正在逐渐改变着我们的生活方式、商业模式以及社会结构。本文将深入探讨Web3技术如何改变一切&#xff0c;以及其所…

【学习心得】请求参数加密的原理与逆向思路

一、什么是请求参数加密&#xff1f; 请求参数加密是JS逆向反爬手段中的一种。它是指客户端&#xff08;浏览器&#xff09;执行JS代码&#xff0c;生成相应的加密参数。并带着加密后的参数请求服务器&#xff0c;得到正常的数据。 常见的被加密的请求参数sign 它的原理和过程图…

【C语言】【洛谷】P1125笨小猴

一、个人解答 #include<stdio.h> #include<string.h>int prime(int num);int main() {char max a, min z;int maxn0, minn1000;char str[100];int num[26] { 0 };fgets(str, sizeof(str), stdin);str[strcspn(str, "\n")] \0;for (int i 0; str[i]…

ABAP - SALV 教程15 用户点击按钮交互功能

SALV增加了按钮&#xff0c;那么该怎么实现点击了按钮实现交互功能呢&#xff1f;可以通过注册事件并且在对应的method中写入相关逻辑&#xff0c;来实现点击按钮后的逻辑。通过自定义状态栏的方式添加按钮&#xff1a;http://t.csdnimg.cn/lMF16通过使用派生类的方式添加按钮&…

【MetaGPT】配置教程

MetaGPT配置教程&#xff08;使用智谱AI的GLM-4&#xff09; 文章目录 MetaGPT配置教程&#xff08;使用智谱AI的GLM-4&#xff09;零、为什么要学MetaGPT一、配置环境二、克隆代码仓库三、设置智谱AI配置四、 示例demo&#xff08;狼羊对决&#xff09;五、参考链接 零、为什么…

java学习(常用类)

一、包装类&#xff08;针对八种基本数据类型相应的引用类型--包装类. 1)包装类和基本数据类型的相互转换 装箱&#xff1a;基本类型->包装类型 拆箱&#xff1a;包装类型->基本类型 //以下是int类型和char类型演示。 public class temp1 {public static void main(St…

【Web - 框架 - Vue】随笔 - 通过CDN的方式使用VUE 2.0和Element UI

通过CDN的方式使用VUE 2.0和Element UI - 快速上手 VUE 网址 https://cdn.bootcdn.net/ajax/libs/vue/2.7.16/vue.js源码 https://download.csdn.net/download/HIGK_365/88815507测试 代码 <!DOCTYPE html> <html lang"en"> <head><meta …
最新文章