机器学习之PCA降维

主成分分析(PCA,Principal Component Analysis)

主成分分析(PCA)是一种常见的无监督学习技术,广泛应用于数据降维、数据可视化以及特征提取等任务。PCA的目标是通过线性变换将数据从高维空间映射到低维空间,同时尽可能保留数据的变异性(即数据的主要特征)。

1. PCA的基本思想

PCA的核心思想是找出数据中方差最大的方向,并用这些方向来描述数据。通过这些方向(称为“主成分”),我们可以在保持数据的主要信息的同时,减少数据的维度。

具体来说,PCA的过程可以分为以下几个步骤:

  1. 标准化数据:通常情况下,在进行PCA之前,我们会对数据进行标准化(零均值单位方差处理)。这一步骤非常重要,因为PCA的结果受数据尺度的影响。如果数据的不同特征量纲不同,PCA可能会偏向那些尺度较大的特征。

  2. 计算协方差矩阵:通过计算数据的协方差矩阵,我们可以了解不同特征之间的相关性。协方差矩阵的每个元素表示两个特征之间的协方差。如果两个特征之间的协方差较大,说明它们之间存在较强的线性关系。

  3. 计算特征值和特征向量:对协方差矩阵进行特征值分解(或奇异值分解)。特征值代表每个主成分方向的重要性,而特征向量则代表这些方向本身。

  4. 排序和选择主成分:将特征值按降序排列,选择最大的几个特征值对应的特征向量作为主成分。每个主成分都代表数据中的一个方向,这些方向是原始特征空间中最能表示数据方差的方向。

  5. 将数据投影到新空间:使用选定的主成分将数据从高维空间映射到低维空间,这样我们就可以得到降维后的数据。

2. PCA的数学过程

假设我们有一个 n×m 的数据矩阵 X,其中 n 是样本数,m 是特征数。PCA的数学步骤如下:

  1. 数据标准化: 对每个特征减去均值,得到零均值数据:

    X′=X−μ

    其中,μ 是特征的均值。

  2. 计算协方差矩阵: 协方差矩阵 C 计算公式为:

  3. 特征值分解: 对协方差矩阵 C 进行特征值分解,得到特征值和特征向量:

    其中,λi是特征值,vi是对应的特征向量。

  4. 选择主成分: 按照特征值的大小对特征向量进行排序,选择前 k个特征值对应的特征向量,组成一个新的矩阵 Vk。

  5. 数据映射: 使用选定的特征向量将原数据映射到新的低维空间:

    Xnew=X′Vk

    其中,Xnew是降维后的数据,Vk是由前 k 个主成分组成的矩阵。

3. PCA的应用
  • 数据降维:PCA最常见的应用之一是降维。当数据具有很多特征时,可能存在冗余信息,PCA可以通过减少特征数量来简化模型,减少计算开销,同时尽量保留数据的原始信息。

  • 数据可视化:PCA常用于将高维数据投影到2D或3D空间,帮助我们对数据进行可视化。通过观察降维后的数据,我们可以识别数据的分布、模式或异常。

  • 去噪声:通过去除一些较小的主成分,可以消除数据中的噪声,增强信号。

  • 特征提取:PCA可以用来提取数据中的重要特征,尤其是在图像处理、语音识别等领域。它能够帮助我们识别最具代表性的特征,从而简化后续的处理和建模。

4. PCA的优缺点
  • 优点

    1. 降维效率高:PCA是一种线性降维方法,计算过程相对简单且高效,适用于大规模数据。
    2. 数据压缩:PCA能够有效地减少数据的维度,去除冗余特征。
    3. 去噪效果:去除低方差成分,可以减少噪声的影响,提高数据质量。
  • 缺点

    1. 线性假设:PCA只能捕捉数据中的线性关系,对于非线性数据的表现不佳。
    2. 信息丢失:虽然PCA可以减少数据维度,但如果选择的主成分较少,可能会丢失重要信息。
    3. 特征不可解释性:PCA的主成分是原始特征的线性组合,通常难以直观解释。
5. PCA的Python实现

在Python中,可以使用scikit-learn库中的PCA类来实现主成分分析。以下是一个简单的示例:

