降维分析之PCA分析及实现

article/2025/7/8 21:38:20

引言

不知道大家还记不记得前面我们分享 支持向量机(SVM)的分析及python实现时说过,当数据遇到线性不可分时,我们可以利用kernel技巧将低维数据映射到高维数据上,从而使得数据线性可分,这是个“升维”操作。那么本章我们就来分享个“降维”操作。

为什么要降维

众所周知,降维的目标就是对输入的数据进行削减,由此剔除数据中的噪声并提高机器学习方法的性能。那么为什么会有降维的操作呢?那是因为高维空间会出现样本稀疏、距离计算困难等问题,这些被我们称作“维数灾难”。缓解维数灾难的一个重要途径就是降维了。首先我们来分享第一个降维算法PCA。
##PCA简单数学原理
主成分分析(Principal Component Analysis,简称PCA)是最常用的一种降维方法。我们有一个假设,即样本点处于一个正交属性空间。存在一个超平面能够将这些样本恰当的表达,同时该超平面还满足如下性质:

  • 最近重构型:样本点到这个超平面的距离都足够近
  • 最大可分性:样本点在超平面的投影能尽可能分开

基于这两个性质我们就能得到两种等价推导。这里我们不做推导的详细说明(详细过程,请戳:wiki),直接给条件,写出最后的结论。
假定数据样本进行了中心化,即 ∑ i x i = 0 \sum_i x_i=0 ixi=0;再假定投影变换后得到的新坐标系为 { w 1 , w 2 , . . . , w d } \{w_1,w_2,...,w_d\} {w1,w2,...,wd},其中 w i w_i wi是标准正交基向量,即 ∣ ∣ w i ∣ ∣ 2 = 1 , w i T w j = 0 , i ≠ j ||w_i||_2=1,w_i^Tw_j=0,i\neq j wi2=1,wiTwj=0,i=j;最终通过一系列推导会得到:
X X T W = λ W XX^TW=\lambda W XXTW=λW
于是我们只需对协方差矩阵 X X T XX^T XXT进行特征值分解,将求得的特征值排序:$\lambda_1 \geqslant\lambda_2\geqslant…\geqslant\lambda_d , 再 取 前 ,再取前 d^{‘} 个 特 征 值 对 应 的 特 征 向 量 构 成 个特征值对应的特征向量构成 W = (w_1,w_2,…,w_{d^{’}})$。这就是主成分分析的解。

PCA代码实现

那么PCA的伪代码如下:

  • 去除平均值(中心化)
  • 计算协方差矩阵
  • 计算协方差矩阵的特征值和特征向量
  • 将特征值从大到小排序
  • 保留最上面的N个特征向量
  • 将数据转化到上述N个特征向量构建的新空间中
    具体代码如下:
def pca(dataMat, topNfeat=9999999):meanVals = mean(dataMat, axis=0)meanRemoved = dataMat - meanVals #remove meancovMat = cov(meanRemoved, rowvar=0)eigVals,eigVects = linalg.eig(mat(covMat))eigValInd = argsort(eigVals)            #sort, sort goes smallest to largesteigValInd = eigValInd[:-(topNfeat+1):-1]  #cut off unwanted dimensionsredEigVects = eigVects[:,eigValInd]       #reorganize eig vects largest to smallestlowDDataMat = meanRemoved * redEigVects#transform data into new dimensionsreconMat = (lowDDataMat * redEigVects.T) + meanValsreturn lowDDataMat, reconMat

我们采用一个有1000个数据点组成的数据集对其进行PCA降维,运行效果:

import importlib
import pca
importlib.reload(pca)
dataMat = pca.loadDataSet('testSet.txt')
lowDMat,reconMat = pca.pca(dataMat,1)
import numpy as np 
np.shape(lowDMat)
(1000, 1)
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(dataMat[:,0].flatten().A[0],dataMat[:,1].flatten().A[0],marker='^',s=90)
<matplotlib.collections.PathCollection at 0x1d8b72b6ac8>
ax.scatter(reconMat[:,0].flatten().A[0],reconMat[:,1].flatten().A[0],marker='o',s=50,c='red')
<matplotlib.collections.PathCollection at 0x1d8b6edb438>
plt.show()

