机器学习算法/模型——有监督到无监督(降维):主成分分析(PCA)

机器学习——主成分分析(PCA) PCA 是 Principal Component Analysis 的缩写,中文称为主成分分析法。它是一种维数约减(Dimensionality Reduction)算法,即把高维度数据在损失最小的情况下转换为低维度数据的算法。显然,PCA 可以用来对数据进行压缩,可以在可控的失真范围内提高运算速度,提高机器学习的效率,使较为复杂的数据简单化。所谓损失最小就是从高维向低维映射的时候误差最小,低维空间的描述是向量组,k维空间就用k个向量来描述这个空间。 阅读详情


PCA是一种无监督的学习算法,它是线性模型,不能直接用于分类和回归问题。

0. 本质和概述

0.1 本质

核心:向重构误差最小(方差最大)的方向做线性投影

PCA是一种数据降维和去除相关性的方法,它通过线性变换将向量投影到低维空间,而同时保证在低维空间中的投影能很好的近似表达原始向量,即重构误差最小化。

在这里插入图片描述

上图是主分量投影示意图,样本用红色的点表示,倾斜的直线是它们的主要变化方向。将数据投影到这条直线上即完成数据的降维,把数据从2维降为1维。

0.2概念/术语

  • 维度灾难
  • 特征空间
  • 数据稀疏
  • 超平面空间 = 原空间的子空间
    向量空间都有对应的超平面,而超平面的维度低于其所在空间。(这也是降维的任务所在)

1. 数据降维(建立直觉)

1.1 降维

机器学习领域里讲的降维是指:采用某种映射方法,将原本高维空间中的数据样本映射到低维空间中。

降维算法多种多样,比较常用的有:PCA(Principal Component Analysis,主成分分析)、LDA(Linear Discriminant Analysis,线性判别分析)、LLE(Locally linear embedding,局部线性嵌入)、Laplacian Eigenmaps (拉普拉斯特征映射)等。

1.2 降维本质

降维的本质是学习一个映射函数 y=f(x)
,其中 x 表示原始的高维数据,y 表示映射后的低维数据。

下面介绍一个数据预处理常用的方法:数据主成分分析,简称PCA。

2. 主成分分析(PCA)

把一个空间中的样本点映射到它的超平面上,映射后的结果就只存在于超平面空间(也就是原空间的子空间)这样,我们就获得了降维的结果。
在这里插入图片描述
如上图,几个二维数据点可以投影到任意一个直线上面完成降维。(黄线比蓝线更接近主成分的方向)

(回归头来才发现,原来这么简单的道理:因为黄线的方向比蓝线方向更能代表原来的数据的走势!)

怎么能够保证超平面中的点不丧失对应原始点的“主成分”呢?看下面的几个点。

2.1 两个目标

  • 特征减少(减少维度)
  • 损失要小(抓住主要成分)

2.2 一个思路

① 利用变换,去除原始数据的相关性,将原特征转变为线性无关的新特征

② 舍弃不重要的特征,倾向于选方差大的特征作为主成分

为什么要去除相关性——相关性越大,冗余信息越多
为什么选方差作为判断标准——方差越大,信息量越大

2.3 两种方法

  • 分解协方差矩阵来求取
  • 绕开协方差矩阵对原始数据矩阵进行矩阵分解

3. 求解主成分

3.1 分解协方差矩阵

计算最佳投影方向时求解的最优化问题为:
在这里插入图片描述

最后归结为求协方差矩阵的特征值和特征向量:
在这里插入图片描述

3.2 奇异值分解

注:除了可以用于 PCA 的实现,SVD 还可以直接用来降维。

4. 代码

4.1

  • 模块导入
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
  • 准备数据
rng = np.random.RandomState(1)
X = np.dot(rng.rand(2, 2), rng.randn(2, 200)).T
plt.scatter(X[:, 0], X[: ,1])
plt.axis('equal')

在这里插入图片描述

  • ① 数据主轴的可视化(数据分析)

设置 n_components=2

from sklearn.decomposition import PCA 
pca = PCA(n_components=2)
pca.fit(X) 
print(pca.components_)   # “成分”

print(pca.explained_variance_)   # 可解释差异
# 可视化元数据的主轴
def draw_vector(v0, v1, ax=None):
    ax = ax or plt.gca()
    arrowprops=dict(arrowstyle='->',
                    linewidth=2,
                    shrinkA=0, shrinkB=0)
    ax.annotate('', v1, v0, arrowprops=arrowprops)