import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler# 假设X是我们的原始数据矩阵
X = np.random.randn(100, 5)  # 100个样本,5个特征# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 初始化PCA对象
pca = PCA(n_components=2)  # 降到2维# 拟合PCA并转换数据
X_pca = pca.fit_transform(X_scaled)print("降维后的数据形状:", X_pca.shape)
以使用 Python 中的 matplotlibsklearn 来生成一个展示PCA过程的图。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler# 创建一个简单的二维数据集
np.random.seed(0)
X = np.random.randn(100, 2)# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 执行PCA,降到1维
pca = PCA(n_components=1)
X_pca = pca.fit_transform(X_scaled)# 可视化原始数据和PCA后的投影
plt.figure(figsize=(8, 6))# 绘制原始数据
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], alpha=0.7, label='Original Data')# 绘制主成分方向
origin = np.mean(X_scaled, axis=0)
plt.quiver(origin[0], origin[1], pca.components_[0, 0], pca.components_[0, 1],angles='xy', scale_units='xy', scale=1, color='r', label='Principal Component')# 绘制PCA后的投影
plt.scatter(X_pca, np.zeros_like(X_pca), alpha=0.7, color='g', label='PCA Projection')plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.title('PCA: Projection of Data onto Principal Component')
plt.grid(True)
plt.show()

图解说明:

  1. 原始数据(蓝色点):这表示原始的二维数据。
  2. 主成分(红色箭头):这表示通过PCA找到的主要方向(最大方差的方向),用箭头表示。
  3. PCA后的投影(绿色点):数据点被投影到主成分方向后,降维到一维。
6. 总结

PCA是一种强大的线性降维工具,广泛应用于数据处理和机器学习任务中。它能够通过找到数据中的主要成分来简化问题,降低计算复杂度,但其线性假设限制了它在一些复杂数据结构上的表现。

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

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

相关文章

SOTA简繁中文拼写检查工具:FASPell Chinese Spell Checker 论文

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法,如果提升 100W 倍的性能? NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊! 一个提升英文单词拼…

Visual Studio Code历史版本下载

本章教程,介绍如何找到Visual Studio Code的历史版本官方下载地址。 一、历史版本下载地址 下载地址:https://code.visualstudio.com/updates/ 二、常用版本下载地址 August 2017 (version 1.16):https://code.visualstudio.com/updates/v1_…

Kubernetes(k8s)离线部署DolphinScheduler3.2.2

1.环境准备 1.1 集群规划 本次安装环境为:3台k8s现有的postgreSql数据库zookeeper服务 1.2 下载及介绍 DolphinScheduler-3.2.2官网:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2 官网安装文档:https://dolphinscheduler.apach…

【自动化测试】windows下安装Selenium浏览器界面测试工具

Date: 2024.12.23 10:15:53 author: lijianzhan 简述:这篇教程详细介绍了如何在Windows环境下安装selenium,并设置Chrome浏览器驱动。什么是Selenium?Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端…

如何在 Ubuntu 22.04 上安装 phpMyAdmin

简介 PHPMyAdmin 是在 Ubuntu 22.04 上管理 MySQL 数据库的绝佳选择。它是一个流行的工具,拥有简单、高效且用户友好的基于 Web 的界面,让你能够轻松地管理 MySQL 数据库。因此,许多开发人员、数据库管理员和网站所有者都信任 PHPMyAdmin 来…

大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop&#xff0…

[Python3] Sanic中间件

在 Sanic 中,中间件(middleware)是指在请求和响应之间执行的代码。它们是一个非常强大的工具,用于处理请求的预处理、响应的后处理、全局错误处理、日志记录、认证、权限校验、跨域资源共享(CORS)等任务。中…

使用 OpenCV 绘制线条和矩形

OpenCV 是一个功能强大的计算机视觉库,它不仅提供了丰富的图像处理功能,还支持图像的绘制。绘制简单的几何图形(如线条和矩形)是 OpenCV 中常见的操作。在本篇文章中,我们将介绍如何使用 OpenCV 在图像上绘制线条和矩形…

操作系统课程设计

摘 要 本项目旨在深入设计与实现一套基于Java的模拟操作系统,模拟和实现常见操作系统的核心功能,包括进程管理、内存分配与调度、高效的文件系统和多样化设备的管理。通过该模拟操作系统的开发,探索计算机操作系统的基础理论与实际工程细节…

css改变输入右下角图标

