机器学习 | 降维问题

article/2025/9/14 2:43:33

目录

一、主成分分析

二、奇异值分解

2.1 奇异值分解原理

2.2 奇异值分解实践

三、特征值与特征向量


一、主成分分析

主成分有如下特征:

  • 每个主成分是原变量的线性组合;
  • 各个主成分之间互不相关;
  • 主成分按照方差贡献率从大到小依次排列;
  • 所有主成分的方差贡献率求和为1;
  • 提取后的主成分通常小于原始数据变量的数量;
  • 提取后的主成分尽可能地保留了原始变量中的大部分信息。

我们仍以经典的鸢尾花数据集对主成分分析进行介绍。

通过导入PCA进行主成分分析。

#导入库
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris#导入数据
data=load_iris()#主成分分析
model=PCA()
model.fit(data.data)#显示主成分信息
pd.DataFrame(model.transform(data.data),columns=["PC{}".format(x+1) for x in range(data.data.shape[1])])

 

上述结果给出了鸢尾花数据集的4个(全部)主成分,然而选择几个主成分需要进一步判断。这里可以通过计算主成分的累计贡献率进行判断,代码如下:

import matplotlib.ticker as ticker
import matplotlib.pyplot as plt
plt.gca().get_xaxis().set_major_locator(ticker.MaxNLocator(integer=True))
plt.plot([0]+list(np.cumsum(model.explained_variance_ratio_)),"-")
plt.xlabel("Number of principal componets")
plt.ylabel("Cumulative contribution rate")
plt.show()

 从上图可以看出,主成分从0~1时非常陡峭,而从1往后区域平缓,因此,针对4维鸢尾花数据,我们只需要保留1个主成分,即将原4维数据降维到现在的1维。

利用下面的代码,我们可以用更加量化的方式查看主成分累积贡献率。

model.explained_variance_ratio_

 结果显示,1个主成分就已经达到了92.46%,保留了原数据中绝大部分信息。

综上,主成分分析的全部代码如下:

#导入库
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris#导入数据
data=load_iris()#主成分分析
model=PCA()
model.fit(data.data)#显示主成分信息
pd.DataFrame(model.transform(data.data),columns=["PC{}".format(x+1) for x in range(data.data.shape[1])])#绘制主成分的累积贡献率的折线图
import matplotlib.ticker as ticker
import matplotlib.pyplot as plt
plt.gca().get_xaxis().set_major_locator(ticker.MaxNLocator(integer=True))
plt.plot([0]+list(np.cumsum(model.explained_variance_ratio_)),"-")
plt.xlabel("Number of principal componets")
plt.ylabel("Cumulative contribution rate")
plt.show()#量化主成分的累计贡献率
model.explained_variance_ratio_

二、奇异值分解

2.1 奇异值分解原理

奇异值分解(SVD)将一个任意矩阵进行分解,无须考虑特征值分解时需要矩阵是方阵的前提。

假设矩阵M是一个m\times n阶矩阵,则可以将其分解为下面的三个矩阵相乘:M=U\varepsilon V^{T}

其中:

  • U是m\times n阶正交矩阵,UU^{T}=II为单位矩阵;
  • V^{T}n\times n阶正交矩阵,VV^{T}=I
  • \varepsilonm \times m阶非负实数对角矩阵,\varepsilon =diag(\sigma _{1},\sigma _{2},...,\sigma _{n}),\sigma _{1}\geq \sigma _{2}\geq ...\geq \sigma _{n}

这种将矩阵M分解的方法就被称为奇异值分解,\varepsilon矩阵上对角线上的元素即为M的奇异值。

考虑一个m> n的任意矩阵,此时\varepsilon的秩为n,矩阵中不同深度的灰色表示奇异值大小不同,对角线上的奇异值(假设存在n个非零的奇异值)依次从大到小进行排列。在这种情况下,矩阵U的最后m-n列失去了意义。

因此可以做进一步的变化,此时m \times m阶的矩阵U变为m \times n阶的矩阵U_{1}m \times n阶的矩阵\varepsilon变为n \times n阶的矩阵\varepsilon_{1}

