当前位置: 首页 > news >正文

主成分分析

主成分分析

  • 相关概念
    • 方差
    • 协方差
    • 协方差矩阵
    • 特征值和特征向量
  • 主成分分析
    • 数据降维
    • 主成分分析原理
    • 主成分分析过程
    • sklearn库中的PCA
    • 主成分分析实现案例

相关概念

方差

方差是一个用来衡量一组数据离散程度的统计量,它是各样本与样本均值的差的平方和的平均值。方差越大,表示数据的离散程度越大。

方差公式:
s 2 = ∑ i = 1 n ( x i − x ) 2 ) n − 1 s^2 = \frac{\sum_{i=1}^{n}(x_i - x)^2)}{n - 1} s2=n1i=1n(xix)2)

协方差

协方差是一个用来衡量两个随机变量之间相关性或线性关系的统计量,它描述了两个随机变量的变化趋势是否一致。协方差的值可以为正、负或零,分别表示正相关、负相关或无相关。绝对值越大,表示两个随机变量的相关性越强。
然而,协方差的值无法直接比较,因为它受到随机变量尺度的影响。为了消除尺度影响,可以使用相关系数来衡量两个随机变量的相关性。

协方差公式:
c o v ( X , Y ) = ∑ i = 1 n ( X i − X ˉ ) ( Y i − Y ˉ ) n − 1 cov(X, Y) = \frac{\sum_{i=1}^{n}(X_i - \bar{X})(Y_i - \bar{Y})}{n - 1} cov(X,Y)=n1i=1n(XiXˉ)(YiYˉ)

协方差矩阵

协方差矩阵是一个对称矩阵,用来衡量多个随机变量之间的相关性或线性关系。它描述了多个随机变量之间的变化趋势是否一致。
协方差矩阵可以用来衡量多个随机变量之间的相关性,可以通过观察矩阵中的元素值来判断变量之间的关系。对角线上的元素表示每个随机变量的方差,非对角线上的元素表示不同随机变量之间的协方差。

特征值和特征向量

在线性代数中,特征值和特征向量是矩阵的重要概念。
特征值(eigenvalue)是一个标量,表示线性变换中的一个重要性质。对于一个n×n的方阵A,如果存在一个非零向量v使得满足以下条件:
A v = λ v Av = λv Av=λv
其中,v是一个非零向量,λ是一个标量,则λ被称为矩阵A的特征值,v被称为对应于特征值λ的特征向量。
特征向量(eigenvector)是与特征值相关联的向量。特征向量是指在线性变换中,只发生伸缩而不改变方向的向量。特征向量可以通过特征值方程来求解。
特征值和特征向量的重要性在于它们提供了矩阵的重要性质和结构信息。通过求解特征值和特征向量,可以得到矩阵的主要特征、主要方向以及变换的性质。在数据分析和机器学习中,特征值和特征向量经常被用于数据降维、特征提取和数据压缩等任务。

主成分分析

数据降维

数据降维是指通过保留数据中最重要的信息,将高维数据转换为低维表示的过程。在实际应用中,高维数据可能存在冗余、噪声或者维度灾难等问题,这时候可以使用数据降维技术来减少数据的维度,从而简化数据分析和处理的复杂性。数据降维可以帮助我们在处理和分析大规模高维数据时更加高效和准确,同时可以减少存储空间和计算成本。

数据降维的主要目的是在尽量保留原始数据的关键特征的前提下,减少数据的维度。常见的数据降维方法包括主成分分析(PCA)、因子分析(FA)、独立成分分析(ICA)、线性判别分析(LDA)、奇异值分解(SVD)等。

主成分分析原理

主成分分析(Principal Component Analysis,PCA)是一种常用的无监督学习方法,主要用于数据降维和特征提取。其目的是通过线性变换将原始数据投影到一组新的正交特征上,使得投影后的数据具有最大的方差。这样可以保留最重要的信息,并且去除冗余的维度。换句话说,PCA试图找到最能够解释数据变异性的主要方向(主成分),这些主成分是数据中最重要的特征,通过按照方差大小递减的顺序选择,可以实现降维。

