【sklearn驯化-降维】一文搞懂机器学习中的降维技术PCA、LDA用法
本次修炼方法请往下查看
🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站
🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验。
🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100% 。
📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。
下滑查看解决方法
🎯 1. 基本介绍
在机器学习领域,降维是一种常用的技术,用于减少数据集中的特征数量,从而简化模型、提高计算效率,并有助于避免过拟合。两种常见的降维技术是主成分分析(PCA)和线性判别分析(LDA)。
- PCA:是一种无监督学习方法,通过正交变换将数据转换到新的坐标系,使得数据的任何投影的方差最大化。
- LDA:是一种监督学习方法,不仅考虑了数据的方差,还考虑了数据的类别信息,以实现类别之间的最佳分离。
降维就是提取数据中比较重要的,对于降维的思想以结果的好坏可以有两种解释,第一种解释是样本点到这个直线的距离足够近,第二种解释是样本点在这个直线上的投影能尽可能的分开。
对于距离来说就是点到降维平面的距离尽可能的小则效果比较好,而对于投影尽可能的分开就是投影后方差尽可能的大
💡 2. 使用方法
2.1 pca降维知识总结
- pca仅仅需要以方差衡量信息量,不受数据集以外的因素影响
- pca各主成分之间正交,可消除原始数据成分间的相互影响的因素
- pca计算方法简单,主要运算是特征值分解,易于实现。
- pca主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
- pca方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响
- 在PCA算法中,我们假设存在一个线性的超平面,可以让我们对数据进行投影。但是有些时候,数据不是线性的,不能直接进行PCA降维。这里就需要用到和支持向量机一样的核函数的思想,先把数据集从n维映射到线性可分的高维在进行pca算法,这个就叫做KPCA算法
- 下面我们看看具体的算法流程。
- 输入:n维样本集 D = ( x ( 1 ) , x ( 2 ) , . . . , x ( m ) ) D=(x^{(1)},x^{(2)},...,x^{(m)}) D=(x(1),x(2),...,x(m)),要降维到的维数n’.
- 输出:降维后的样本集D′
- 对所有的样本进行中心化: x ( i ) = x ( i ) − 1 m ∑ j = 1 m x ( j ) x^{(i)}=x^{(i)}−\frac{1}{m}\sum_{j=1}^{m}x^{(j)} x(i)=x(i)−m1∑j=1mx(j)
- 计算样本的协方差矩阵XXT
- 对矩阵XXT进行特征值分解
- 取出最大的n’个特征值对应的特征向量 ( w 1 , w 2 , . . . , w n ′ ) (w_1,w_2,...,w_{n′}) (w1,w2,...,wn′), 将所有的特征向量标准化后,组成特征向量矩阵W。
- 对样本集中的每一个样本 x ( i ) x^{(i)} x(i),转化为新的样本 z ( i ) = W T x ( i ) z^{(i)}=W^Tx^{(i)} z(i)=WTx(i)
- 得到输出样本集 D ′ = ( z ( 1 ) , z ( 2 ) , . . . , z ( m ) ) D^{'}=(z^{(1)},z^{(2)},...,z^{(m)}) D′=(z(1),z(2),...,z(m))
- 有时候,我们不指定降维后的n’的值,而是换种方式,指定一个降维到的主成分比重阈值t。这个阈值t在(0,1]之间。假如我们的n个特征值为 λ 1 ≥ λ 2 ≥ . . . ≥ λ n λ_1≥λ_2≥...≥λ_n λ1≥λ2≥...≥λn,则n’可以通过下式得到:
∑ i = 1 n ′ λ i ∑ i = 1 n λ i ⩾ t \frac{\sum_{i=1}^{n'}\lambda_i}{\sum_{i=1}^{n}\lambda_i} \geqslant t ∑i=1nλi∑i=1n′λi⩾t
相关的代码实践如下所示:
import numpy as np
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
from sklearn.datasets import make_classification
# 创建一个具有类别标签的二维数据集
X, y = make_classification(n_features=2, n_redundant=0, n_informative=2,
n_clusters_per_class=1, n_classes=3, random_state=42)
# 初始化 PCA 对象并拟合数据
pca = PCA(n_components=1)
X_pca = pca.fit_transform(X)
print("PCA 降维后的数据:\n", X_pca)
PCA 降维后的数据:
[[-1.57061628]
[-1.57061628]
...
[ 1.57061628]]
2.2 LDA知识总结使用
LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的,这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”,如下图所示。 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。
相关理论知识推导:
- 输入:数据集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( ( x m , y m ) ) D={(x_1,y_1),(x_2,y_2),...,((x_m,y_m))} D=(x1,y1),(x2,y2),...,((xm,ym)),其中任意样本 x i x_i xi为n维向量, y i ∈ C 1 , C 2 , . . . , C k y_i\in{C_1,C_2,...,C_k} yi∈C1,C2,...,Ck,降维到的维度d。
- 输出:降维后的样本集 D ′ D′ D′
- 计算类内散度矩阵 S w S_w Sw
- 计算类间散度矩阵 S b S_b Sb
- 计算矩阵 S w − 1 S b S^{−1}_wS_b Sw−1Sb, 其实这一步就是通过广义熵原理推导过来的
- 计算 S w − 1 S b S^{−1}_wS_b Sw−1Sb的最大的d个特征值和对应的d个特征向量 ( w 1 , w 2 , . . . w d ) (w_1,w_2,...w_d) (w1,w2,...wd),得到投影矩阵WW
- 对样本集中的每一个样本特征 x i x_i xi,转化为新的样本 z i = W T x i z_i=W^Tx_i zi=WTxi
- 得到输出样本集 D ′ = ( z 1 , y 1 ) , ( z 2 , y 2 ) , . . . , ( ( z m , y m ) ) D′={(z_1,y_1),(z_2,y_2),...,((z_m,y_m))} D′=(z1,y1),(z2,y2),...,((zm,ym))
# 初始化 LDA 对象并拟合数据
lda = LDA(n_components=1)
X_lda = lda.fit_transform(X, y)
print("LDA 降维后的数据:\n", X_lda)
LDA 降维后的数据:
[[ 0.40808208]
[-0.40808208]
...
[-0.40808208]]
🔍 3. LDA和PCA之间的区别
- LDA用于降维,和PCA有很多相同,也有很多不同的地方,因此值得好好的比较一下两者的降维异同点。
- 两者均可以对数据进行降维。
- 两者在降维时均使用了矩阵特征分解的思想。
- 两者都假设数据符合高斯分布。
- LDA是有监督的降维方法,而PCA是无监督的降维方法
- LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。
- LDA除了可以用于降维,还可以用于分类。
- LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。
🔍 4. 注意事项
二中降维技术在机器学习的处理中都是使用特别广泛的,但是在使用的过程中需要注意一些细节,具体如下所示:
- PCA 是一种无监督方法,不考虑标签信息,适合于探索性数据分析和去噪。
- LDA 是一种监督方法,适合于分类问题,特别是当类别是线性可分的。
- 降维后的解释性可能会降低,特别是当使用 PCA 时,因为主成分通常不对应于原始数据的实际特征。
- 在选择降维技术时,应考虑数据的特性和分析的目标。
🔧 5. 总结
本文介绍了两种常用的降维技术:PCA 和 LDA。通过实际的代码示例和输出结果,我们可以看到它们如何应用于数据集。PCA 通过最大化方差进行降维,而 LDA 同时考虑了方差和类别信息。降维技术不仅可以减少数据的复杂性,还可以提高机器学习模型的性能。希望这篇博客能够帮助你更好地理解并应用这些降维技术。。