【主成分分析(PCA)】

文章目录

  • 一、什么是主成分分析(PCA)?
    • 主成分的选取
      • 方差的重要性
      • 数据降维
    • PCA的应用场景
  • 二、主成分分析的工作原理
    • 1.方差和数据的重要性
    • 2.计算协方差矩阵
    • 3.特征值和特征向量
    • 4.选择主成分
  • 三、PCA的实现步骤
    • 1.标准化数据集
    • 2.计算协方差矩阵
    • 3.计算特征值和特征向量
    • 4.选择主成分
    • 5.转换数据到新的空间
  • 四、在`sklearn`库中应用PCA:以鸢尾花数据集为例
    • 加载鸢尾花数据集
    • 数据标准化
    • 应用PCA
    • 可视化结果

一、什么是主成分分析(PCA)?

主成分分析(PCA)是一种统计方法,它利用正交变换技术,将一组可能存在线性关系的变量转换成一组线性不相关的变量,这些新的变量称为主成分。它的核心思想是在减少数据集的维度的同时,尽量减少信息的损失,从而在降低复杂度的同时保留数据集中最重要的特征。

PCA的过程可以被视为发现数据中的模式,以及识别数据结构中的相互关系。它能够揭示数据的内在结构,即便在原始数据集中这种结构不是立即显而易见的。PCA能够有效地识别和压缩数据,去除冗余信息。

主成分的选取

在PCA中,每一个主成分都尝试捕获数据中最大的方差量。第一个主成分捕获了最多的方差,第二个主成分试图捕获剩余数据中最多的方差,且与第一个主成分正交,以此类推。这些主成分作为新的坐标轴,而原始数据可以在这些新轴上被重新表达。

方差的重要性

方差衡量了数据点相对于平均值的偏离程度。在PCA中,具有较大方差的方向含有较多的信息。通过选取能够最大化方差的方向作为主成分,PCA能够保证降维后的数据尽可能保留原始数据的特征。

数据降维

通过移除较小的特征值对应的成分,PCA实现了数据的降维。这个过程可以去除数据中的噪声,并且在保留数据集中最重要信息的同时减小了数据的规模。降维后的数据更易于存储和处理,对于机器学习模型的训练也更为高效。

PCA的应用场景

PCA广泛应用于数据预处理、数据压缩、和特征提取等多个领域。它尤其适用于处理高维数据集,如图像处理、基因数据分析和金融数据分析等领域。通过减少数据的维度,PCA不仅能够帮助我们简化模型,还能提高算法的运行效率,减少过拟合的风险。

二、主成分分析的工作原理

1.方差和数据的重要性

在主成分分析(PCA)中,方差作为数据分布的度量。方差衡量了数据点如何分散在其平均值周围,即数据的波动性。在PCA中,较高的方差通常意味着数据中包含更多的信息,因为这表明数据点在其平均值周围有较大的扩散。因此,PCA寻求那些最大化方差的主成分,以便捕获并保留尽可能多的数据信息。通过这种方式,即使在降低数据维度的过程中,也能够尽量减少信息的损失。

2.计算协方差矩阵

协方差矩阵是PCA的一个关键组成部分,它帮助揭示了数据集中各个特征之间的线性关系。协方差衡量了两个变量如何一同变化,如果两个变量的增加或减少是相关的,它们的协方差就是正值;如果一个变量的增加导致另一个变量减少,协方差就是负值;如果两个变量独立,协方差为零。

为了计算协方差矩阵,首先需要将每个变量(特征)的平均值减去对应的数据点,使其均值为零。然后,使用以下公式计算协方差矩阵:

C o v ( X , Y ) = 1 n − 1 ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) Cov(X,Y)=\frac1{n-1}\sum_{i=1}^n(X_i-\bar{X})(Y_i-\bar{Y}) Cov(X,Y)=n11i=1n(XiXˉ)(YiYˉ)

其中, X \text{X} X Y \text{Y} Y 是两个不同的特征, N \text{N} N 是观测点的数量, X ˉ \bar{X} Xˉ Y ˉ \bar{Y} Yˉ分别是 X \text{X} X Y \text{Y} Y 的平均值。通过计算所有特征对之间的协方差,可以构建协方差矩阵。

3.特征值和特征向量

特征值和特征向量是从协方差矩阵中导出的数学概念,协方差矩阵的特征值反映了数据在新轴上(即主成分)的方差大小,而特征向量则定义了这些新轴的方向。

  • 特征值:每一个特征值对应于协方差矩阵的一个主成分,表示该成分的方差,即数据在该方向上的分散程度。
  • 特征向量:与特征值相对应的是特征向量,它指出了数据在多维空间中分散的方向。每个特征向量都垂直于其他特征向量,代表了一个主成分的方向。

通过计算协方差矩阵的特征值和特征向量,可以确定数据的主成分,即数据最主要的方差来源。

4.选择主成分

选择主成分的过程涉及到对协方差矩阵的特征值从大到小排序,特征值越大,对应的特征向量(主成分)在数据集中就越重要,因为它解释了更多的方差。通常,会选择特征值更大的特征向量。