主成分分析可以把具有相关性的高维变量转换为线性无关的低维变量,称为主成分。主成分能够尽可能保留原始数据的信息。
矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,依次类推。

主成分分析过程

主成分分析的步骤如下:

  1. 对数据进行标准化,使得每个特征的均值为0,方差为1。
  2. 计算协方差矩阵,反映不同特征之间的相关性。
  3. 对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。
  4. 将特征值按照大小排序,选择前k个特征值对应的特征向量作为主成分。
  5. 将原始数据与选取的主成分相乘,得到降维后的数据。

sklearn库中的PCA

sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)

  • n_components – PCA算法中所要保留的主成分个数n,即保留下来的特征个数n;
    int或string类型,缺省时默认为None,即所有成分被保留;
    赋值为int,比如n_components=1,则将把原始数据降到一个维度;
    赋值为string,比如n_components=‘mle’,则将自动选取特征个数n,使得满足所要求的方差百分比。
  • copy – bool类型,True或者False,缺省时默认为True;
    该参数表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行的运算;若为False,则运行PCA算法后,原始训练数据的值会发生改变,因为是在原始数据上进行的降维计算。
  • whiten – bool类型,缺省时默认为False;
    白化,使得每个特征具有相同的方差。如果为True,它会将分量向量标准化为单位方差,这在某些情况下可用于预测模型(默认为False)。

PCA对象的方法:

  • fit(X, y=None)
    fit()可以说是scikit-learn中通用的方法,每个需要训练的算法都会有fit()方法,它其实就是算法中的“训练”这一步骤。因为PCA是无监督学习算法,此处y自然等于None;
    fit(X),表示用数据X来训练PCA模型;
    pca.fit(X),表示用X对pca这个对象进行训练。
  • fit_transform(X)
    用X来训练PCA模型,同时返回降维后的数据;
    newX=pca.fit_transform(X),newX就是降维后的数据。
  • transform(X)
    将数据X转换成降维后的数据。当模型训练好后,对于新输入的数据,都可以用transform()方法来降维。

主成分分析实现案例

已知鸢尾花数据是四维的,共三类样本。要求使用PCA算法对鸢尾花数据进行降维,并实现二维平面上的可视化。

代码实现:

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA  # 导入PCA模块
from sklearn.datasets import load_iris  # 导入鸢尾花数据集模块# 加载数据
data = load_iris()  # 以字典形式加载鸢尾花数据集
X = data.data  # 使用X表示数据集中的属性数据
y = data.target  # 使用y表示数据集中的标签# 使用PCA算法进行数据降维
pca = PCA(n_components=2)  # 创建PCA对象,设置降维后主成分个数为2
reduced_X = pca.fit_transform(X)  # 对原始数据进行降维,降维后数据保存在reduced_X中# 按类别对降维后的数据进行保存
red_x, red_y = [], []  # 第一类数据点
green_x, green_y = [], []  # 第二类数据点
blue_x, blue_y = [], []  # 第三类数据点for i in range(len(reduced_X)):  # 按照鸢尾花的类别将降维后的数据点保存在不同的列表中if y[i] == 0:red_x.append(reduced_X[i][0])red_y.append(reduced_X[i][1])elif y[i] == 1:green_x.append(reduced_X[i][0])green_y.append(reduced_X[i][1])else:blue_x.append(reduced_X[i][0])blue_y.append(reduced_X[i][1])# 降维后数据点的可视化
plt.scatter(red_x, red_y, c='r', marker='x')
plt.scatter(green_x, green_y, c='g', marker='D')
plt.scatter(blue_x, blue_y, c='b', marker='.')plt.show()

