​大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣]

1. 概念:数据降维的数学方法

定义

  • 主成分分析(PCA)是一种统计方法,通过正交变换将一组可能相关的变量转换为一组线性不相关的变量,这组新的变量称为主成分。
  • 大白话,PCA能够从数据中提取出最重要的特征,通过减少变量的数量来简化模型,同时保留原始数据集中的大部分信息。

特点

  • PCA是最广泛使用的数据降维技术之一,能够有效地揭示数据的内部结构,减少分析问题的复杂度。

应用领域

  • 图像处理:图像压缩和特征提取。
  • 金融数据分析:风险管理、股票市场分析。
  • 生物信息学:基因数据分析、疾病预测。
  • 社会科学研究:问卷数据分析、人口研究。

2 核心原理:方差最大化

  • 方差最大化:
  • PCA通过找到数据方差最大的方向来确定主成分,然后找到次大方向,且这些方向必须是相互正交的。
  • 这样做的目的是保证降维后的数据能够保留最多的原始数据信息。

  • 计算步骤:
  1. 数据标准化:使得每个特征的平均值为0,方差为1。
  2. 计算协方差矩阵:反映变量之间的相关性。
  3. 计算协方差矩阵的特征值和特征向量:特征向量决定了PCA的方向,特征值决定了方向的重要性。
  4. 选择主成分:根据特征值的大小,选择最重要的几个特征向量,构成新的特征空间。

3 优缺点分析

  • 优点:
  • 降维效果显著:能够有效地减少数据的维度,同时尽可能地保留原始数据的信息。
  • 揭示数据结构:有助于发现数据中的模式和结构,便于进一步分析。
  • 无需标签数据:PCA是一种无监督学习算法,不需要数据标签。
  • 缺点:
  • 线性限制:PCA只能捕捉到数据的线性关系和结构,对于非线性结构无能为力。
  • 方差并非信息量的唯一衡量:有时候数据的重要性并不仅仅体现在方差上,PCA可能会忽略掉一些重要信息。
  • 对异常值敏感:异常值可能会对PCA的结果产生较大影响。

4 PCA 实战

介绍一个用于主成分分析的 Python 库

PCA的核心是构建在sklearn功能之上,以便在与其他包结合时实现最大的兼容性。

除了常规的PCA外,它还可以执行SparsePCA和TruncatedSVD。

其他功能包括:

  • 使用Biplot绘制载荷图
  • 确定解释的方差
  • 提取性能最佳的特征
  • 使用载荷绘制的散点图
  • 使用Hotelling T2和/或SPE/Dmodx进行异常值检测
pip install pca

from pca import pca # 导入PCA模块
import numpy as np
import pandas as pd # Dataset
from sklearn.datasets import load_iris # 导入鸢尾花数据集 # 从鸢尾花数据集中创建DataFrame对象
X = pd.DataFrame(data=load_iris().data, columns=load_iris().feature_names, index=load_iris().target) # 初始化PCA模型,指定主成分数量为3,并进行数据标准化
model = pca(n_components=3, normalize=True) # 拟合并转换数据
out = model.fit_transform(X) # 创建只包含方向的图
fig, ax = model.biplot(textlabel=True, legend=False, figsize=(10, 6))

下面我们使用 sklearn 里面的 PCA 工具,在一组人脸数据上直观感受下,


# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_olivetti_faces
from sklearn.decomposition import PCA # 加载Olivetti人脸数据集
faces_data = fetch_olivetti_faces()
X = faces_data.data # 可视化原始图像和对应的主成分
n_images = 4 # 每行显示的图像数量
n_rows = 4 # 总共的行数 fig, axes = plt.subplots(n_rows, 2*n_images, figsize=(16, 10), subplot_kw={'xticks':[], 'yticks':[]}) # 使用PCA降维
n_components = 50 # 设置PCA保留的主成分数量
pca = PCA(n_components=n_components, whiten=True, random_state=42)
X_pca = pca.fit_transform(X) for r in range(n_rows):
for i in range(n_images):
index = r * n_images + i axes[r, 2*i].imshow(X[index].reshape(64, 64), cmap='gray')
axes[r, 2*i].set_title(f'大侠 {index+1} 图像', fontproperties='SimHei') # 手动设置字体 axes[r, 2*i+1].imshow(pca.inverse_transform(X_pca[index]).reshape(64, 64), cmap='bone')
axes[r, 2*i+1].set_title(f'大侠 {index+1} 主成分', fontproperties='SimHei') # 手动设置字体 plt.tight_layout()
plt.show()

我们保留了前 50 个主成分

通过可视化对比图直观感受下,信息保留了多多少,损失了多少

通过对比图可以看到,某一张人脸的基本信息都保留了下来

如果保留 前 100 个主成分,那就更接近原始图片了

你也可以试下,保留 1 个主成分会怎样?通过保留的信息你还认得出来哪过大侠是哪过吗

[ 算法金,碎碎念 ]

  • 最近 【不上班】 这个词频繁出现在朋友圈,貌似很火
  • 不上班,站着把钱赚了,大概率不可能的
  • 不上班,躺着把钱赚了(别想歪了),更是绝大概率不可能的
  • 有些圈子,天然就是靠博眼球来筛选用户,真的很可怕
  • 想到了一句话【当大家都有病时,你就不觉得这是病了】
  • 在这种圈子呆久了,大概率会沦陷的,别以外自己不会,咱都是普通人
  • 大部分人都是普通人,普通人通常都不信概率,而概率恰恰是反映常态 分布的
  • 悲剧,卒~

全网同名,日更万日,让更多人享受智能乐趣

烦请大侠多多 分享、在看、点赞,助力算法金又猛又持久、很黄很 BL 的日更下去;我们一起,让更多人享受智能乐趣