# plot data
plt.scatter(X[:, 0], X[:, 1], alpha=0.2)
for length, vector in zip(pca.explained_variance_, pca.components_):
    v = vector * 3 * np.sqrt(length)
    draw_vector(pca.mean_, pca.mean_ + v)
plt.axis('equal');

在这里插入图片描述

  • ② 进行降维
    设置 n_components=1 (降低一个维度)
# 变换的数据被投影到一个单一维度。
pca = PCA(n_components=1)
pca.fit(X)
X_pca = pca.transform(X)
print("original shape:   ", X.shape)
print("transformed shape:", X_pca.shape)

为了理解降维的效果,我们来进行数据降维的逆变换,并且与原始数据一起画出

X_new = pca.inverse_transform(X_pca)
plt.scatter(X[:, 0], X[:, 1], alpha=0.2)
plt.scatter(X_new[:, 0], X_new[:, 1], alpha=0.8)
plt.axis('equal');

在这里插入图片描述
我们可以很清楚地看到 PCA 降维的含义:沿着最不重要的主轴的信息都被去除了,仅留下了含有最高方差值的数据成分。被去除的那一小部分方差值(与主轴上分布的点成比例,如图所示)基本可以看成是数据在降维后损失的“信息”量。
——被损失的是局有相关性(成比例)的那部分数据。(如下图标出的黑线部分:橙色点和蓝色点在不重要的主轴上基本成线性关系)
在这里插入图片描述

4.2

  • 模块导入
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()

from sklearn.decomposition import PCA 
  • 数据准备
rng = np.random.RandomState(1) 

x = np.linspace(0, 100, num=100)
y = 3 * x + 30 * rng.randn(100) 

print(x.shape, y.shape)
plt.scatter(x, y)

直接通过直线方程准备我们需要的数据
在这里插入图片描述
调整数据的 shape,并合并:

x = x.reshape(-1, 1) 
y = y.reshape(-1, 1)

X = np.hstack((x, y))
print(X.shape)

  • 拟合数据
pca_model = PCA(n_components=1)
pca_model.fit(X)
  • 数据转换:降维
# 数据转换:二维数据投影到了一个单一维度
X_pca = pca_model.transform(X)
print(X_pca.shape)
  • 逆向转换:进行可视化
X_new = pca_model.inverse_transform(X_pca)
print(X_new.shape)
plt.scatter(X[:, 0], X[:, 1]) 
plt.scatter(X_new[:, 0], X_new[:, 1])

在这里插入图片描述

5. PCA小案例

假设我们研究的对象有两个特征属性X和Y,对 5 个样本进行数据采样的结果如下:

XY
样本122
样本226
样本346
样本488
样本548

我们的目标是对其降维,只用一维特征来表示每个样本,只用一维特征来表示每个样本。我们首先将其绘制在二维平面图中进行整体观察:
在这里插入图片描述

查看这两个变量的协方差矩阵,

import numpy as np
import matplotlib.pyplot as plt

x = [2,2,4,8,4]
y = [2,6,6,8,8]
S = np.vstack((x,y))

print(np.cov(S))


[[ 6.  4.]
 [ 4.  6.]]

结合之前的二维散点图可以发现5个样本的特征 X 和特征 Y 呈现出正相关性,数据彼此之间存在着影响。

若直接粗暴地去掉一个特征,可行么?则会变成:
在这里插入图片描述
显然效果不理想:忽视了数据中的内在结构关系,并且带来了非常明显的信息损失。
(降维——>高维数据向低维进行投影)

一个解决思路便是:

① 去除原始特征的相关性,使用心新的一组特征来表示原始数据
② 然后从新的彼此无关的特征中舍弃不重要的特征,保留较少的特征,实现降维。

首先,第一点的目的是使用新的特征来对样本来进行描述,为了让这两个新特征满足彼此无关的要求,就需要让这两个新特征的协方差为0,构成的协方差矩阵是一个对角矩阵(原始特征X和Y的协方差不是0,只是一个普通的对称矩阵)

对变量分别进行0均值处理后,通过求解协方差矩阵的特征向量,就可以得到线性无关的特征矩阵(图中两个新的坐标方向)。

在这里插入图片描述
接下来的工作就是从这两个特征中选取一个作为原始数据的特征表达,其判断标准是方差,方差越大表示这个特征里的数据分布的离散程度就越大,特征所包含的信息量就越大。

在这里插入图片描述