三、PCA的实现步骤

1.标准化数据集

在进行PCA之前,首先需要对数据进行标准化处理,以确保每个特征的均值为0,标准差为1。PCA对数据的尺度非常敏感。

from sklearn.preprocessing import StandardScaler

# 假设X是一个包含多个特征的数据集
X_standardized = StandardScaler().fit_transform(X)

2.计算协方差矩阵

标准化后,计算数据集的协方差矩阵。协方差矩阵揭示了数据集中各个特征之间的关系。

import numpy as np

cov_matrix = np.cov(X_standardized.T)  # 注意转置,因为np.cov()期望行代表特征,列代表观察值

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

计算协方差矩阵的特征值和特征向量,这些特征向量决定了数据在新空间中的方向,而特征值则表示每个方向的重要性。

eigen_values, eigen_vectors = np.linalg.eig(cov_matrix)

# eigen_values 存储了特征值,eigen_vectors 存储了对应的特征向量

4.选择主成分

根据特征值的大小选择最重要的特征向量(主成分)。一般会选择解释最大方差的前几个主成分。

# 对特征值从大到小排序
eigen_value_vector_pairs = [(np.abs(eigen_values[i]), eigen_vectors[:,i]) for i in range(len(eigen_values))]
eigen_value_vector_pairs.sort(key=lambda k: k[0], reverse=True)

# 选择前k个特征向量,k是新空间的维度
k = 2  # 示例中选择2个主成分
matrix_w = np.hstack((eigen_value_vector_pairs[i][1].reshape(-1,1) for i in range(k)))

5.转换数据到新的空间

将原始数据转换到选定的主成分定义的新空间中。

X_transformed = X_standardized.dot(matrix_w)

# X_transformed 是转换后的数据,其中只包含了最重要的k个主成分

四、在sklearn库中应用PCA:以鸢尾花数据集为例

加载鸢尾花数据集

from sklearn.datasets import load_iris

iris = load_iris()
X = iris.data
y = iris.target

X包含了数据集的特征,而y包含了对应的标签。

数据标准化

from sklearn.preprocessing import StandardScaler

X_std = StandardScaler().fit_transform(X)

应用PCA

使用sklearn.decomposition.PCA来执行主成分分析。将数据降维到2维,便于可视化。

from sklearn.decomposition import PCA

# 初始化PCA对象,设置主成分数为2
pca = PCA(n_components=2)

# 对标准化后的数据进行PCA处理
X_pca = pca.fit_transform(X_std)

通过上述步骤,X_pca现在包含了原始数据在两个主成分上的投影。

可视化结果

使用matplotlib库来绘制数据点:

import matplotlib.pyplot as plt

# 为每个目标类别设置不同的颜色
colors = ['r', 'g', 'b']
target_names = iris.target_names

plt.figure()
for color, i, target_name in zip(colors, [0, 1, 2], target_names):
    plt.scatter(X_pca[y == i, 0], X_pca[y == i, 1], color=color, lw=2, label=target_name)

plt.legend(loc='best', shadow=False, scatterpoints=1)
plt.title('PCA of IRIS dataset')
plt.show()

散点图展示了降维后的数据点在两个主成分方向上的分布,不同的颜色代表不同的鸢尾花类别。通过PCA,我们能够用较低的维度捕捉到数据的主要特征,并且在可视化中清楚地区分不同的类别。

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

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

相关文章

Windows应用商店打不开怎么办?

大家习惯在windows应用商店下载应用和软件,操作也很方便。最近,有用户却称,win10系统上网情况一切正常,但是就是无法打开应用商店,同时还伴随闪退。这该怎么办呢?针对此故障,小编整理好了解决方法,接下来,将和大家分享Windows应用商店打不开怎么办。 操作方法如下: 1…

SpringBoot如何优雅的进行参数校验

