算法金 | 再见,PCA 主成分分析!

pca · 浏览次数 : 1

小编点评

本文主要介绍了数据降维的重要方法和工具——主成分分析(PCA)。PCA是一种广泛应用于各种领域的统计方法,能够帮助人们从大量数据中提取关键信息,简化模型,提高分析效率。 **一、概念** 主成分分析(PCA)是一种将一组可能相关的变量转换为一组线性不相关变量的方法。通过正交变换,PCA能够提取出数据中最重要的特征,从而减少变量的数量,简化模型,同时保留原始数据集中的大部分信息。 **二、核心原理** PCA的核心原理是通过找到数据方差最大的方向来确定主成分,并确保这些方向是相互正交的。这样做的目的是保证降维后的数据能够保留最多的原始数据信息。 **三、计算步骤** 1. 数据标准化:使得每个特征的平均值为0,方差为1。 2. 计算协方差矩阵:反映变量之间的相关性。 3. 计算协方差矩阵的特征值和特征向量:特征向量决定了PCA的方向,特征值决定了方向的重要性。 4. 选择主成分:根据特征值的大小,选择最重要的几个特征向量,构成新的特征空间。 **四、优缺点分析** 优点:降维效果显著且易于实施;揭示数据结构,便于进一步分析;无需标签数据。 缺点:线性限制,无法捕捉非线性结构;方差并非信息量的唯一衡量,可能会忽略一些重要信息;对异常值敏感。 **五、PCA实战介绍** 通过Python的sklearn库,可以方便地进行PCA操作。以下是一个使用PCA进行人脸数据降维的示例: 首先导入必要的库并加载Olivetti人脸数据集。接着创建DataFrame对象,初始化PCA模型并进行数据标准化。之后,使用拟合模型并转换数据。最后,通过绘制载荷图和散点图,以及使用Hotelling T2和SPE/Dmodx进行异常值检测,可以直观地观察降维效果。 **六、算法金小贴士** - 当大家都在谈论「不上班」时,要注意自己的工作状态和生活平衡; - 在选择工作平台时要谨慎,避免被夸大其词所误导; - 普通人应理性看待概率问题,认识到大多数情况下,现实与概率相符。

正文


​大侠幸会,在下全网同名[算法金] 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 主成分分析!相似的内容:

算法金 | 再见,PCA 主成分分析!

​大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 1. 概念:数据降维的数学方法 定义 主成分分析(PCA)是一种统计方法,通过正交变换将一组可能相关的变量转换为一组线性不相关的变量,这组新的变量称为主成分。 大白话,PCA能够从数据

算法金 | 再见!!!梯度下降(多图)

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 接前天 李沐:用随机梯度下降来优化人生! 今天把达叔 6 脉神剑给佩奇了,上 吴恩达:机器学习的六个核心算法! ——梯度下降 1、 目标 梯度下降优化算法的概述,目的在于帮助读者理解不同

算法金 | 再见!!!KNN

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 KNN算法的工作原理简单直观,易于理解和实现,这使得它在各种应用场景中备受青睐。 我们将深入探讨KNN算法,从基本概念到实现细节,从算法优化到实际应用,我们都会一一展开。通过本文,你将了

算法学习笔记(24): 狄利克雷卷积和莫比乌斯反演

# 狄利克雷卷积和莫比乌斯反演 > 看了《组合数学》,再听了学长讲的……感觉三官被颠覆…… [TOC] ## 狄利克雷卷积 如此定义: $$ (f*g)(n) = \sum_{xy = n} f(x)g(y) $$ 或者可以写为 $$ (f * g)(n) = \sum_{d | n} f(d) g

算法金 | 我最常用的两个数据可视化软件,强烈推荐

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 预警:今天文章的描述可能会让你有点别扭;如感到不适,请及时停止 在我行走江湖的行囊中,有两件利器,tableau与matplotlib,它们足以让我应对各种数据可视化的较

算法金 | Transformer,一个神奇的算法模型!!

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 在现代自然语言处理(NLP)领域,Transformer 模型的出现带来了革命性的变化。它极大地提升了语言模型的性能和效率,而自注意力机制是其中的核心组件。 今个儿我们将

算法金 | 线性回归:不能忽视的五个问题

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 线性回归的理论依据是什么? 多重共线性是什么,它如何影响线性回归模型? 什么是自相关性,自相关性对线性回归有什么影响? 什么是异方差性,如何检测和处理异方差性? 训练数据与测试数据分布不

算法金 | 必会的机器学习评估指标

构建机器学习模型的关键步骤是检查其性能,这是通过使用验证指标来完成的。 选择正确的验证指标就像选择一副水晶球:它使我们能够以清晰的视野看到模型的性能。 在本指南中,我们将探讨分类和回归的基本指标和有效评估模型的知识。 学习何时使用每个指标、优点和缺点以及如何在 Python 中实现它们 1 分类指标

算法金 | 没有思考过 Embedding,不足以谈 AI

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 在当今的人工智能(AI)领域,Embedding 是一个不可或缺的概念。如果你没有深入理解过 Embedding,那么就无法真正掌握 AI 的精髓。接下来,我们将深入探讨

算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 决策树是一种简单直观的机器学习算法,它广泛应用于分类和回归问题中。它的核心思想是将复杂的决策过程分解成一系列简单的决策,通过不断地将数据集分割成更小的子集来进行预测。本文将带你详细了解决