机器学习之PCA

article/2025/10/13 16:49:59

一、PCA基本介绍

PCA(Principal Components Analysis)-主成分分析算法

  1. 用于数据降维、可视化、去噪
  2. 非监督学习算法

二、PCA工作原理

主成分分析法
求梯度
将数据在第一个主成分上的分量去掉

样本点矩阵(左)和主成分矩阵(右)

目标:每次将空间中多维的样本点映射到一条直线上(要保证样本点之间的间距最大,用方差衡量,即保证样本点的特征丢失得最少),从而实现降了1维。重复上面操作,得到许多条直线,其实就是得到一个新的坐标轴。然后将所有样本点映射到新的坐标轴上,即实现了数据降维,并且最好地保留了样本特征。

将上图进行步骤总结:

  1. 将所有样本点的均值归零化(每一个样本点的特征都减去该特征对应的均值)(为了方便求方差)
  2. 将方差中的每一部分,转化成直线向量与样本点向量的点积(均值为0,坐标轴中心是原点)
  3. 将方差设为一个目标函数,转化成了目标函数最优化(越大越好)问题,可使用梯度上升法解决
  4. 求出梯度,通过梯度上升法得到第一主成分w1,是一个向量
  5. 对所有样本点,利用向量减法去掉第一主成分w1上的分量
  6. 重复上述操作找出第二主成分w2,以此类推
  7. 最后得出主成分矩阵,即新的坐标轴
  8. 通过矩阵相乘,将样本点数据映射到新的坐标轴上,最终实现降维