当我们取k<n,比如k=2时,即认为前两个奇异值占总奇异值之和的比例非常大,因此可以如下图进行运算,尽管此时M_{2}\neq M,但是由于删除的奇异值占比很小,我们可以认为M_{2}\approx M

2.2 奇异值分解实践

利用python可以很方便实现对矩阵的奇异值分解,例如对4 \times 5阶的矩阵M进行奇异值分解:

M=\begin{bmatrix} 1 & 0 & 0 & 0 & 2\\ 0& 0 & 3 &0 &0 \\ 0& 0 & 0 &0 &0 \\ 0&4 &0 &0 &0 \end{bmatrix}

 代码如下:

import numpy as np
M=np.array([[1,0,0,0,2],[0,0,3,0,0],[0,0,0,0,0],[0,4,0,0,0]])
U,Sigma,VT=np.linalg.svd(M)
print("U:",U)
print("Sigma:",Sigma)
print("VT:",VT)

 导入一张图片,下面的代码给出了地秩近似序列使用奇异值分解逼近的图片。

import numpy as np
import matplotlib.pyplot as plt
from PIL import Imager_max=300  #设置最大的秩
Pic="C:\\Users\\LEGION\\Pictures\\Saved Pictures\\暨大logo.png"image=Image.open(Pic).convert("L")
img_mat=np.asarray(image)U,s,V=np.linalg.svd(img_mat,full_matrices=True)
s=np.diag(s)for k in range(r_max+1):approx=U[:,:k] @ s[0:k,:k] @ V[:k,:]img=plt.imshow(approx,cmap='gray')plt.title("SVD approximation with degree of %d"%(k))plt.plot()plt.pause(0.001)plt.clf()

三、特征值与特征向量

利用python与Numpy库,很容易得到一个矩阵的特征值和特征向量。

import numpy as np
A=np.array([[1,2],[3,4]])
a,b=np.linalg.eig(A)
print("A的特征值为:\n",a)
print('A的特征向量为:\n',b)

 

通过np.lianlg.eig()函数得到的特征向量是已经标准化的向量, 即长度为1.改函数给出的特征值未按大小顺序排序。

除了特征值和特征向量外,协方差矩阵与相关系数矩阵也是降维分析中的重要概念。以鸢尾花的4个特征向量为例,协方差矩阵的每个元素是各个向量元素之间的协方差,相关系数矩阵的各元素是由各特征间的相关系数构成的。

import numpy as np
from sklearn.datasets import load_iris#导入数
data=load_iris()
X=data.dataCov_X=np.cov(X.T)  #求解协方差矩阵
Cor_X=np.corrcoef(X.T)  #求解相关系数矩阵print("协方差矩阵:\n",Cov_X)
print("相关系数矩阵:\n",Cor_X)

利用协方差矩阵和相关系数矩阵可以求解主成分。这里以利用协方差矩阵为例进行说明。

沿用上面的协方差矩阵数据,可以求得其特征值和特征向量:

import numpy as np
from sklearn.datasets import load_iris#导入数
data=load_iris()
X=data.dataCov_X=np.cov(X.T)  #求解协方差矩阵a,b=np.linalg.eig(Cov_X)
print("协方差矩阵的特征值为:\n",a)
print('协方差矩阵的特征向量为:\n',b)

协方差矩阵的特征值即为主成分的方差贡献率:

4.2282/(4.2282+0.2427+0.0782+0.0238)=0.9246

0.2427/(4.2282+0.2427+0.0782+0.0238)=0.05310.0782/(4.2282+0.2427+0.0782+0.0238)=0.01710.0238/(4.2282+0.2427+0.0782+0.0238)=0.0052

第一个主成分(解释方差)所占比例已经高达92.46%,说明已经可以在这个比例上解释原始数据信息,因此可以将鸢尾花数据从四维降至一维。第一主成分如下:

Y_{1}=0.3614\times(x_{1}-\bar{x}_{1})-0.0845\times(x_{2}-\bar{x}_{2})+0.8567\times(x_{3}-\bar{x}_{3})+0.3583\times(x_{4}-\bar{x}_{4})

