机器学习面试题汇总与解析——PCA 与 LDA

本章讲解知识点

    1. 什么是数据降维
    1. PCA


  • 本专栏适合于Python已经入门的学生或人士,有一定的编程基础。

  • 本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。

  • 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵

  • 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。

  • 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。


  • 关于机器学习算法书籍,我强烈推荐一本《百面机器学习算法工程师带你面试》,这个就很类似面经,还有讲解,写得比较好。

  • 关于深度学习算法书籍,我强烈推荐一本《解析神经网络——深度学习实践手册》,简称 CNN book,通俗易懂。

  • B站机器学习视频:https://space.bilibili.com/10781175/channel/detail?cid=133301



1. 什么是数据降维

数据降维是指在保持数据关键信息的前提下,减少数据的维度或特征数量的过程。在机器学习和数据分析中,数据降维是一种常用的技术,解决高维数据带来的问题。

高维数据通常具有大量的特征,这可能导致以下问题:

  • 维度灾难:随着维度的增加,数据空间的体积呈指数级增长,导致数据稀疏性增加和样本密度下降。

  • 计算复杂度增加:高维数据会增加计算的复杂度和存储需求,对于一些算法而言,处理高维数据会变得困难和耗时。

  • 数据可视化困难:在高维空间中,我们无法直观地可视化和理解数据的结构和关系。

数据降维可以通过两种方法实现:

  • 特征选择(Feature Selection):选择原始特征集中的子集作为新的特征集,从而减少特征的数量。常用的特征选择方法包括过滤式方法、包裹式方法和嵌入式方法等。

  • 特征提取(Feature Extraction):通过线性或非线性变换,将原始高维数据映射到低维空间,从而创建新的特征集。常见的特征提取方法有主成分分析(PCA)、线性判别分析(LDA)和独立成分分析(ICA)等。

PCA(Principal Component Analysis)和 LDA(Linear Discriminant Analysis)都是常用的数据降维方法,但它们的目标和应用场景略有不同。

PCA 是一种无监督学习方法,主要用于降低数据的维度并捕捉数据中的主要变化方向。它通过找到数据中方差最大的特征向量来确定新的特征空间,将原始高维数据映射到一个低维子空间。PCA 的目标是最大化数据的方差,并且特征之间是无关的。它主要用于数据探索、可视化和去除冗余特征。PCA 可以减少数据的维度,但不能保证在分类问题中获得最佳的判别能力。

LDA 是一种有监督学习方法,主要用于在降维的同时最大化类别间的差异和最小化类别内的差异,以提高分类效果。LDA 通过寻找投影轴,使得在新的低维子空间中,不同类别的样本尽可能分离,同一类别内的样本尽可能接近。LDA 的目标是最大化类别间的散布矩阵与最小化类别内的散布矩阵的比值。相比于 PCA,LDA 更适合于分类问题,并且可以提供更好的判别能力。


2. PCA

2.1 基本概念

PCA(Principal Component Analysis)是一种常用的无监督学习算法,用于数据降维和特征提取。它通过线性变换将原始高维数据映射到一个低维子空间,使得新的特征具有最大的方差。PCA 的目标是找到数据中最重要的特征,即主成分,以尽量保留原始数据中的信息

2.2 算法流程

PCA(Principal Component Analysis)算法的具体流程如下:

假设有样本:x1,x2,......xix_1,x_2,......x_i

1.数据预处理:对原始数据进行去均值操作。

  • 均值公式:μ=1Ni=1Nxi\mu = \frac{1}{N}\sum_{i=1}^{N}x_i
  • 去均值后的数据:xˉi=xiμ\bar{x}_i = x_i - \mu

2.计算协方差矩阵:计算去均值后的数据的协方差矩阵。

  • 协方差矩阵公式:C=1Ni=1NxˉixˉiTC = \frac{1}{N}\sum_{i=1}^{N}\bar{x}_i\bar{x}_i^T

3.特征值分解:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。

  • 特征值分解公式:C=VDVTC = VDV^T DD 为特征值的对角矩阵,VV 为对应的特征向量组成的矩阵。

4.特征值排序:按照特征值的大小将特征向量进行排序,选择前 k 个最大的特征值对应的特征向量作为主成分。

  • 选择前 k 个特征值对应的特征向量:Vk=[v1,v2,...,vk]V_k = [v_1, v_2, ..., v_k]