三、sklearn实现PCA

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasetsdigits = datasets.load_digits()
X = digits.data
y = digits.targetfrom sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)# X_train.shape  --> (1347, 64)from sklearn.neighbors import KNeighborsClassifierknn_clf = KNeighborsClassifier()
knn_clf.fit(X_train, y_train)
print(knn_clf.score(X_test, y_test))  # 0.9866666666666667 精度高但64维数据训练时间长# 数据降维
from sklearn.decomposition import PCApca = PCA(n_components=2)   # 降到2维
pca.fit(X_train)
X_train_reduction = pca.transform(X_train)  # 将训练数据集降维
X_test_reduction = pca.transform(X_test)  # 将测试数据集也降维knn_clf = KNeighborsClassifier()
knn_clf.fit(X_train_reduction, y_train)
print(knn_clf.score(X_test_reduction, y_test))  # 0.6066666666666667 精度低但时间快很多"""
pca.explained_variance_ratio_   返回每一个主成分能解释的方差所占比例,主成分越多和越接近1array([1.45668166e-01, 1.37354688e-01, 1.17777287e-01, 8.49968861e-02,5.86018996e-02, 5.11542945e-02, 4.26605279e-02, 3.60119663e-02,3.41105814e-02, 3.05407804e-02, 2.42337671e-02, 2.28700570e-02,1.80304649e-02, 1.79346003e-02, 1.45798298e-02, 1.42044841e-02,1.29961033e-02, 1.26617002e-02, 1.01728635e-02, 9.09314698e-03,8.85220461e-03, 7.73828332e-03, 7.60516219e-03, 7.11864860e-03,6.85977267e-03, 5.76411920e-03, 5.71688020e-03, 5.08255707e-03,4.89020776e-03, 4.34888085e-03, 3.72917505e-03, 3.57755036e-03,3.26989470e-03, 3.14917937e-03, 3.09269839e-03, 2.87619649e-03,2.50362666e-03, 2.25417403e-03, 2.20030857e-03, 1.98028746e-03,1.88195578e-03, 1.52769283e-03, 1.42823692e-03, 1.38003340e-03,1.17572392e-03, 1.07377463e-03, 9.55152460e-04, 9.00017642e-04,5.79162563e-04, 3.82793717e-04, 2.38328586e-04, 8.40132221e-05,5.60545588e-05, 5.48538930e-05, 1.08077650e-05, 4.01354717e-06,1.23186515e-06, 1.05783059e-06, 6.06659094e-07, 5.86686040e-07,1.71368535e-33, 7.44075955e-34, 7.44075955e-34, 7.15189459e-34])
"""

pca = PCA(n_components=2) 可以指定主成分数量即降到几维。降到2维方便数据可视化,也极大提高了训练速度,但会导致精度下降很多,因为丢失了很多维度的特征。可以通过分析pca.explained_variance_ratio_返回的数组,将其可视化查看多少维主成分保留信息较多,然后选择降到合适的维度。
取前n个主成分(x轴)所保留的信息(y轴)
sklearn中的PCA封装了这一过程,可直接指定一个比例,保留这个比例的特征信息。

  1. n_components是>=1的整数时,表示期望PCA降维后的特征维度数
  2. n_components是[0,1]的小数时,表示主成分的方差和所占的最小比例阈值,PCA类自己去根据样本特征方差来决定降维到的维度
pca = PCA(n_components=0.95)
pca.fit(X_train)X_train_reduction = pca.transform(X_train)	# 降维训练集
X_test_reduction = pca.transform(X_test)	# 降维测试集knn_clf = KNeighborsClassifier()
knn_clf.fit(X_train_reduction, y_train)print(knn_clf.score(X_test_reduction, y_test))  # 0.98
print(pca.n_components_)  # 28

输出结果,我们可以打印一下pca.n_components_,发现保留了28个主成分即压缩成28维就能保留95%的样本信息,精度高达0.98,和训练全部样本的精度所差无几并且极大地减少了训练时间


总结

主成分分析目的是用较少的变量来代替原来较多的变量,并可以反映原来多个变量的大部分信息

但经过运算之后的主成分特征维度的含义具有模糊性,解释性差(我们最多可以理解成主成分只是由原来的坐标维度线性相加的结果,但加出来之后它到底是啥就不好说了)。

问题

  1. 待完善

http://chatgpt.dhexx.cn/article/HFQIChLB.shtml

相关文章

PCA9536——填坑

0. 问题 使用PCA9536输出模式控制4个小灯,开始时候按几次就不显示了,以为是接线不稳定原因。 后来一按开机电源就不显示了,以为是其他器件电源不稳定导致。 1. 问题1排除 接线问题,重新接线,重新做端子,…

sklearn PCA

sklearn.decomposition.PCA class sklearn.decomposition.PCA(n_componentsNone, *, copyTrue, whitenFalse, svd_solverauto, tol0.0, iterated_powerauto, random_stateNone)官方:link PCA是特征降维中一种 线性降维 的方法。 与特征选择不同(直接筛…

使用PCA对彩色图片降维

PCA对图片降维 1.原图片2.PCA降维思路3.代码4.k5效果图5.结论 1.原图片 2.PCA降维思路 1、小灰灰图片(407,367)2、求图片407行每行的均值mean,再将407行每行元素各自减去对应行的均值mean,即去中心化。得矩阵X&#xf…

使用PCA拟合平面

PCA原理&使用PCA拟合平面 背景三点确定一平面多点拟合平面基础数学知识PCA基本思想PCA拟合平面计算过程 PCA理解中心化协方差对角化 背景 本文参考以下两篇平面解析的论文。 《Fast Plane Extraction in Organized Point Clouds Using Agglomerative Hierarchical Cluster…

Dynamic inner PCA 和 Dynamic PCA

动态PCA方法的核心思想: 将数据X变成增广矩阵,即: l为潜在变量数,然后对X进行传统的PCA方法进行求解,即是动态PCA的结果。 动态内模PCA与之不同,上述动态PCA的一大缺陷是增加了数据的维度,而动…

python实现PCA

★ PCA个人理解: PCA降维是通过变换坐标系,来尽可能的减少信息损失。 ★ PCA思路: 我们的初始矩阵为X,它是mn维的矩阵,其中:m是该数据集有m条记录,n是每条记录中有n个特征,X的基本格…

PCA降维算法

目录 1.维度1.1数据维度1.2特征维度 2.sklearn中的降维算法2.1PCA与SVD2.2降维的实现2.3重要参数n_components2.3.1最大似然估计自选超参数2.3.2 按信息量占比选超参数 3.PCA中的SVD3.1重要参数svd_solver 与 random_state3.2重要属性components_3.3重要接口inverse_transform …

PCA降维

一、主成分分析 1、动机:多个变量之间往往存在一定的相关性,可以通过线性组合的方式从中提取信息。 2、主成分分析:将原始的n维数据投影到低维空间,并尽可能的保留更多的信息。 ---投影后方差最大 ---最小化重构误差 从而达到…

pca绘图

pca 1 PCAtools 1.1 加载R包 library(PCAtools) library(tidyverse)1.2 加载数据&#xff0c;构建表达矩阵和分组信息&#xff08;以iris为例&#xff09; iris <- as.data.frame(iris) iris <- iris %>% mutate(class str_c("a",1:dim(iris)[1],sep …

PCA算法详解

文章出处&#xff1a;http://blog.csdn.net/zhongkelee/article/details/44064401 一、PCA简介 1. 相关背景 上完陈恩红老师的《机器学习与知识发现》和季海波老师的《矩阵代数》两门课之后&#xff0c;颇有体会。最近在做主成分分析和奇异值分解方面的项目&#xff0c;所以记…

PCA 算法详解

PCA算法步骤&#xff1a; 设有m条n维数据。 1&#xff09;将原始数据按列组成n行m列矩阵X 2&#xff09;将X的每一行&#xff08;代表一个属性字段&#xff09;进行零均值化&#xff0c;即减去这一行的均值 3&#xff09;求出协方差矩阵 4&#xff09;求出协方差矩阵的特征值及…

PCA原理

PCA 各位&#xff0c;久违了&#xff5e; 什么是PCA&#xff1f; 什么是PCA呢&#xff1f;这是一个问题&#xff0c;什么样的问题&#xff1f;简单而又复杂的问题&#xff0c;简单是因为百度一下就会出现一大堆的解释&#xff0c;复杂是因为它里面蕴含的内容还是很多的&…

python实现PCA降维

本文包括两部分&#xff0c;使用python实现PCA代码及使用sklearn库实现PCA降维&#xff0c;不涉及原理。 总的来说&#xff0c;对n维的数据进行PCA降维达到k维就是&#xff1a; 对原始数据减均值进行归一化处理&#xff1b;求协方差矩阵&#xff1b;求协方差矩阵的特征值和对…

PCA算法

主成分分析&#xff08;Principal components analysis&#xff0c;以下简称PCA&#xff09;是最重要的降维方法之一。 参考&#xff1a;http://www.cnblogs.com/pinard/p/6239403.html PCA的思想 PCA顾名思义&#xff0c;就是找出数据里最主要的方面&#xff0c;用数据里最…

PCA

R语言实现PCA 一次来自男神MR.来的作业PCA读取数据PCA主体部分输出PCA的主要结果&#xff0c;列出主成分分析分析结果利用碎石图来展示PCA结果对component进行一些解释 简略分析利用PCA结果来进行一个排序下面进行聚类分析 一次来自男神MR.来的作业 PCA 读取数据 #读取数据&…

主成分分析(PCA)原理详解

转载请声明出处&#xff1a;http://blog.csdn.net/zhongkelee/article/details/44064401 一、PCA简介 1. 相关背景 上完陈恩红老师的《机器学习与知识发现》和季海波老师的《矩阵代数》两门课之后&#xff0c;颇有体会。最近在做主成分分析和奇异值分解方面的项目&#xff0c…

PCA详解

本文目录 一、来源及作用存在问题基本作用 二、 基本原理及求解步骤核心思想如何选择投影方向 三、原理分析最大投影方差最小重构代价 四、SVD与PCA的关系 一、来源及作用 存在问题 在我们训练模型的过程中&#xff0c;有时会出现在训练集上误差较小&#xff0c;但到了测试集误…

主成分分析法(PCA)

主成分分析&#xff08;Principal components analysis&#xff0c;以下简称PCA&#xff09;是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。一般我们提到降维最容易想到的算法就是PCA&#xff0c;下面我们就对PCA的原理做一个总结。 目录 …

主成分分析(PCA)方法步骤以及代码详解

主成分分析&#xff08;PCA&#xff09;方法步骤以及代码详解 前言 上一节我们了解到在构建神经网络模型&#xff0c;除了掌握如何搭建神经网络架构&#xff0c;了解参数具体含义&#xff0c;规避风险等方法。第一步是要对采用数据集的详细了解&#xff0c;无需接触任何神经网…

机器学习——PCA降维(我至今为止遇见的最好的博文)

参考文章&#xff1a;https://zhuanlan.zhihu.com/p/77151308 PCA&#xff08;Principal Component Analysis&#xff09; 是一种常见的数据分析方式&#xff0c;常用于高维数据的降维&#xff0c;可用于提取数据的主要特征分量。 PCA 的数学推导可以从最大可分型和最大重构性…