PCA和LDA都可以看成是数据降维的一种方式。但是PCA是unsupervised,也就是说不需要知道sample对应的label,而LDA是supervised,需要知道每一个数据点对应的label。
1 主成分分析(PCA)
主成分分析(PCA)是一种多变量统计方法,它是最常用的降维方法之一,通过正交变换将一组可能存在相关性的变量数据转换为一组线性不相关的变量,转换后的变量被称为主成分
可以使用两种方法进行PCA,分别是特征分解或奇异值分解(SVD)。PCA旨在找到数据中的主成分,并利用这些主成分表征原始数据,从而达到降维的目的。
说说PCA的优缺点
优点
仅仅需要以方差衡量信息量,不受数据集以外的因素影响
各主成分之间正交,可消除原始数据成分间的相互影响的因素
计算方法简单,主要运算是特征值分解,易于实现
缺点
主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强
方差小的非主成分也可能含有对样本差异的重要信息,因此降维丢弃可能对后续数据处理有影响
PCA属于有损压缩。
PCA通过计算数据的协方差矩阵,进而对数据进行降维和特征提取。在数据处理和机器学习领域,主成分分析(PCA)是一种广泛使用的技术,旨在通过降维的方式,从高维数据中提取关键特征,同时尽可能保持原数据的主要信息。这一过程涉及到协方差矩阵的计算,它为理解数据的特征之间关系提供了基础。
PCA的基础在于理解协方差矩阵的重要性。一个数据集的协方差矩阵能够表达不同维度间的相关性,其中对角线上的元素代表各维度的方差,而其它元素则表示不同维度间的协方差。计算协方差矩阵通常包括以下步骤,首先对样本矩阵进行中心化处理,即每一维度减去该维度的均值;其次,用中心化后的样本矩阵乘以其转置;最后,除以样本数量减一以得到协方差矩阵。
PCA的实质是对协方差矩阵进行谱分解,从而找到数据中的主成分,即那些能最大程度解释数据变异性的方向。这些方向由协方差矩阵的特征值和特征向量确定,它们分别代表了成分的重要性和方向。特征向量构成的新坐标系是原始数据在该空间的投影,这样做可以最大化投影后方差,从而保留尽量多的信息。
在进行PCA时,还需要注意主成分的选择问题。选取多少个主成分以及如何评估一个主成分所能解释的数据变化大小是PCA应用中的关键考量。通常情况下,会选取那些特征值之和占所有特征值总和一定比例(如85%)的主成分。这种策略既保证了信息的压缩,又尽量减少了信息的丢失。
特征值和特征向量是PCA算法中核心的计算对象,它们决定了数据降维后的主成分方向和大小。
在主成分分析(PCA)中,特征值和特征向量不仅起着至关重要的作用,它们的计算是整个算法的核心。特征值和特征向量分别表示了数据在不同方向上的方差大小和这些方向本身。通过对协方差矩阵进行数学分解,可以得到这些特征值和对应的特征向量,从而构建出一个新的低维数据空间,该空间能够尽可能保留原始数据的主要信息。
首先,PCA的目标是寻找一个低维的数据表示,同时尽可能保留原始数据的变异性。这一目标是通过计算数据协方差矩阵的特征值和特征向量来实现的。特征值表示对应特征向量方向上的方差大小,而特征向量则定义了数据的新坐标系。
其次,特征值越大,意味着对应的特征向量方向上的方差越大,这个方向上的数据变化就更加明显。因此,PCA通过保留最大的几个特征值对应的特征向量来近似表示原数据,从而达到降维的目的。
最后,在实际应用中,计算得到的特征向量需要被标准化后,用于构建投影矩阵。通过将原始数据投影到这个由特征向量构成的新空间中,每个数据点就可以用更少的维度来表示,从而实现了数据的降维和噪声剔除。
一个将数据变换到新坐标系统中的线性变换,使得任何数据投影的第一大方差在第一个坐标(第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。
PCA主要目的是为让映射后得到的向量具有最大的不相关性。详细地讲就是PCA追求的是在降维之后能够最大化保持数据的内在信息,并通过衡量在投影方向上的数据方差的大小来衡量该方法的重要性。
2 线性判别分析(LDA)
线性判别分析是一种基于有监督学习的降维方式, 将数据集在低维度的空间进行投影,要使得投影后的同类别的数据点间的距离尽可能的靠近,而不同类别间的数据点的距离尽可能的远
LDA的中心思想是什么
最大化类间距离和最小化类内距离
LDA的优缺点
优点
在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识
LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优
缺点
LDA不适合对非高斯分布样本进行降维,PCA也有这个问题
LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。
LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好
LDA可能过度拟合数据
PCA与LDA的比较
目标不同:PCA是无监督的,目标是最大化数据的方差;LDA是有监督的,目标是最大化类间方差和最小化类内方差。
应用场景不同:PCA主要用于数据压缩、数据可视化和噪声去除;LDA主要用于分类问题和特征提取。
假设条件不同:PCA没有假设数据的分布;LDA假设数据服从高斯分布,且各类别的协方差矩阵相同。
实践案例
以下是使用Python的scikit-learn库进行PCA和LDA的简单实践案例。
PCA实践案例
python复制代码
from sklearn.decomposition import PCA from sklearn.datasets import load_iris import matplotlib.pyplot as plt # 加载鸢尾花数据集
iris = load_iris() X, y = iris.data, iris.target # 进行PCA降维
pca = PCA(n_components=2) X_pca = pca.fit_transform(X) # 可视化降维后的数据 plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis') plt.xlabel('Principal Component 1') plt.ylabel('Principal Component 2') plt.title('PCA of Iris Dataset') plt.show()
LDA实践案例
python复制代码
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA from sklearn.datasets import load_iris import matplotlib.pyplot as plt # 加载鸢尾花数据集
iris = load_iris() X, y = iris.data, iris.target # 进行LDA降维
lda = LDA(n_components=2) X_lda = lda.fit_transform(X, y) # 可视化降维后的数据
plt.scatter(X_lda[:, 0], X_lda[:, 1], c=y, cmap='viridis') plt.xlabel('Linear Discriminant 1') plt.ylabel('Linear Discriminant 2') plt.title('LDA of Iris Dataset') plt.show()
使用PCA和LDA对鸢尾花数据集进行降维处理
phython复制代码
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.preprocessing import StandardScaler
iris = load_iris()
X =iris.data
Y =iris.target
sc =StandardScaler()
X_scaled =sc.fit_transform(X)
pca =PCA(n_components=2)
X_pca =pca.fit_transform(X_scaled)
lda =LinearDiscriminantAnalysis(n_components = 2,solver ='svd')
X_lda =lda.fit_transform(X,Y)
fig, ax =plt.subplots(nrows =1,ncols =2 ,figsize =(13.5 ,4))
sns.scatterplot(X_pca[:,0],X_pca[:,1],hue =Y,palette ='Set1',ax = ax[0])
sns.scatterplot(X_lda[:,0],X_lda[:,1],hue=Y,palette ='Set1',ax =ax[1])
ax[0].set_title("PCA", fontsize =15,pad=15)
ax[1].set_title("LDA",fontsize =15,pad=15)
ax[0].set_xlabel("特征1",fontsize =12 )
ax[0].set_ylabel("特征2",fontsize =12 )
ax[1].set_xlabel("特征1",fontsize =12 )
ax[1].set_ylabel("特征2",fontsize =12 )
plt.savefig('PCA vs LDA.png', dpi =80 )
使用PCA对本班的期末成绩进行降维分析
phython复制代码
import pandas as pd
from sklearn.decompoision import PCA
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
data = pd.read_excel('期末.xlsx')
x = data.iloc[:,1:]
r = x.corr()
#数据规范化
sc = StandardScaler()
x_scaler = sc.fit_transform(x)
#主成分分析
pca = PCA(n_components = 8)
x_pca = pca.fit_transform(x_scaler)
pca.fit(x_scaler)
y = pca.transform(x_scaler)
tzxl = pca.components_
tz = pca.explained_variance_
gxl = pca.explained_variance_ratio_
y00 = sum(x[0,:]*tzxl[0,:])
y01 = sum(x[1,:]*tzxl[0,:])
y02 = sum(x[2,:]*tzxl[0,:])
y03 = sum(x[3,:]*tzxl[0,:])
y04 = sum(x[4,:]*tzxl[0,:])
y05 = sum(x[5,:]*tzxl[0,:])
y06 = sum(x[6,:]*tzxl[0,:])
y07 = sum(x[7,:]*tzxl[0,:])
f = gxl[0]*y[:,0]+gxl[1]*y[:,1]+gxl[2]*y[:,2]+gxl[3]*y[:,3]+gxl[4]*y[:,4]+gxl[5]*y[:,5]
dq = list(data['学号'].values)
rs = pd.Series(f,index = dq)
rs = rs.sort_values(ascending = False)