机器学习之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.mzph.cn/diannao/65367.shtml

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

相关文章

Mysql进阶SQL优化

SQL优化在开发场景中必不可少的技能之一,它能最大限度的提升SQL查询性能,如果随意使用也会出现不可预料的结局。 1、为什么要优化SQL 我们先说说不优化SQL造成什么现象。常见问题是响应时间长,用户体验感低。数据库频繁争抢锁,浪…

修改成清华镜像源解决Anaconda报The channel is not accessible源通道不可用问题

修改成清华镜像源解决Anaconda报The channel is not accessible源通道不可用问题 最近在通过pycharm开发python程序,引用anaconda环境建立虚拟环境时报错,报UnavailableInvalidChannel: The channel is not accessible or is invalid.应该是镜像源访问通…

Selenium+Java(21):Jenkins发送邮件报错Not sent to the following valid addresses解决方案

问题现象 小月妹妹近期在做RobotFrameWork自动化测试,并且使用Jenkins发送测试邮件的时候,发现报错Not sent to the following valid addresses,明明各个配置项看起来都没有问题,但是一到邮件发送环节,就是发送不出去,而且还不提示太多有用的信息,急的妹妹脸都红了,于…

Redis6为什么引入了多线程?

大家好,我是锋哥。今天分享关于【Redis6为什么引入了多线程?】面试题。希望对大家有帮助; Redis6为什么引入了多线程? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 6 引入了多线程的主要目的是提高性能&#…

【模块一】kubernetes容器编排进阶实战之kubernetes 资源限制

kubernetes 资源限制 kubernetes中资源限制概括 1.如果运行的容器没有定义资源(memory、CPU)等限制,但是在namespace定义了LimitRange限制,那么该容器会继承LimitRange中的 默认限制。 2.如果namespace没有定义LimitRange限制,那么该容器可…

Rancher V2.9.0 Docker安装教程

1、创建Rancher挂载目录 mkdir -p /home/rancher/k3s/agent/images/ 2、复制容器中的镜像tar包,防止挂载之后镜像包丢失导致创建集群报错 避免:Internal error occurred: failed calling webhook "default.cluster.cluster.x-k8s.io" dock…

CPT203 Software Engineering 软件工程 Pt.1 概论和软件过程(中英双语)

文章目录 1.Introduction1.1 What software engineering is and why it is important(什么是软件工程,为什么它很重要)1.1 We can’t run the modern world without software(我们的世界离不开软件)1.1.1 What is Soft…

从 Coding (Jenkinsfile) 到 Docker:全流程自动化部署 Spring Boot 实战指南(简化篇)

前言 本文记录使用 Coding (以 Jenkinsfile 为核心) 和 Docker 部署 Springboot 项目的过程,分享设置细节和一些注意问题。 1. 配置服务器环境 在实施此过程前,确保服务器已配置好 Docker、MySQL 和 Redis,可参考下列链接进行操作&#xff1…

[WASAPI]音频API:从Qt MultipleMedia走到WASAPI,相似与不同

[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识,在正式开始说WASAPI之前,我想先说一说Qt的Multiple Media,为什么呢?因为Qt的MultipleMedia实际上是WASAPI的一层封装,它在是线…

绝美的数据处理图-三坐标轴-散点图-堆叠图-数据可视化图

clc clear close all %% 读取数据 load(MyColor.mat) %读取颜色包for iloop 1:25 %提取工作表数据data0(iloop) {readtable(data.xlsx,sheet,iloop)}; end%% 解析数据 countzeros(23,14); for iloop 1:25index(iloop) { cell2mat(table2array(data0{1,iloop}(1,1)))};data(i…

第三百四十六节 JavaFX教程 - JavaFX绑定

JavaFX教程 - JavaFX绑定 JavaFX绑定同步两个值:当因变量更改时,其他变量更改。 要将属性绑定到另一个属性,请调用bind()方法,该方法在一个方向绑定值。例如,当属性A绑定到属性B时,属性B的更改将更新属性A…

详解VHDL如何编写Testbench

1.概述 仿真测试平台文件(Testbench)是可以用来验证所设计的硬件模型正确性的 VHDL模型,它为所测试的元件提供了激励信号,可以以波形的方式显示仿真结果或把测试结果存储到文件中。这里所说的激励信号可以直接集成在测试平台文件中,也可以从…

RNA-Seq 数据集、比对和标准化

RNA-Seq 数据集、比对和标准化|玉米中的元基因调控网络突出了功能上相关的调控相互作用。 RNA-Seq 表达分析代码和数据 该仓库是一个公开可用 RNA-Seq 数据集的集合(主要是玉米数据),提供了系统分析这些数据的代码/流程,以及质量…

学技术学英文:Spring AOP和 AspectJ 的关系

AspectJ是AOP领域的江湖一哥, Spring AOP 只是一个小弟 Spring AOP is implemented in pure Java. There is no need for a special compilation process. Spring AOP does not need to control the class loader hierarchy and is thus suitable for use in a ser…

JVM学习-内存结构(二)

一、堆 1.定义 2.堆内存溢出问题 1.演示 -Xmx设置堆大小 3.堆内存的诊断 3.1介绍 1,2都是命令行工具(可直接在ideal运行时,在底下打开终端,输入命令) 1可以拿到Java进程的进程ID,2 jmap只能查询某一个时…

Browser Use:AI智能体自动化操作浏览器的开源工具

Browser Use:AI智能体自动化操作浏览器的开源工具 Browser Use 简介1. 安装所需依赖2. 生成openai密钥3. 编写代码4. 运行代码5. 部署与优化5.1 部署AI代理5.2 优化与扩展总结Browser Use 简介 browser-use是一个Python库,它能够帮助我们将AI代理与浏览器自动化操作结合起来;…

Spring Cloud——注册中心

介绍 什么是注册中心? 主要负责服务的注册与发现,确保服务之间的通信顺畅,具体来说,注册中心有以下主要功能:‌服务注册、服务发现、服务健康检查。 服务注册: 服务提供者在启动时会向注册中心注册自身服务…

CSS基础入门【2】

目录 一、知识复习 二、权重问题深入 2.1 同一个标签,携带了多个类名,有冲突: 2.2 !important标记 2.3 权重计算的总结 三、盒模型 3.1 盒子中的区域 3.2 认识width、height 3.3 认识padding 3.4 border 作业: 一、知识…

捋一捋相关性运算,以及DTD和NLP中的应用

捋一捋相关性运算,以及DTD和NLP中的应用 相关性和相干性,有木有傻傻分不清相关性数字信号的相关运算同维度信号的相关理解 相关--互相关--相干 回声消除过程如何套用这些知识相关性/相干性检测在DT中的应用时域的标量与向量结合的互相关方法适合block处理的频域相干…

Elasticsearch:normalizer

一、概述 ‌Elastic normalizer‌是Elasticsearch中用于处理keyword类型字段的一种工具,主要用于对字段进行规范化处理,确保在索引和查询时保持一致性。 Normalizer与analyzer类似,都是对字段进行处理,但normalizer不会对字段进…