数据分析-降维-PCA-LDA-LLE

article/2025/10/14 5:44:32

目录

前言

矩阵分解法

主成分分析(PCA)

核PCA 

非负矩阵分解(NMF)

FactorAnalysis

独立主成分分析(ICA)

判别分析法(LDA)

基于流形学习的数据降维方法

LLE

 MDS

 MDS实现

t-SNE


前言

降维指采用某种映射方法,将高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : w->v,其中w是原始数据点的表达,目前最多使用向量表达形式。 v是数据点映射后的低维向量表达,通常v的维度小于w的维度。
原始数据在采集时可能包含了很高的维度,降维可以降低时间复杂度和空间复杂度,节省了开销;去掉数据集中夹杂的噪声,提高模型的泛化性能;降维使得模型具有更强的鲁棒性;也可以更好的解释数据,更好的可视化。

Sklearn中降维的方法主要分布在以下三个模块:
sklearn.decomposition:包含了绝大部分的矩阵分解算法,其中包括PCA、核PCA、NMF或ICA等
decomposition.PCA    主成分分析(PCA)
decomposition.NMF    非负矩阵分解(NMF)
decomposition.FastICA    独立主成分分析(ICA)
decomposition.FactorAnalysis    因子分析
decomposition.KernelPCA    核PCA

sklearn.discriminant_analysis:包含了LDA和QDA两种判别分析方法
discriminant_analysis.LinearDiscriminantAnalysis    线性判别分析(LDA)
discriminant_analysis.QuadraticDiscriminantAnalysis    二次判别分析(QDA)(非降维)

sklearn.manifold:包含了基于流形学习的数据降维方法等
manifold.LocallyLinearEmbedding    局部线性嵌入(LLE)
manifold.MDS    多维尺度变换(MDS)
manifold.TSNE    t分布随机邻域嵌入(t-SNE)
manifold.Isomap    等度量映射(Isomap)

矩阵分解法

主成分分析(PCA)

构造原始特征的一系列线性组合形成低维的特征,以去除数据的相关性,并使降维后的数据最大程度地保持原始高维数据的方差信息。

如下图,将二维空间的点变到一维空间。

 

 实现 decomposition.PCA    

# PCA降维
from sklearn.decomposition import PCA
pca = PCA(n_components=5)
# 训练集训练
pca.fit(X_train)
# 训练集降维
X_train_pca = pca.transform(X_train)
## 测试集降维
X_test_pca = pca.transform(X_test)
# 查看方差贡献率
print(sum(pca.explained_variance_ratio_))
# 查看方差贡献值
print(sum(pca.explained_variance_))

核PCA 

Non-linear dimensionality reduction through the use of kernels

对于输入空间(Input space)中的矩阵X,我们先用一个非线性映射(由核函数确定)把X中的所有样本映射到一个高维甚至是无穷维的空间(称为特征空间,Feature space),使其线性可分,然后在这个高维空间进行PCA降维。

实现 decomposition.KernelPCA    

from sklearn.decomposition import KernelPCA
kpca = KernelPCA(n_components=3,kernel="sigmoid",random_state=10)
X_kpca = kpca.fit_transform(X)'''
KernelPCA(n_components=None,*,kernel='linear',gamma=None,degree=3,coef0=1,kernel_params=None,alpha=1.0,fit_inverse_transform=False,eigen_solver='auto',tol=0,max_iter=None,remove_zero_eig=False,random_state=None,copy_X=True,n_jobs=None,
)
'''


非负矩阵分解(NMF)

decomposition.NMF    

非负矩阵分解(Non-negative Matrix Factorization)

一种主成分分析的方法,要求数据和成分都要非负,对图像数据十分有效

NMF希望找到两个矩阵𝐖和𝐇,使得𝐖𝐇与原数据𝐗的误差尽可能的少,即:

其中表示Frobenius范数,X代表N×p的数据矩阵,W是N×r的基矩阵, 𝐇𝑝r×p的权重矩阵, 𝑟r≤max⁡(N,p),其中XWH都是非负矩阵

 加入正则化项,

其中,α𝑙1𝑙2正则化项的参数,而𝜌𝑙1正则化项占总正则化项的比例。

加入正则化项后,常用的拟牛顿法和梯度下降法并不适用,Sklearn中采用坐标轴下降法进行优化。