参考

  1. 机器学习数据预处理:数据降维之PCA
  2. 数据预处理:PCA原理推导
  3. 数据降维处理:PCA之特征值分解法例子解析
  4. 数据降维处理:PCA之奇异值分解(SVD)介绍
  5. 主成分分析(上):利用特征值分解
  6. 主成分分析(中):奇异值分解的原理与通用性
  7. PCA——利用数学工具提取主要特征
  8. 矩阵特征值分解与主成分分析(Python 实现)
机器学习sklearn-PCA降维算法 1 概述 1.1 什么叫“维度” 对于数组和Series来说,维度就是功能shape返回的结果,shape中返回了几个数字,就是几维。 针对每一张表,维度指的是样本的数量或特征的数量,一般无特别说明,指的都是特征的数 量。 对图像来说,维度就是图像中特征向量的数量。特征向量可以理解为是坐标轴。 **降维算法中的”降维“,指的是降低特征矩阵中特征的数量。**降维的目的是为了让算法运算更 快,效果更好,但其实还有另一种需求:数据可视化。 1.2 sklearn中的降维算法 sklearn中降维算法都被包括在模块 阅读详情

相关推荐

无监督学习与主成分分析(PCA)

无监督学习与主成分分析(PCA)-降维 序 在之前的文章中,我讲了很多的监督学习的算法(线性模型,SVM,决策树,神经网络等),那么接下来,我们要开始接触无监督学习了。首先,我们先说下相关概念。 无监督学习 与监督学习不同,在无监督学习中,学习算法只有输入数据,并且从数据中提取需要的知识。而其中有两种常用类型:数据集变换和聚类。 无监督变换是创建数据新的表示的算法,与数据的原始表示相比,新的表示可能更容易被人或其它机器学习算法所理解。而无监督变换的一个常见应用就是降维,它接受包含许多特征的数据的高维表示,并

weixin_43580339的博客 4769

主成分分析(PCA)算法模型实现及分析(MATLAB实现)PCA降维

主成分分析(PCA)是一种能够极大提升无监督特征学习速度的数据降维算法。主成分分析(Principal Component Analysis,PCA)的方法,可以将具有多个观测变量的高维数据集降维,使人们可以从事物之间错综复杂的关系中找出一些主要的方面,从而能更加有效地利用大量统计数据进行定量分析,并可以更好地 由于得到协方差矩阵的特征值特征向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵,所以PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法

weixin_42491720的博客 1万+

Sklearn 机器学习 数据降维PCA 自己实现PCA降维算法

PCA(主成分分析)的原理与实现方法。

Kant2048的博客 1996

机器学习(五):深入浅出PCA降维

一.前言 PCA可以说是业界使用的非常频繁的机器学习方法了,今天博主带领大家深入浅出PCA模型,相信看完本文你会对PCA有一个更加深刻的理解。话不多说,请看下文!!! 二.理论介绍 2.1 什么是PCA PCA的英文全称是Principal Component Analysis,即主成分分析,它是一种常用的数据降维方法。数据降维指的是将高维空间中的数据在低维空间中进行表示,同时尽可能较少信息损失。通过数据降维可以提取合适的特征表示并避免维数灾难,数据降维在可视化方面也有着广泛的应用。 周志华的西瓜书中指出

LW的技术小筑 2688

无监督学习——降维问题:主成分分析(PCA)详解

PCA 是一种强大的降维技术,在数据可视化、特征提取、数据压缩等方面具有广泛的应用。通过本文的介绍,我们了解了 PCA 的原理、应用场景、代码实现以及优缺点。在实际应用中,需要根据数据的特点和具体问题选择合适的降维方法,并对降维后的效果进行评估。

ZhShy 1192

Sklearn 机器学习 数据降维PCA 使用PCA算法

使用 Scikit-Learn 实现 PCA 主成分分析的完整指南。

Kant2048的博客 1280

【机器学习-无监督学习】降维与主成分分析

本文介绍了数据降维的常用算法之一:PCA算法。数据降维是无监督学习的重要问题,在机器学习中有广泛的应用。利用特征分解进行PCA,动手实现了PCA算法,并使用sklearn实现PCA算法。

Morse_Chen的博客 3295

一文速学数模-降维模型(一)PCA(主成分分析法)原理以及应用+代码实现