更详细的代码实现:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 数据标准化
# PCA算法对数据的尺度敏感,因此在应用PCA之前,需要对数据进行标准化处理,使得每个特征的均值为0,方差为1
X = (X - np.mean(X, axis=0)) / np.std(X, axis=0)  # 标准化公式:(样本数据 - 样本均值) / 样本标准差# 计算协方差矩阵
cov_matrix = np.cov(X.T)# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)# 选择主成分
explained_variance_ratio = eigenvalues / np.sum(eigenvalues)# 降维
n_components = 2  # 选择降维后的维数
top_eigenvectors = eigenvectors[:, :n_components]
X_pca = X.dot(top_eigenvectors)# 按类别对降维后的数据进行保存
red_x, red_y = [], []  # 第一类数据点
green_x, green_y = [], []  # 第二类数据点
blue_x, blue_y = [], []  # 第三类数据点for i in range(len(X_pca)):  # 按照鸢尾花的类别将降维后的数据点保存在不同的列表中if y[i] == 0:red_x.append(X_pca[i][0])red_y.append(X_pca[i][1])elif y[i] == 1:green_x.append(X_pca[i][0])green_y.append(X_pca[i][1])else:blue_x.append(X_pca[i][0])blue_y.append(X_pca[i][1])# 降维后数据点的可视化
plt.scatter(red_x, red_y, c='r', marker='x')
plt.scatter(green_x, green_y, c='g', marker='D')
plt.scatter(blue_x, blue_y, c='b', marker='.')plt.show()

相关文章:

主成分分析

主成分分析 相关概念方差协方差协方差矩阵特征值和特征向量 主成分分析数据降维主成分分析原理主成分分析过程sklearn库中的PCA主成分分析实现案例 相关概念 方差 方差是一个用来衡量一组数据离散程度的统计量,它是各样本与样本均值的差的平方和的平均值。方差越大…...

笙默考试管理系统-MyExamTest(26)

笙默考试管理系统-MyExamTest(26) 目录 一、 笙默考试管理系统-MyExamTest 二、 笙默考试管理系统-MyExamTest 三、 笙默考试管理系统-MyExamTest 四、 笙默考试管理系统-MyExamTest 五、 笙默考试管理系统-MyExamTest 笙默考试管理系统-MyEx…...

重新理解 RocketMQ Commit Log 存储协议

最近突然感觉:很多软件、硬件在设计上是有 root reason 的,不是 by desgin 如此,而是解决了那时、那个场景的那个需求。一旦了解后,就会感觉在和设计者对话,了解他们的思路,学习他们的方法,思维…...

ES6基础知识十:你是怎么理解ES6中 Decorator 的?使用场景?

一、介绍 Decorator,即装饰器,从名字上很容易让我们联想到装饰者模式 简单来讲,装饰者模式就是一种在不改变原类和使用继承的情况下,动态地扩展对象功能的设计理论。 ES6中Decorator功能亦如此,其本质也不是什么高大…...

接口/Web自动化测试如何做?框架如何搭建封装?

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 自动化测试怎么做…...

Linux怎么从网络上下载文件

wget命令用于从网络上下载文件 下载文件: wget [URL]使用wget命令加上要下载的文件的URL,可以将文件下载到当前目录。 指定保存的文件名: wget -O [保存的文件名] [URL]使用-O选项后跟保存的文件名,可以指定下载的文件保存的名称…...

Flutter携带JSON参数post请求

在Flutter中发送带有JSON参数的网络请求&#xff0c;你可以使用HTTP库&#xff08;如http或dio&#xff09;来实现。以下是使用http库发送网络请求并携带JSON参数的示例&#xff1a; import package:http/http.dart as http; import dart:convert;// 创建参数Map Map<Strin…...

【vue】vue-image-lazy图片懒加载使用与介绍【超详细+npm包源代码】

简介 当前插件是基于vue3&#xff0c;写的一个图片懒加载&#xff0c;文章最下方是npm包的源码&#xff0c;你可以自己拿去研究和修改&#xff0c;如有更好的想法可以留言&#xff0c;如果对你有帮助&#xff0c;可以点赞收藏和关注&#xff0c;谢谢。 后续会添加图片放大和切…...

MFC第二十四天 使用GDI对象画笔和画刷来开发控件(分页控件选择态的算法分析、使用CToolTipCtrl开发动静态提示)

文章目录 GDI对象画笔和画刷来开发控件梯形边框的按钮控件CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp 矩形边框的三态按钮控件 CToolTipCtrl开发动静态提示CMainDlg.hCMainDlg.cppCLadderCtrl.hCLadderCtrl.cpp: 实现文件 矩形边框的三态按钮控件 CToolTipCtrl开发动…...