nmf = NMF(n_components=6, init='nndsvda', random_state=10)
nmf.fit(faces)
faces_nmf = nmf.components_# 还原图像
plot_gallery("NMF Faces", faces_nmf[:6])

FactorAnalysis

A simple linear generative model with Gaussian latent variables.The observations are assumed to be caused by a linear transformation of
lower dimensional latent factors and added Gaussian noise.
Without loss of generality the factors are distributed according to a
Gaussian with zero mean and unit covariance. The noise is also zero mean
and has an arbitrary diagonal covariance matrix.
from sklearn.decomposition import FactorAnalysis
Fa = FactorAnalysis(n_components=3,random_state=0)
Fa.fit_transform(X)
'''
FactorAnalysis(n_components=None,*,tol=0.01,copy=True,max_iter=1000,noise_variance_init=None,svd_method='randomized',iterated_power=3,rotation=None,random_state=0,
)
'''

独立主成分分析(ICA)

ICA认为观测信号是若干个统计独立的分量的线性组合,ICA要做的是一个解混过程。而PCA是一个信息提取的过程,将原始数据降维,目前已成为ICA将数据标准化的预处理步骤。

FastICA:a fast algorithm for Independent Component Analysis.
from sklearn.decomposition import FastICA
ica = FastICA(n_components=3, random_state=10)
X_pca = ica.fit_transform(X)
'''
FastICA(n_components=None,*,algorithm='parallel',whiten=True,fun='logcosh',fun_args=None,max_iter=200,tol=0.0001,w_init=None,random_state=None,
)
'''

判别分析法(LDA)

线性判别分析(Linear Discriminant Analysis, LDA)是一种典型的有监督线性降维方法。

LDA的目标是利用样本的类别标签信息,找到一个利于数据分类的线性低维表示。

这个目标可以从两个角度来量化

第一个角度是使得降维后相同类样本尽可能近,使用类内离散度 (within-class scatter)度量

第二个角度是使得降维后不同类样本尽可能远,使用类间离散度 (between-class scatter)度量

下图展示原始样本分为两类并用不同图形表示

利用PCA方法,将得到直线𝑎,可见降维后的两类数据无法很好区分

利用LDA方法,能够找到直线𝑏,使得降维后两类数据很好地被区分开

 

 实现

# 训练模型并评估模型
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)
lda.fit(X_train, y_train)
y_pred = lda.predict(X_test)
lda.score(X_test, y_test)
# 输出方差贡献率
print(sum(lda.explained_variance_ratio_))

基于流形学习的数据降维方法

LLE

流形:一个低维空间在一个高维空间中被扭曲之后的结果,低维流形嵌入在高维空间中

形象解释:“二维平面的一块布,把它扭一扭在三维空间中就变成了一个流形”

样本在高维空间分布复杂,但在局部上具有欧式空间的性质

在局部建立降维映射关系,再由局部推广到全局

数据被降至2维或3维,方便进行可视化

将数据降到低维空间中,但是保留数据局部的线性关系

每一个样本点可以写成其 𝑘 个近邻点的线性组合,从高维嵌入(embedding)到低维时尽量保持局部的线性关系

 

 

 LLE实现

from sklearn.manifold import LocallyLinearEmbedding
# 设置不同近邻数
n_neighbors = [5, 10, 15, 20, 50, 80] 
# 降至2维
n_components = 2
fig = plt.figure(figsize=(20, 8))
for i, number in enumerate(n_neighbors):# LLE进行降维Y = LocallyLinearEmbedding(n_neighbors=number, n_components=n_components, random_state=10).fit_transform(X)# 绘图ax = fig.add_subplot(231 + i)plt.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral)plt.title("n_neighbors = %s" % (number))

# 设置不同的算法
methods = ['standard', 'ltsa', 'hessian', 'modified']
fig = plt.figure(figsize=(20, 5))
for i, methods in enumerate(methods):# LLE进行降维,近邻数固定为50Y = LocallyLinearEmbedding(n_neighbors=50, n_components=n_components, method=methods, random_state=10).fit_transform(X)# 绘图ax = fig.add_subplot(141 + i)plt.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral)plt.title("method = %s" % (methods))

 MDS

 多维尺度变换(Multi-dimensional ScalingMDS)的目标是找到数据的低维表示,使得降维前后样本之间的相似度信息尽量得以保留