其中,\bar{x}_{i}(i=1,2,3,4)表示该列特征的均值,等式右边的系数为协方差矩阵的特征向量的第一列(与第一个特征值相对应的数值)。 

除了协方差矩阵,相关系数矩阵也可以求解主成分。但是两种不同的求解方法结果通常会有一定的差别。此外,值得注意的是,如果对已经标准化的数据求协方差矩阵,实际上就是对原变量求相关系数矩阵。

在求解主成分时,如果变量间的单位不同,应该先将变量标准化后进行计算。否则由于单位不同导致的取值范围悬殊太大会影响最终的结果。


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

相关文章

数据降维方法总结

Introduce 经过这几天面试后&#xff0c;我发现数据降维这一块在工业界用的很多或者说必不可少&#xff0c;因此&#xff0c;这方面需要重点关注。今天&#xff0c;我将数据降维总结于此&#xff0c;包括他人成果&#xff0c;这里对他们的内容表示感谢。 Method 对数据降维作…

机器学习四大降维方法

引言&#xff1a; 机器学习领域中所谓的降维就是指采用某种映射方法&#xff0c;将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y&#xff0c;其中x是原始数据点的表达&#xff0c;目前最多使用向量表达形式。 y是数据点映射后的低维向…

机器学习降维方法概括

最近刷题看到特征降维相关试题&#xff0c;发现自己了解的真是太少啦&#xff0c;只知道最简单的降维方法&#xff0c;这里列出了常见的降维方法&#xff0c;有些算法并没有详细推导。特征降维方法包括&#xff1a;Lasso&#xff0c;PCA&#xff0c;小波分析&#xff0c;LDA&am…

详解机器学习高维数据降维方法

当特征选择完成后&#xff0c;可以直接训练模型了&#xff0c;但是可能由于特征矩阵过大&#xff0c;导致计算量大&#xff0c;训练时间长的问题&#xff0c;因此降低维度也是必不可少的。 常见的降维方法除了以上提到的基于 L1 惩罚项的模型以外&#xff0c;另外还有主成分分…

机器学习之降维

本周关于降维的学习主要分为五类&#xff1a;PCA、LDA、LLE、tSNE、ISOMAP 来进行学习 首先自己的任务是&#xff1a;tSNE的学习 &#xff08;一&#xff09;降维的基本知识点总结 1、降维方法分为线性和非线性降维&#xff0c;非线性降维又分为基于核函数和基于特征值的方…

四大机器学习降维方法

引言&#xff1a; 机器学习领域中所谓的降维就是指采用某种映射方法&#xff0c;将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y&#xff0c;其中x是原始数据点的表达&#xff0c;目前最多使用向量表达形式。 y是数据点映射后的低维向…

降维方法总结

目录 数据降维方法: 降维&#xff1a; 降维的用处&#xff1a; 降维方法思想分类&#xff1a; 降维方法总览 降维方法详细说明 1. 缺失值比率&#xff08;Missing Value Ratio&#xff09; 2. 低方差滤波&#xff08;Low Variance Filter&#xff09; 3. 高相关…

数据分析七种降维方法

近来由于数据记录和属性规模的急剧增长&#xff0c;大数据处理平台和并行数据分析算法也随之出现。于此同时&#xff0c;这也推动了数据降维处理的应用。实际上&#xff0c;数据量有时过犹不及。有时在数据分析应用中大量的数据反而会产生更坏的性能。 最新的一个例子是采用 20…

12种降维方法及python实现

你遇到过特征超过1000个的数据集吗&#xff1f;超过5万个的呢&#xff1f;我遇到过。降维是一个非常具有挑战性的任务&#xff0c;尤其是当你不知道该从哪里开始的时候。拥有这么多变量既是一个恩惠——数据量越大&#xff0c;分析结果越可信&#xff1b;也是一种诅咒——你真的…

特征降维方法

关于降维的学习主要分为五类&#xff1a;PCA、LDA、LLE、tSNE、ISOMAP &#xff08;一&#xff09;降维的基本知识点总结 1、降维方法分为线性和非线性降维&#xff0c;非线性降维又分为基于核函数和基于特征值的方法。 &#xff08;1&#xff09;线性降维&#xff1a;PCA、…