oca

总结

降维技术使得数据变得更易使用,并且它们往往能去除数据中的噪声,使得其他机器学习任务更加精确。


http://chatgpt.dhexx.cn/article/9XvU95Hd.shtml

相关文章

[R语言] R语言PCA分析教程 Principal Component Methods in R

R语言PCA分析教程 Principal Component Methods in R(代码下载) 主成分分析Principal Component Methods&#xff08;PCA&#xff09;允许我们总结和可视化包含由多个相互关联的定量变量描述的个体/观察的数据集中的信息。每个变量都可以视为不同的维度。如果数据集中包含3个以…

R语言对表达谱样本做PCA分析

主成分分析(Principal component analysis, PCA)是一种数学算法,它可以在减少数据维度的同时,保留数据集中绝大多数的变量[1]。 PCA通过对主成分进行辨别,找出一个方向,并沿此方向分布的数据为最大值,从而减少数据维度。通过采用这样的主成分,便可以只选用若干变量而不…

SIMCA-P 11.5 使用教程 PCA分析 PLS-DA分析

软件:SIMCA-P 11.5 数据:一个公共生物数据,195个样本(1类样本48例,2类样本147例),22个特征 二维数据表,csv格式,第一行为类标,第一列为特征编号 1、读取数据文件 (1)"File" -> "New" -> 选择csv数据文件,跳转Text Import Wizard窗口…

GCTA PCA分析以及软件安装教程

软件介绍系列 1. GCTA介绍 在群体遗传中&#xff0c;GCTA中做PCA非常方便, 下面介绍一下GCTA的安装方法. 2. 安装命令 使用conda自动安装 conda install -c biobuilds gcta 手动安装 官方地址 说明文档 3. 安装成功测试 这里, 应该键入gcta64, 而不是gcta (base) [de…

PCA分析法的python主要代码

一 PCA分析法介绍 可以理解为是一种降维的思想&#xff0c;将M列数据降维成对应的N列数据&#xff0c;用主要的几个字段解释整体方差变异 也可以理解为一种低维度的映射&#xff0c;举例将三维的数据找到一个二维映射面&#xff0c;同时可以尽力解释出较多的信息来 举例如下图…

R统计绘图-PCA分析及绘制双坐标轴双序图

zhe 点击名片 关注我们 有师妹来咨询&#xff0c;怎样画类似于上图的双坐标轴PCA双序图。正好之前虽然PCA和RDA分析及绘图都写过教程&#xff0c;但是变量分析结果没有在图中显示&#xff0c;所以使用R统计绘图-环境因子相关性热图流程开始按图1整理环境因子数据&#xff0c;…

PCA分析(主成分分析)--结果解读

主成分分析&#xff08;PCA&#xff09;是一个很好的工具&#xff0c;可以用来降低特征空间的维数。PCA的显著优点是它能产生不相关的特征&#xff0c;并能提高模型的性能。 PCA用于减少用于训练模型的特征维度数量&#xff0c;它通过从多个特征构造所谓的主成分&#xff08;P…

R统计绘图-PCA分析绘图及结果解读(误差线,多边形,双Y轴图、球形检验、KMO和变量筛选等)

虽然PCA和RDA分析及绘图都写过教程,但是对于结果的解释都没有写的很详细,刚好最近有人询问怎样使用FactoMineR factoextra包进行PCA分析。所以使用R统计绘图-环境因子相关性热图中的不同土壤环境因子数据进行PCA绘图和结果解读推文。 一、 数据准备 # 1.1 设置工作路径 #kn…

使用 QTLtools 进行 PCA 分析

3 使用 QTLtools 进行 PCA 分析 QTLtools 工具可以进行基因型的PCA分析&#xff0c;也可以进行表型的PCA分析&#xff0c;以下教程分别针对基因型和表型的PCA进行介绍&#xff1a; 3.1 对基因型进行PCA分析&#xff1b; 命令如下所示&#xff1a; QTLtools pca --vcf genot…

R语言中如何进行PCA分析?利用ggplot和prcomp绘制基因表达量分析图