多维尺度变换能够只利用样本间的距离信息,找到每一个样本的特征表示,且在该特征表示下样本的距离与原始的距离尽量接近

假设数据集包含n个样本,数据集用n×p的矩阵𝐗表示,样本i能够使用一个p维的特征向量x_i表示,样本间距离矩阵可以用n×n的矩阵𝐃D表示,其元素d_ij表示样本i和样本j的距离假设z_i为样本x_i在低维空间的表示,即样本和样本的欧式距离。

MDS的优化目标为

 

 

 MDS实现

from sklearn.manifold import MDS
## 使用MDS降维并得到降维结果
mds = MDS(n_components, random_state=10)
Y = mds.fit_transform(X)
## 降维可视化
plt.figure(figsize=(8, 6))
plt.scatter(Y[:, 0], Y[:, 1], c=color, cmap=plt.cm.Spectral)
plt.title("MDS") 

t-SNE

t-distributed Stochastic Neighbor Embedding.

t-SNE  is a tool to visualize high-dimensional data. It converts similarities between data points to joint probabilities and tries to minimize the Kullback-Leibler divergence between the joint probabilities

of the low-dimensional embedding and the
high-dimensional data. t-SNE has a cost function that is not convex,
i.e. with different initializations we can get different results.

It is highly recommended to use another dimensionality reduction
method (e.g. PCA for dense data or TruncatedSVD for sparse data)
to reduce the number of dimensions to a reasonable amount (e.g. 50)
if the number of features is very high. This will suppress some
noise and speed up the computation of pairwise distances between
samples. For more tips see Laurens van der Maaten's FAQ [2].

from sklearn.manifold import TSNE
tsne = TSNE(n_components=3,random_state=0)
X_tsne = tsne.fit_transform(X)
'''
TSNE(n_components=2,*,perplexity=30.0,early_exaggeration=12.0,learning_rate=200.0,n_iter=1000,n_iter_without_progress=300,min_grad_norm=1e-07,metric='euclidean',init='random',verbose=0,random_state=None,method='barnes_hut',angle=0.5,n_jobs=None,square_distances='legacy',
)'''

待完善...

参考文献

......


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

相关文章

对人脸数据集,采用PCA,KPCA,MDS,LLE,ISOMAPE五种方式降维 ---模式识别课程设计

对人脸数据集“Labeled Faces in the Wild”:sklearn.datasets.fetch_lfw_people,下载地址aka LFW:http://vis-www.cs.umass.edu/lfw/lfw-funneled.tgz, 采用PCA,KPCA,MDS,LLE,ISOMAPE五种方式降维,比较基于SVM或决策树等分类器的…

LLE算法实现与sklearn实现

在pyhton的机器学习库sklearn中,LLE等降维算法可以直接调用,在本次大作业中,根据LLE的推导过程编写算法实现了LLE,与mainfold自带的LLE进行对比。由于后面的实验中都是直接调用LocallyLinearEmbedding,所以用大量篇幅介…

一句话总结LLE(流形学习)

一句话总结LLE(流形学习) 核心:用一个样本点的邻居的线性组合近似重构这个样本,将样本投影到低维空间中后依然保持这种线性组合关系。 局部线性嵌入(简称LLE)将高维数据投影到低维空间中,并保持…

流行学习一LLE_机器学习

前言: 流行学习主要用于聚类,分类和回归算法,例如人脸识别(旋转不变性,光照不变性) 流行是几何中一个概念,它是高维空间中的几何结构,即高维空间中点构成的集合。 简单的理解为二维空间的曲线&a…

lle算法c 语言,局部线性嵌入算法(LLE)与其Python实现-Go语言中文社区

PCA是至今为止运用最为广泛的数据降维算法,它通过最小化重构误差达到将高维数据映射到低维并同时保留数据中所存在的绝大部分信息。但是一般的PCA也有缺点,它只能实现线性降维。当然现在也有kernel PCA可以实现非线性降维,但我们今天介绍的是…

LLE降维