5.构建投影矩阵:将前 k 个特征向量组成的矩阵作为投影矩阵。

  • 投影矩阵:P=VkP = V_k

6.数据降维:通过将原始数据与投影矩阵相乘,将数据映射到低维空间,实现数据的降维。

  • 降维后的数据:Y=XPTY = X \cdot P^T

以上公式中,NN 表示样本数量,xix_i 表示原始数据的第 ii 个样本,xˉi\bar{x}_i 表示去均值后的第 ii 个样本,CC 表示协方差矩阵,VV 表示特征向量矩阵,DD 表示特征值的对角矩阵,VkV_k 表示选择的前 k 个特征向量构成的矩阵,PTP^T 表示投影矩阵,XX 表示原始数据矩阵,YY 表示降维后的数据矩阵。

PCA是比较常见的线性降维方法,通过线性投影高维数据映射到低维数据中,所期望的是在投影的维度上,新特征自身的方差尽量大,方差越大特征越有效,尽量使产生的新特征间的相关性越小。

2.3 PCA 的优缺点

优点:

  • 降低数据维度:PCA 能够将高维数据转换为低维表示,去除冗余信息,减少特征的数量,便于数据的可视化和理解。
  • 最大化数据方差:PCA 通过寻找数据中方差最大的方向进行投影,保留了数据的主要变化模式,保留了最重要的信息。
  • 去除数据间的相关性:PCA 将原始数据变换到新的特征空间中,新的特征之间具有最小的相关性,减少了多重共线性问题。
  • 减少计算复杂度:PCA 降低了数据的维度,减少了计算的复杂度和存储空间的需求。

缺点:

  • 信息损失:由于 PCA 是通过保留主要变化模式来降低数据维度,因此会引入一定的信息损失。降维后的数据无法完全还原原始数据,可能会损失一些细节和特定的变化模式。
  • 受异常值影响:PCA 对异常值敏感,异常值可能会对主成分分析的结果产生较大影响,导致降维结果不准确。
  • 假设数据线性可分:PCA 假设数据是线性可分的,对于非线性关系较强的数据,PCA 的效果可能不佳。
  • 计算复杂度:PCA 需要计算数据的协方差矩阵,对于大规模数据集,计算复杂度较高。

3. LDA

2.1 基本概念

LDA(Linear Discriminant Analysis)是一种常用的线性判别分析方法,用于降维和分类。与 PCA 不同,LDA 是一种有监督学习算法,它关注的是最大化不同类别之间的差异性,而不是最大化总体方差

LDA 的主要思想是将数据投影到低维空间,使得不同类别之间的距离最大化,同一类别内部的样本距离最小化。通过寻找最佳投影方向,LDA 能够将高维数据转换为一个更低维的子空间。

2.2 LDA 的算法流程

1.输入数据集:包含 NN 个样本,每个样本有 dd 个特征,同时每个样本有一个标签表示其所属类别。

2.计算类别均值向量:对于每个类别 cc,计算其样本的均值向量 μcμ_c

  • 类别 cc 的均值向量:μc=1ncxiμ_c = \frac{1}{n_c} ∑x_i,其中 xix_i 是属于类别 cc 的第 ii 个样本,ncn_c 是类别 cc 的样本数量。

3.计算类间散度矩阵:计算类别均值向量之间的差异,并进行类间散度矩阵 SBS_B 的计算。

  • 总体均值向量:μ=1Nμcμ = \frac{1}{N} ∑μ_c,其中 NN 是总样本数量,μcμ_c 是类别 cc 的均值向量。
  • 类间散度矩阵:SB=(nc(μcμ)(μcμ)T)S_B = ∑(n_c * (μ_c - μ) * (μ_c - μ)T),对所有类别 cc 求和。

4.计算类内散度矩阵:计算每个类别内部样本的协方差矩阵,并进行类内散度矩阵 SWS_W 的计算。

  • 类别 cc 的协方差矩阵:Sc=(xiμc)(xiμc)TS_c = ∑(x_i - μ_c) * (x_i - μ_c)T,对属于类别 cc 的样本 xix_i 求和。
  • 类内散度矩阵:SW=ScS_W = ∑S_c,对所有类别 cc 求和。

5.求解广义特征值问题:通过求解广义特征值问题,得到投影矩阵 WW(线性判别向量),将数据投影到低维空间。

  • 广义特征值问题:SW1SBW=λWS_W^{-1} S_B W = λ W,其中 λλ 是广义特征值,WW 是广义特征向量。