同时邀请大侠 关注、星标 算法金,围观日更万日,助你功力大增、笑傲江湖

算法金 | 再见,PCA 主成分分析!的更多相关文章

  1. 机器学习 - 算法 - PCA 主成分分析

    PCA 主成分分析 原理概述 用途 - 降维中最常用的手段 目标 - 提取最有价值的信息( 基于方差 ) 问题 - 降维后的数据的意义 ? 所需数学基础概念 向量的表示 基变换 协方差矩阵 协方差 优 ...

  2. PCA主成分分析方法

    PCA: Principal Components Analysis,主成分分析. 1.引入 在对任何训练集进行分类和回归处理之前,我们首先都需要提取原始数据的特征,然后将提取出的特征数据输入到相应的 ...

  3. PCA主成分分析+白化

    参考链接:http://deeplearning.stanford.edu/wiki/index.php/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90 h ...

  4. 机器学习之PCA主成分分析

    前言            以下内容是个人学习之后的感悟,转载请注明出处~ 简介 在用统计分析方法研究多变量的课题时,变量个数太多就会增加课题的复杂性.人们自然希望变量个数较少而得到的 信息较多.在很 ...

  5. PCA(主成分分析)方法浅析

    PCA(主成分分析)方法浅析 降维.数据压缩 找到数据中最重要的方向:方差最大的方向,也就是样本间差距最显著的方向 在与第一个正交的超平面上找最合适的第二个方向 PCA算法流程 上图第一步描述不正确, ...

  6. PCA主成分分析(上)

    PCA主成分分析 PCA目的 最大可分性(最大投影方差) 投影 优化目标 关键点 推导 为什么要找最大特征值对应的特征向量呢? 之前看3DMM的论文的看到其用了PCA的方法,一开始以为自己对于PCA已 ...

  7. [机器学习] PCA主成分分析原理分析和Matlab实现方法

    转载于http://blog.csdn.net/guyuealian/article/details/68487833 网上关于PCA(主成分分析)原理和分析的博客很多,本博客并不打算长篇大论推论PC ...

  8. 用PCA(主成分分析法)进行信号滤波

    用PCA(主成分分析法)进行信号滤波 此文章从我之前的C博客上导入,代码什么的可以参考matlab官方帮助文档 现在网上大多是通过PCA对数据进行降维,其实PCA还有一个用处就是可以进行信号滤波.网上 ...

  9. PCA主成分分析Python实现

    作者:拾毅者 出处:http://blog.csdn.net/Dream_angel_Z/article/details/50760130 Github源代码:https://github.com/c ...

  10. PCA 主成分分析

    链接1 链接2(原文地址) PCA的数学原理(转) PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表 ...

随机推荐

  1. 代理网关设计与实现(基于NETTY)

    ​简介:本文重点在代理网关本身的设计与实现,而非代理资源的管理与维护. ​ 作者 | 新然 来源 | 阿里技术公众号 一 问题背景 平台端购置一批裸代理,来做广告异地展现审核.从外部购置的代理,使用方 ...

  2. 庖丁解InnoDB之REDO LOG

    ​简介: 数据库故障恢复机制的前世今生一文中提到,今生磁盘数据库为了在保证数据库的原子性(A, Atomic) 和持久性(D, Durability)的同时,还能以灵活的刷盘策略来充分利用磁盘顺序写的 ...

  3. 万物智联时代的终端智能「管家」 重磅升级:混合云IoT一体机

    ​简介: 「混合云IoT一体机」边缘部署.开箱即用.安全稳定.智管易用,通过定制软件和硬件相结合,预先定制.集成.测试和优化,实现快速部署和远程运维,并提升后续系统可用性和运维效率,是万物互联时代企业 ...

  4. [FAQ] edge debug栏的网络里 没有见到 All Fetch/XHR JS CSS 这些东西

      一种方式是 打开调试器的设置,重置默认并刷新即可. 另一种方式是把这个 "筛选" 点掉. Tool:揭开网站所用的技术 Link:https://www.cnblogs.com ...

  5. IIncrementalGenerator 获取引用程序集的所有类型

    本文告诉大家如何在使用 IIncrementalGenerator 进行增量的 Source Generator 生成代码时,如何获取到当前正在分析的程序集所引用的所有的程序集,以及引用的程序集里面的 ...

  6. dotnet 使用 Newtonsoft.Json 输出枚举首字符小写

    本文告诉大家如何使用 Newtonsoft.Json 输出枚举首字符小写 实现方法是加上 JsonConverterAttribute 特性,传入 StringEnumConverter 转换器,再加 ...

  7. ChatGPT,我的 .NET 应用该选择哪种日志框架?

    When using .NET 6, compare different main stream third-party logging packages, and give suggestions ...

  8. QT Creator 远程调试 QT 程序

    一.测试环境 QT Creator 版本:5.12.9 开发板:rv1126 开发环境:ubuntu20.04 开发板内核:4.19 二.配置 ARM 交叉编译器 ARM 交叉编译工具,购买开发板时, ...

  9. STLINK/V2下载器接线方法

    一.ST-LINK ST-LINK产品如下图所示: ST-LINK接口定义如下图所示 ST-LINK与stm32接线 使用SW接法只需要四根线: STM32 ST-LINK VCC(3.3V) TVC ...

  10. 大数据面试SQL每日一题系列:最高峰同时在线主播人数。字节,快手等大厂高频面试题

    大数据面试SQL每日一题系列:最高峰同时在线主播人数.字节,快手等大厂高频面试题 之后会不定期更新每日一题sql系列. SQL面试题每日一题系列内容均来自于网络以及实际使用情况收集,如有雷同,纯属巧合 ...