LLE 是 Locally Linear embedding 直观是在样本点的高维空间相邻近的话,可以用低维的子空间描述。 基本原理分三步: (1) 找到邻居 neighbors .(可以使用多种方法,邻居K的数目选择影响很大) (2&#xff09…

局部线性嵌入LLE

[1]https://www.cnblogs.com/pinard/p/6266408.html [2]Graph Embedding Techniques, Applications, and Performance: A Survey 主要参考和图片来源[1] LLE推导算法流程 局部线性嵌入(Locally Linear Embedding,LLE),一种重要降维方法,与PCA、LDA相比…

LLE降维算法

欢迎关注”生信修炼手册”! 流形分析作为非线性降维的一个分支,拥有多种算法,常见的算法列表如下 流形分析的要点在于降维之后,仍然保留流形中的某些几何属性。之前介绍的isomap保留了测地距离这一几何属性,由于考虑的是全局关系&…

LLE算法

Locally linear embedding (LLE) (Sam T.Roweis and Lawrence K.Saul, 2000)以及Supervised locally linear embedding (SLLE) (Dick and Robert, 2002) 是最近提出的非线性降维方法,它能够使降维后的数据保持原有拓扑结构。 LLE算法可以有图1所示的一个例子来描述。…

LLE原理总结

原文: https://www.cnblogs.com/pinard/p/6266408.html?utm_sourceitdadao&utm_mediumreferral 局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维方法。和传统的PCA,LDA等关注样本方差的降维方法相比,…

LLE原理及推导过程

1.概述 所谓LLE(局部线性嵌入)即”Locally Linear Embedding”的降维算法,在处理所谓流形降维的时候,效果比PCA要好很多。 首先,所谓流形,我们脑海里最直观的印象就是Swiss roll,在吃它的时候喜欢把它整个摊开成一张饼再吃,其实这个过程就实现了对瑞士卷的降维操作…

LLE理解

背景 局部线性嵌入(Locally Linear Embedding,以下简称LLE)是一种降维方法。和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征,由于LLE在降维时保持了样本的局部特征,它广泛的用于…

局部线性嵌入(LLE)原理总结

局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维方法。和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征,由于LLE在降维时保持了样本的局部特征,它广泛的用于图像图像识别,高维数据可视化等领域。下面我们就对…

机器学习之:LLE (locally linear embedding) 局部线性嵌入降维算法

文章目录 LLE1. LLE 是什么2. LLE 的主要思想3. LLE 算法推导过程3.1 如何找到 k 个近邻3.2 找 x i x_i xi​ 与这 k 个近邻的线性关系3.3 x i x_i xi​ 与 k 个近邻点的线性关系求解过程3.3.1 奇异值分解3.3.1.1 特征值分解 (EVD)3.3.1.2 奇异值分解&…

安装HAXM

老师给的是在网上下载HAXM。但事实上打开这里你会发现Android 已经自动下载了HAXM 因此你要做的是找到HAXM路径,然后继续安装它。我的路径是 C:\Users\DELL\AppData\Local\Android\Sdk\extras\intel\Hardware_Accelerated_Execution_Manager

Intel x86 Emulator Accelerator(HAXM installer)无法安装

在sdk manager中Intel x86 Emulator Accelerator(HAXM installer)后面显示 NOT compatible with windows 这个时候可以尝试手动安装Intel x86 Emulator Accelerator(HAXM installer) 1、在网上下载后,https://software.intel.com/en-us/articles/intel-hardware-a…

haxm intel庐_Android Studio中Intel HAXM的那些坑

最近用过两台电脑折腾Android Studio,都是windows的系统,不知道为什么连着踩了两个坑。 第一台我结束了qemu-system-i386.exe这个倒霉的进程 导致我开启模拟器的时候一直提示我没有安装Intel HAXM,没办法咯,只好再安装一遍&#x…

AMD CPU无法安装Intel HAXM解决方法

步骤1. 步骤2. 找到安装目录(我的安装目录:D:\Android\SDK\extras\google\Android_Emulator_Hypervisor_Driver)下的这个文件:silent_install,右击该文件选择“以管理员运行”,即可。

Android Studio 如何 安装 HAXM

Android Studio 如何 安装 HAXM 打开 Android Stutio打开设置搜索 Android,定位到 Android SDK切换到 SKD Tools 标签,然后点选下面的 Intel x86 Emulator Eccelerator(HAXM installer),之后 Apply 应用,编辑器就会自动下载这个东…

HAXM installation failed. To install HAXM follow the instructions found at

AMD处理器 在控制面板中打开虚拟机平台,重启电脑