四大降维方法

PCA和LDA之间的区别 从主观的理解上&#xff0c;主成分分析到底是什么&#xff1f;它其实是对数据在高维空间下的一个投影转换&#xff0c;通过一定的投影规则将原来从一个角度看到的多个维度映射成较少的维度。到底什么是映射&#xff0c;下面的图就可以很好地解释这个问题—…

数据降维方法小结

数据的形式是多种多样的&#xff0c;维度也是各不相同的&#xff0c;当实际问题中遇到很高的维度时&#xff0c;如何给他降到较低的维度上&#xff1f;前文提到进行属性选择&#xff0c;当然这是一种很好的方法&#xff0c;这里另外提供一种从高维特征空间向低纬特征空间映射的…

12种降维方法终极指南

来源&#xff1a;Analytics Vidhya 编译&#xff1a;Bot 授权自 论智 你遇到过特征超过1000个的数据集吗&#xff1f;超过5万个的呢&#xff1f;我遇到过。降维是一个非常具有挑战性的任务&#xff0c;尤其是当你不知道该从哪里开始的时候。拥有这么多变量既是一个恩惠——数据…

12种降维方法终极指南(含Python代码)

12种降维方法终极指南&#xff08;含Python代码&#xff09; 你遇到过特征超过1000个的数据集吗&#xff1f;超过5万个的呢&#xff1f;我遇到过。降维是一个非常具有挑战性的任务&#xff0c;尤其是当你不知道该从哪里开始的时候。拥有这么多变量既是一个恩惠——数据量越大&…

七种降维方法

近来由于数据记录和属性规模的急剧增长&#xff0c;大数据处理平台和并行数据分析算法也随之出现。于此同时&#xff0c;这也推动了数据降维处理的应用。实际上&#xff0c;数据量有时过犹不及。有时在数据分析应用中大量的数据反而会产生更坏的性能。 最新的一个例子是采用 20…

【数据降维】数据降维方法分类

数据降维基本原理是将样本点从输入空间通过线性或非线性变换映射到一个低维空间&#xff0c;从而获得一个关于原数据集紧致的低维表示。 数据降维工具箱drtoolbox中众多算法&#xff0c;这里简单做个分类。 因为很多并没有仔细了解&#xff0c;在此次只对八种方法做分类&…

机器学习之降维方法总结

降维方法分为线性降维方法和非线性降维方法&#xff0c;看下表&#xff1a;本文结构如下&#xff1a; 线性降维方法主成分分析法线性判别法奇异值分解法因子分析法非线性降维方法&#xff5e;&#xff5e;流形学习简介 说到维度&#xff0c;其目的是用来进行特征选择和特征提取…

常见的降维方法(PCA,SVD)

1、PCA降维&#xff08;主成分分析&#xff09; PCA降维就是去除线性相关&#xff0c;使得最后剩余的属性维度全都线性无关。 其实&#xff1a;PCA降维不仅是去除先线性无关&#xff0c;还可以过滤掉小特征值对应的特征向量。因为特征值变化小&#xff0c;对应的特征向量变化…

看!数据分析领域中最为人称道的七种降维方法

http://dataunion.org/20803.html 感谢王穆荣的投稿&#xff0c;转载请注明出处&#xff1a;数盟社区 近来由于数据记录和属性规模的急剧增长&#xff0c;大数据处理平台和并行数据分析算法也随之出现。于此同时&#xff0c;这也推动了数据降维处理的应用。实际上&#xff0…

数据降维的几种常见方法(PCA;FA;LDA;ICA等)

文章目录 数据降维方式简述PCA与ICA、FA、LDA的区别与联系1.PCA与ICA的联系与区别2.PCA与LDA的联系与区别3.PCA与FA的联系与区别 总结 数据降维方式简述 在学习ICA算法的过程中&#xff0c;了解到常常需要对数据进行降维&#xff0c;如PCA&#xff0c;FA等&#xff0c;以达到数…