前言 PCA多用于对数据特征集进行降维,也方便对数据集进行可视化操作,说白了最后进行结果展示那么多特征向量要一起表示的话肯定很难展示,超过三维的数据就很难展示了。而PCA可对特征集进行简化,通俗的来讲也就是合并好理解。PCA应用的范围很广因此很有必要要学习,原理肯定还是数学证明,在特征工程上经常使用。希望读者看完能够提出错误或者看法,博主会长期维护博客做及时更新。纯分享,希望大家喜欢。 一、为什么需要PCA?(为什么要降维) 在各个领域进行数据收集或是数据采样时往往都是存在多个指标或是特征...

master_hunter的博客 4万+

【主成分分析】PCA降维算法及Matlab代码实现

主成分分析(Principal Component Analysis,PCA), 是一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。 在实际课题中,为了全面分析问题,往往提出很多与此有关的变量(或因素),因为每个变量都在不同程度上反映这个课题的某些信息。 主成分分析首先是由K.皮尔森(Karl Pearson)对非随机变量引入的,尔后H.霍特林将此方法推广到随机向量的情形。信息的大小通常用离差平方和或方差来衡量。

LilYau的博客 1万+

【Python评价模型】PCA主成分分析(降维)

PCA的核心思想是将原始数据投影到新的坐标轴上,使得投影后的数据具有最大的方差。主成分是原始特征经过线性变换得到的新特征,它们按照方差从大到小排列,表示了数据中最重要的信息。主成分分析(Principal Component Analysis,简称PCA)是一种常用的降维技术,用于将高维数据转化为低维数据的线性变换方法。PCA的优势在于可以去除冗余信息,减少特征维度,提高计算效率,并且保留了原始数据中的大部分重要信息。选择主成分:根据特征值的大小,选择最大的k个特征值对应的特征向量作为主成分。

Fanjufei的博客 306

机器学习:基于主成分分析(PCA)对数据降维

主成分分析算法(Principal Component Analysis, PCA)的目的是找到能用较少信息描述数据集的特征组合。它意在发现彼此之间没有相关性、能够描述数据集的特征,确切说这些特征的方差跟整体方差没有多大差距,这样的特征也被称为主成分。这也就意味着,借助这种方法,就能通过更少的特征捕获到数据集的大部分信息。

阿极的博客 1万+

【机器学习】--6.PCA主成分分析(降维)

设有m条n维数据。m*n矩阵。

我是个好人呀,O(∩_∩)O 7617

白话机器学习算法理论+实战之PCA降维

1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,比如我之前写过的一篇十大机器学习算法的小总结,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Adaboost等 无监督算法:聚类,降维,关联规则, PageRank等 为了详细的理解这些原理,曾经看过西瓜书,统计学习方法,机...

Miracle8070 5356

PCA主成分分析(PCA降维)