学习笔记的主要内容是在R语言中利用ggplot2进行PCA分析和绘图&#xff0c;包括简单分析与操作流程&#xff0c;对比不同方式得到的结果差异&#xff0c;提供脚本代码供练习. PCA分析的原理 在处理基因差异表达数据时&#xff0c;有时候需要分析其中因素的影响最大&#xff0c;…

r语言dataellipse_R语言 PCA分析

PCA数据分析 PCA结果分析及可视化首推factoextra包&#xff0c;能处理各种R函数计算PCA的结果&#xff0c;有&#xff1a; stats::prcomp() FactoMiner::PCA() ade4::dudi.pca() ExPosition::epPCA() 如果我们想判断PCA中需要多少个主成分比较好&#xff0c;那么可以从主成分的…

样本数据PCA分析

PCA分析及画图 library(ggpubr) library(ggplot2) library(ggthemes) data1<-read.table(./100klist.txt,header 1)[,1:4] head(data1)BCD_rep1 BCD_rep2 CK_rep1 CK_rep2 1 0.1987 0.2036 0.1807 0.2062 2 0.2133 0.2169 0.2040 0.2140 3 0.1943 0.1965 …

转录组-PCA分析

PCA分析步骤&#xff1a; 第一步&#xff0c;对所有样本进行中心化 第二步&#xff0c;求特征协方差矩阵 第三步&#xff0c;求协方差矩阵的特征值和特征向量 第四步&#xff0c;将特征值按照从大到小的顺序排序&#xff0c;选择其中最大的k个&#xff0c;然后将其对应的k个特征…

PCA分析及CNS级别作图

从这节开始&#xff0c;就逐渐涉及转录组的基本可视化了&#xff0c;我们的可视化要做到CNS级别的图&#xff0c;争取做好分析&#xff0c;一步到位&#xff0c;让您有真正的收获&#xff01; PCA&#xff08;主成分分析&#xff09;&#xff0c;具体的原理就不说了&#xff0…

R语言PCA分析

常用R包&#xff1a;princomp&#xff0c;prcomp及rda R中输入数据类型有两类&#xff0c;R mode和Q mode。一般来说数据每一列为一个变量&#xff08;variable&#xff09;&#xff0c;每一行为一个数据&#xff08;observation&#xff09;。其中R mode的数据行数大于列数&a…

CSS3 媒体查询

1. 什么是媒体查询 CSS3媒体查询&#xff08;Media Query&#xff09;语法的特性&#xff1a; ①使用 media 查询&#xff0c;可以针对不同的媒体类型定义不同的样式&#xff1b; ②media 可以针对不同的屏幕尺寸设置不同的样式&#xff1b; ③当你重置浏览器大小的过程中&am…

mysql以逗号分隔的字段作为查询条件怎么查——find_in_set()函数

文章目录 写在前面作为查询条件 多条件查询用于mybatis 聚合查询count总数查询distinct的列表find_in_set()函数走索引吗 写在前面 使用mysql时&#xff0c;有可能一个字段代表一个集合&#xff0c;如果将这个集合单独抽成一张表又不值当的&#xff0c;这个时候我们存储时&a…

PageHelper实现分页查询

文章目录 前言一、PageHelper实现分页查询二、PageHelper的基本使用1. 先编写持久层2.编写业务逻辑层3..编写控制层4.使用JsonPage返回结果 总结 前言 分页查询的优点 所谓分页,就是查询结果数据较多时,采用按页显示的方法,而不是一次性全部显示 分页的优点: 服务器:一次性…

降低数据库压力的方法

1.合理增加索引 表索引可以加快对表中数据的检索速度&#xff0c;但是会降低表中数据的更新速度&#xff0c;所以增加表的索引一定控制在合理范围内&#xff0c;过多的索引不但不会降低数据库的压力&#xff0c;反而可能增大数据库的压力&#xff0c;表索引的建立一般要从具体业…

MyBatis—利用MyBatis查询(查询所有,查询一行,条件查询)

文章目录 1、查询所有2、查询详情&#xff08;通过特定属性查询&#xff09;3、多条件查询&#xff08;1&#xff09;接口参数列表三种表达方式&#xff08;2&#xff09;多条件查询&#xff08;3&#xff09;动态Sql&#xff08;4&#xff09;多条件动态查询&#xff08;5&…