6.选择投影维度和分类:根据特征值的大小,选择合适的投影维度 k(通常是保留前 k 个最大的特征值对应的特征向量)。将数据投影到新的子空间,并使用分类算法(如最近邻算法)对数据进行分类。

LDA 算法的目标是最大化类别间的差异性(通过类间散度矩阵 SBS_B)和最小化类别内部的差异性(通过类内散度矩阵 SWS_W),从而使得投影后的数据在不同类别之间有更好的可分性

2.3 LDA 优缺点

优点:

  • 提供了一种有效的降维方法:LDA 可以将高维数据投影到低维空间,保留了最能区分不同类别的特征,从而在降低数据维度的同时保持了较高的分类性能。
  • 考虑了类别之间的差异性:LDA 通过最大化类别间的差异性和最小化类别内部的差异性,使得投影后的数据在不同类别之间更容易区分。
  • 可以处理多分类问题:LDA 不仅适用于二分类问题,还可以扩展到多分类问题。
  • 对数据分布的假设较弱:LDA 在对数据分布做出较弱的假设情况下,仍然能够获得较好的分类效果。

缺点:

  • 对数据分布的假设要求较严:LDA 假设数据服从高斯分布,并且假设各个类别的协方差矩阵相等,这在实际应用中可能不符合数据的实际情况。
  • 对异常值和噪声敏感:由于 LDA 在计算类别均值和协方差矩阵时受到异常值和噪声的影响,可能导致投影结果的偏移或不准确。
  • 维度灾难问题:当原始数据维度很高时,LDA 可能无法充分发挥降维的作用,因为在高维空间中,类别间的差异性可能变得微弱。
  • 需要类别信息:LDA 是一种有监督学习方法,需要事先知道每个样本所属的类别信息,因此在无标签数据或无法获得类别信息的情况下无法应用。


面试题

1. PCA 介绍一下⭐⭐⭐⭐⭐

PCA(Principal Component Analysis)是一种常用的无监督学习算法,用于数据降维和特征提取。它通过线性变换将原始高维数据映射到一个低维子空间,使得新的特征具有最大的方差。PCA 的目标是找到数据中最重要的特征,即主成分,以尽量保留原始数据中的信息

可以使用两种方法进行 PCA,分别是特征分解或奇异值分解(SVD)。PCA 旨在找到数据中的主成分, 并利用这些主成分表征原始数据, 从而达到降维的目的

算法步骤

假设有 m 条 n 维数据。

  1. 将原始数据按列组成 n 行 m 列矩阵 XX

  2. XX 的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值

  3. 求出协方差矩阵 C=1mXXTC = \frac{1}{m}XX^T

  4. 求出协方差矩阵的特征值以及对应的特征向量:特征值分解公式:C=VDVTC = VDV^T

  5. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 k行组成矩阵 PP

  6. Y=PTXY=P^TX 即为降维到 k 维后的数据

2. 说说 PCA 的步骤⭐⭐⭐⭐⭐

答案同第一题

3. PCA 原理⭐⭐⭐⭐⭐

答案同第一题

4. PCA 降维之后的维度怎么确定⭐⭐⭐⭐⭐

参考回答

  1. 可以利用交叉验证,再选择一个很简单的分类器,来选择比较好的 k 的值

  2. 设定一个保留的信息量比例,例如保留90%的信息量,然后根据特征值的大小选择相应数量的特征向量,使得这些特征向量对应的特征值之和占总特征值之和的比例达到指定的比例。

5. 说说 PCA 的优缺点⭐⭐⭐⭐⭐

优点:

  • 降低数据维度:PCA 能够将高维数据转换为低维表示,去除冗余信息,减少特征的数量,便于数据的可视化和理解。
  • 最大化数据方差:PCA 通过寻找数据中方差最大的方向进行投影,保留了数据的主要变化模式,保留了最重要的信息。
  • 去除数据间的相关性:PCA 将原始数据变换到新的特征空间中,新的特征之间具有最小的相关性,减少了多重共线性问题。
  • 减少计算复杂度:PCA 降低了数据的维度,减少了计算的复杂度和存储空间的需求。

缺点:

  • 信息损失:由于 PCA 是通过保留主要变化模式来降低数据维度,因此会引入一定的信息损失。降维后的数据无法完全还原原始数据,可能会损失一些细节和特定的变化模式。
  • 受异常值影响:PCA 对异常