一、传统参数校验 虽然往事不堪回首,但还是得回忆一下我们传统参数校验的痛点。 下面是我们传统校验用户名和邮箱是否合法的代码 if (username null || username.isEmpty()) {throw new IllegalArgumentException("用户名不能为空"); }if (isValidEmai…

如何使用PHP和RabbitMQ实现延迟队列(方式一)?

前言 今天我们来做个小试验,用PHP和RabbitMQ实现消息队列的延迟功能。 前期准备,需要安装好docker、docker-compose的运行环境。 需要安装RabbitMQ的可以看下面这篇文章。 如何使用PHP和RabbitMQ实现消息队列?-CSDN博客 一、安装RabbitM…

抖音视频关键词批量采集工具|无水印视频爬虫提取软件

抖音视频关键词批量采集工具: 我们很高兴地介绍最新推出的抖音视频关键词批量采集工具,该工具集成了多项强大功能,让您轻松实现视频内容的批量提取和下载。以下是详细的功能解析和操作说明: 主要功能: 关键词批量提取…

【GIS前沿技术】推荐几款高大上的在线地图,地理学者的福音!

文章目录 一、https://zoom.earth/二、https://www.ventusky.com/三、https://earth.nullschool.net四、https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer?fjsapi 一、https://zoom.earth/ 卫星: 雷达: 降水&#xff…

[深度学习]yolov8+pyqt5搭建精美界面GUI设计源码实现五

【简单介绍】 依托先进的目标检测算法YOLOv8与灵活的PyQt5界面开发框架,我们倾力打造出了一款集直观、易用与功能强大于一体的目标检测GUI界面软件。通过深度融合YOLOv8在目标识别领域的出色性能与PyQt5的精美界面设计,我们成功推出了一款高效且稳定的软…

Element UI中日期选择日(date-picker)等其他选择器下拉显示错位、位置错误解决

省流版 给选择器加上唯一key(下面的想看就看) 问题复现 需求是用一个下拉切换时间维度的选择,分别为年度、季度、月度,但是开发的时候发现,当切换的时候,视图可正常切换,但点击选择时却发现选…

数据分析面试题(41~50)

41、lstm的原理、lstm和rnn的区别 ①LSTM是一种常用于处理序列数据的循环神经网络(RNN)架构,特别适用于长序列的建模。其主要特点是通过门控机制来控制信息的流动,从而有效地解决了传统RNN在处理长序列时的梯度消失或爆炸的问题。…

Linux(centos7)部署hadoop集群

部署环境要求:已完成JDK环境部署、配置完成固定IP、SSH免费登录、防火墙关闭等。 1、下载、上传主机 官网:https://hadoop.apache.org 2、解压缩、创建软连接 解压: tar -zxvf hadoop-3.3.6.tar.gz软连接: ln -s /usr/local/apps/hadoop-3.3.6 hadoop3、文件配置 hadoo…

MQTT协议介绍

基本概念 MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。 基本设计思想是轻巧、开放、简单、规范,易于实现。 这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网…

设计模式之抽象工厂模式精讲

概念:为创建一组相关或相互依赖的对象提供一个接口,而且无须指定他们的具体类。 抽象工厂模式是工厂方法模式的升级版本。在存在多个业务品种或分类时,抽象工厂模式是一种更好的解决方式。 抽象工厂模式的UML类图如下: 可以看…

基于XGBoost和数据预处理的电动汽车车型预测

基于XGBoost和数据预处理的电动汽车车型预测 文章目录 基于XGBoost和数据预处理的电动汽车车型预测1、前言2、导入数据3、各县电动汽车采用情况条形图4、电动车类型饼图5、前5最欢迎的电动车制造商6、XGBoost模型6.1 字符串列的标识6.2 删除不相关的列6.3 编码分类变量6.4 电动…

大数据分析案例-基于决策树算法构建大学毕业生薪资预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

渐变色x轴换行柱状图

// 系统上云率const optionBar {title: {text: 系统上云率,left: left,textStyle: {color: "#fff",fontSize: 14,fontWeight: 650,align: "center",},},color: [#32C5FF, #00F766, #EECB5F],grid: {top: 40,bottom: 0,},legend: { // 控制图例组件show: …

C语言中其他运算符介绍

除了算术运算符和位运算符外,C语言还提供了一些其他类型的运算符,包括逗号运算符、条件运算符、sizeof运算符、指针运算符等。这些运算符在C语言中具有特定的功能和用途,对于编写复杂的程序和实现各种算法非常有用。本文将深入介绍C语言中的这…

是德科技keysight DSOX3104A示波器

181/2461/8938产品概述: Keysight(原Agilent) InfiniiVision DSOX3104A 的价位较低,能够在满足您苛刻预算要求的情况下提供卓越性能,以及可选功能。是德(原安捷伦)突破性技术可以在相同的预算条件下提供更多更出色的示波器功能 Keysight(原A…

Spring Boot 整合分布式搜索引擎 Elastic Search 实现 自动补全功能

文章目录 ⛄引言一、分词器⛅拼音分词器⚡自定义分词器 二、自动补全查询三、自动补全⌚业务需求⏰实现酒店搜索自动补全 四、效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,…

zabbix监控vmware esxi

一、zabbix服务端配置 修改zabbix_server.conf配置文件 vim /etc/zabbix/zabbix_server.conf #######zabbix_server.conf底部第二行开始添加下面配置######## StartVMwareCollectors5 #StartVMwareCollectors - 预先启动Vmware collector收集器实例的数量。此值取决于要监控的…

深入了解 Postman 请求头的使用方法

当你在使用 Postman 发送请求时,请求头(Headers)是你可以包含在 HTTP 请求中的重要部分之一。请求头包含了关于请求的元数据信息,这些信息对于服务器来处理请求是非常重要的。下面是一份详细的图文介绍,说明了如何在 P…

算法(6)KMP+trie

KMP: 最浅显易懂的 KMP 算法讲解_哔哩哔哩_bilibili 该视频使用python书写代码,不会python的小伙伴也可以看看了解kmp的大致思路。 问题描述: kmp:字符串匹配算法,用来找一个长字符串中出现了几次小字符串&#xf…