前言 正常情况下&#xff0c;HTML textarea 多行文本输入框会存如下图所示图标&#xff0c; 用户可拉动它改变高度&#xff0c;这是我们不想看到的&#xff0c;所以要去掉它。 去掉后&#xff1a; 解决方案 设置 resize 属性即可&#xff0c;如下代码所示&#xff1a; <…

HTML-CSS(day01)

W3C标准&#xff1a; W3C&#xff08; World Wide Web Consortium&#xff0c;万维网联盟&#xff09; W3C是万维网联盟&#xff0c;这个组成是用来定义标准的。他们规定了一个网页是由三部分组成&#xff0c;分别是&#xff1a; 三个组成部分&#xff1a;&#xff08;1&…

2024-12-24 NO1. XR Interaction ToolKit 环境配置

文章目录 1 软件配置2 安装 XRToolKit3 配置 OpenXR4 安装示例场景5 运行测试 1 软件配置 Unity 版本&#xff1a;Unity6000.0.26 ​ 2 安装 XRToolKit 创建新项目&#xff08;URP 3D&#xff09;&#xff0c;点击进入 Asset Store。 进入“Unity Registry”页签&#xff0…

C语言基础——指针(4)

一&#xff0e; 字符指针变量 字符指针变量的使用和整型指针变量的使用方法相似&#xff0c;以下是其基本使用方法的例子&#xff1a; &#xff08;1&#xff09;字符指针变量还有一种使用方法&#xff1a; const char* p "abcd" 需…

week 11 - BCNF

1. More on functional dependencies (功能依赖的更多内容) Lossless decomposition (无损分解) 研究如何在分解表的过程中不丢失信息&#xff0c;也就是说&#xff0c;通过分解后的表可以无损地重建原始表。 2. BCNF (Boyce-Codd Normal Form, BCNF范式) &#xff08;1&…

嵌入式学习-QT-Day06

嵌入式学习-QT-Day06 六、多窗口编程 1、QMessageBox 消息对话框 2、QWidget类 3、parent参数 4、堆栈窗口&#xff08;QStackedWidget&#xff09; 5、新建自定义窗口类 6、对象传值 6.1 父对象 → 子对象 6.2 子对象 → 父对象 7、事件机制 8、QMainWindow主窗口类 8.1 QMenu…

《战神:诸神黄昏》游戏运行时提示找不到gamede.dll文件怎么办?gamede.dll丢失的修复指南

在沉浸于《战神&#xff1a;诸神黄昏》的壮阔世界时&#xff0c;突然弹出的“找不到gamede.dll文件”错误提示可能会让玩家措手不及。作为一名经验丰富的软件开发从业者&#xff0c;我深知这类问题对游戏体验的影响。今天&#xff0c;我将为大家详细解析gamede.dll文件丢失的原…

1.系统学习-线性回归

系统学习-线性回归 前言线性回归介绍误差函数梯度下降梯度下降示例 回归问题常见的评价函数1. MAE, mean absolutely error2. MSE, mean squared error3. R square &#xff08;决定系数或R方&#xff09; 机器学习建模流程模型正则化拓展阅读作业 链接: 2.系统学习-逻辑回归 …

基于微信小程序的校园访客登记系统

基于微信小程序的校园访客登记系统 功能列表 用户端功能 注册与登录 &#xff1a;支持用户通过手机号短信验证码注册和登录。个人资料管理 &#xff1a;允许用户编辑和更新个人信息及其密码。站内信消息通知&#xff1a;通知公告。来访预约&#xff1a;提交来访预约支持车牌…

H3C MPLS跨域optionB

实验拓扑 实验需求 如图,VPN1 和 VPN2 分别通过运营商 MPLS VPN 连接各自分支机构按照图示配置 IP 地址,VPN1 和 VPN2 连接同一个 PE 设备的私网 IP 网段存在地址复用,使用多 VRF 技术来防止 IP 冲突AS 100 和 AS 200 内部的公共网络中各自运行 OSPF 使 AS 内各设备的 Loo…

【项目管理】根据业务流程进行函数结构设计和模块化设计

在开发一个复杂的系统时&#xff0c;根据业务流程进行函数结构设计和模块化设计是一个非常重要的步骤。通过这种方式&#xff0c;能够将复杂的业务逻辑拆分成多个功能模块和函数&#xff0c;使代码更清晰、易维护、易扩展。我们在写代码的时候需要基于对于业务的理解来编程&…