【NLP-新工具】语音转文本与OpenAI的用途

一、说明 OpenAI最近2022发布了一个名为Whisper的新语音识别模型。与DALLE-2和GPT-3不同&#xff0c;Whisper是一个免费的开源模型。它的主要功能就是将语音翻译成文本。本文将介绍如何使用这个重要应用库。 二、 Whisper概念 2.1 Whisper是啥&#xff1f; Whisper 是一种自动…...

try-catch-finally的字节码原理

Java 中有一个非常重要的内容是 try-catch-finally 的执行顺序和返回值问题&#xff0c;其中 finally 一定会执行&#xff0c;但是为什么会这样&#xff1f; 下面看下 try-catch-finally 背后的实现原理 try-catch public class Test {public static void main(String[] args)…...

基于双层优化的微电网系统规划设计方法(Matlab代码实现)

目录 &#x1f4a5;1 概述 1.1 微电网系统结构 1.2 微电网系统双层规划设计结构 1.3 双层优化模型 1.4 上层容量优化模型 1.5 下层调度优化模型 &#x1f4da;2 运行结果 &#x1f389;3 文献来源 &#x1f308;4 Matlab代码、数据、文章讲解 &#x1f4a5;1 概述 文献来源&…...

【Nginx13】Nginx学习:HTTP核心模块(十)Types、AIO及其它配置

Nginx学习&#xff1a;HTTP核心模块&#xff08;十&#xff09;Types、AIO及其它配置 今天学习的内容也比较简单&#xff0c;主要的是 Types 相关的配置&#xff0c;另外还会了解一下 AIO 以及部分没有特别大的分类归属的配置指令的使用。后面的内容都是 HTTP 核心模块中比较小…...

2023年华数杯数学建模C题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor 1 竞赛信息 为了培养学生的创新意识及运用数…...

安卓手机变身Linux服务器

文章目录 前言一、准备工作1、安卓手机2、下载软件二、开始安装1、检查系统,确认版本并安装2、配置(安卓7.0 及以上的用户忽略此步)3、问题处理【没有异常的小伙伴忽略】总结前言 在实际开发中有很多地方都需要服务器资源,但是服务器资源不论在哪里都是比较紧缺的资源,今…...

【Ansible】Ansible自动化运维工具之playbook剧本

playbook 一、playbook 的概述1. playbook 的概念2. playbook 的构成 二、playbook 的应用1. 安装 httpd 并启动2. 定义、引用变量3. 指定远程主机 sudo 切换用户4. when条件判断5. 迭代6. Templates 模块6.1 添加模板文件6.2 修改主机清单文件6.3 编写 playbook 7. tags 模块 …...

Yolov8目标检测

Yolov8目标检测 目录 Yolov8目标检测一、准备数据集二、源码下载配置2.1 下载库2.2 修改配置2.3 训练2.4 验证2.5 测试2.6 模型导出2.7 本地测试 一、准备数据集 Yolov8只支持yolo格式的数据&#xff0c;所以&#xff0c;需要将数据集格式调整为 datasets|images|train|00000…...

Jmeter用于接口测试中,关联如何实现

Jmeter用于接口测试时&#xff0c;后一个接口经常需要用到前一次接口返回的结果&#xff0c;应该如何获取前一次请求的结果值&#xff0c;应用于后一个接口呢&#xff0c;拿一个登录的例子来说明如何获取。 1、打开jmeter, 使用的3.3的版本&#xff0c;新建一个测试计划&#x…...

线程状态

从卖包子的案例学习进程间的通信 public class Test {public static void main(String[] args) {Object objnew Object();Thread th1new Thread(){Overridepublic void run() {synchronized (obj){System.out.println("来三个包子&#xff01;");try {obj.wait(); /…...

HTML一些基础知识

1、Web标准&#xff1a;主要包含结构、表现、行为。结构用于对网页元素进行整理和分类&#xff0c;主要指HTML。表现用于设置网页元素的板式、颜色、大小等外观样式&#xff0c;主要指的是CSS。行为主要指的是网页模型的定义以及交互的编写&#xff0c;主要是js文件。 Html相当…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...