PCA(Principal Components Analysis,主成分分析),作为一种降维技术,使数据更易用于分析数据集建立数据模型。PCA是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k(k

褪色的博客 4986

find命令

命令是 Linux/Unix 系统中用于搜索文件和目录的强大工具,支持多种搜索条件组合,并能对搜索结果执行各种操作。以下是其详细说明、常用参数及示例: 搜索路径:指定起始目录(如 、 或 表示当前目录)。 查找条件:基于文件名、类型、大小、时间等属性过滤。 处理动作:对匹配结果执行操作(如打印、删除、执行命令等)。 常用参数及示例 1. 按名称查找 :区分大小写匹配文件名。 :不区分大小写匹配文件名。 2. 按文件类型查找 :指定文件类型。 文件类型: :普通文件 :目录 :符号链接

qiao2458的博客 1134

《遥感大模型生产级实战:从数据到决策的端到端AI工程》系列第三部分:城市洪涝灾害应急响应与评估平台实战-文章 14:项目二启动与多源异构数据对齐

我们将系统性地梳理城市洪涝场景下的所有关键数据源,从天上的卫星(光学与SAR)、空中的无人机,到地面的物联网传感器和社交媒体信息流,深入剖析每种数据在洪涝响应中的独特价值、获取方式与内在局限性。本章的核心将是一个详尽的、生产级的数据对齐技术全景,我们将分步解决三大核心对齐难题:空间对齐(将所有数据投影到统一的地理坐标系)、时间对齐(处理不同采样频率的时间序列)以及最困难的语义对齐(将文本描述与物理观测相关联)。

panshengwu的博客 2003

机器学习算法系列专栏:主成分分析(PCA)降维算法(初学者)

主成分分析(PCA)是一种无监督降维算法,通过线性变换将高维数据映射到低维空间。其核心思想是寻找方差最大的正交方向作为主成分,保留数据主要信息。PCA通过计算协方差矩阵的特征向量确定主成分方向,实现步骤包括:数据标准化、计算协方差矩阵、特征分解和降维映射。与随机森林等有监督学习不同,PCA不依赖标签信息,但降维后特征失去原有业务含义。应用案例展示了如何将PCA与逻辑回归结合:先对数据进行90%方差保留的降维处理,再构建分类模型。PCA能有效消除多重共线性,但解释性较差且要求特征为连续变量。

2301_79749195的博客 5562

基于STM32的电子琴音乐播放器设计

​ 本设计以实际电路为最后的结果,实现了所有与其功能,具有重要的现实意义。件,在Proteus中进行原理图绘制,然后把 .hex文件下载到STM32F103RBT6中 进行仿真。由于网络上 下载的 Proteus中 没有 STM32F103RBT6这个芯片型号,我们又从网上 下载芯片 进行仿真。​ 本设计以实际电路为最后的结果,实现了所有与其功能,具有重要的现实意义。

TMMXA的博客 2万+

机器学习:matlab和python实现PCA降维算法

概述 降维是机器学习中十分重要的一种思想。在机器学习中,我们会经常处理一些高维数据,而高维数据情形下,会出现距离计算困难,数据样本稀疏等问题。这类问题是所有机器学习方法共同面临的问题,我们也称之为“维度灾难”。在高维特征中,也容易出现特征之间存在线性相关,也就是说有的特征是冗余的,因此降维也是必要的。 降维的优点(必要性): 去除噪声 降低算法的计算开销(改善模型的性能) 使得数据更容易使用 使...

学无止境、积少成多、厚积薄发 4163

RabbitMQ的使用(JAVA)

Java快速上手的MQ上线!

.............. 1万+

windows中通过docker部署LocateAnything-3B模型

windows中通过docker部署LocateAnything-3B模型

yilvyangguang520的博客 485

[无监督学习] PCA降维

主成分分析( PCA ) 必主成分分析( Principal Component Analysis, PCA )是 最常用的一种降维方法,通常用于高维数据集的探索与 可视化,还可以用作数据压缩和预处理等。 心PCA可以把具有相关性的高维变量合成为线性无关的低 维变量,称为主成分。主成分能够尽可能保留原始数据 的信息。 主成分分析 在介绍PCA的原理之前需要回顾涉及到的相关术语; 心方差 心协方差 ...

ZhuNian的学习乐园 3394

从零开始学习CANoe(十六)—— Graphics

Graphics是一种以时间轴为横坐标,符号值为纵坐标的显示分析方法,相对于Trace来说,更直观的观察出信号的跳变

蚂蚁小兵 9191

机器学习之PCA降维

PCA降维算法是高维数据处理的利器,通过识别数据中的关键方差方向实现有效降维。文章详细讲解了PCA的数学原理,包括基变换、方差最大化、协方差矩阵对角化等核心概念,并提供了完整的计算案例。同时介绍了sklearn中PCA模块的参数配置和使用方法,通过信用卡欺诈检测案例展示了PCA与逻辑回归结合的实际应用流程。PCA能有效消除多重共线性、减少噪声,但也存在可解释性差等缺点,需根据具体场景谨慎使用参数配置。

m0_74977182的博客 1825

YOLOv11的嗅觉传感器数据关联-(特殊场景下的气味-视觉联合分析)

摘要 本文探讨了YOLOv11与嗅觉传感器融合的多模态感知技术。通过分析YOLOv11的架构特性与嗅觉传感器的数据特点,提出了三种融合策略:数据级、特征级和决策级融合。系统采用硬件同步方案实现时空对齐,包含视觉采集模块、嗅觉传感模块和边缘计算单元。环境配置基于Python 3.9和PyTorch 2.0,支持实时多模态数据处理。该技术可应用于环境监测、工业检测等场景,突破单一视觉感知的局限性。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 625

2、实时DSP编程技术及其应用

本文详细介绍了实时数字信号处理(DSP)技术及其应用,涵盖三种流行的浮点DSP处理器系列的特点、开发工具和优化方法。通过具体的应用实例,如语音压缩、音乐信号处理和雷达信号处理,展示了如何在实际项目中应用这些技术,帮助工程师提高系统的性能和可靠性。

cicd6pipeline的博客 839
上一篇: 机器学习算法/模型——朴素贝叶斯分类
下一篇: 机器学习模型/算法—— 阶段性总结(1)模型框架:假设函数、目标函数和优化算法
Robin_Pi
博客等级 码龄9年 2万+粉丝 632原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值