《机器学习高频面试题详解》2.6:降维算法-线性判别分析
点击上方卡片链接就可以进入专栏,专栏右上角有订阅选项,欢迎大家订阅~
前言
大家好,我是鬼仔,今天带来《机器学习高频面试题详解》专栏的第2.6节:降维算法-线性判别分析(LDA)。这是鬼仔第一次开设专栏,每篇文章鬼仔都会用心认真编写,希望能将每个知识点讲透、讲深,帮助同学们系统性地学习和掌握机器学习中的基础知识,希望大家能多多支持鬼仔的专栏~
目前这篇是试读,后续的文章需要订阅才能查看哦,专栏预计更新30+篇文章(只增不减),具体内容可以看专栏介绍,大家的支持是鬼仔更新的动力!
本文大纲 | |
一、原理 | 1. LDA理论基础 |
2. LDA算法过程 | |
二、面试真题 | 1. LDA算法的优缺点? |
2. LDA算法和PCA算法的区别与联系? | |
3. 解释类内散度矩阵和类间散度矩阵的概念及其计算方法? | |
4. LDA假设数据的类别边界是线性的,对于非线性问题,如何使用LDA进行降维? | |
5. 如果类内散度矩阵是奇异的(无法求逆),应该如何处理? |
一、原理
1. LDA理论基础
LDA(线性判别分析,Linear Discriminant Analysis)是一种有监督学习算法,主要用于特征降维和分类问题。LDA的基本思想是将高维数据投影到低维空间,同时使得不同类别之间的距离最大化,以提高分类性能。
LDA的核心思想可以概括为两个方面:
- 类内距离最小化:使得同类样本在投影后的低维空间内尽可能地接近;
- 类间距离最大化:使得不同类别的样本在投影后的低维空间内尽可能地远离。
举个二维平面的数据集为例,如下图所示,数据集存在 “+”和“-”两类数据。现在进行LDA降维操作,即投影到一维直线上,让每一种类别数据的投影点尽可能的接近,而“+”和“-”数据中心之间的距离尽可能的大。
LDA算法有以下几个重要的理论基础:
1)类内散度矩阵(Within-class Scatter Matrix):衡量同类别数据之间的距离。LDA旨在使类内散度矩阵最小化,即同类别数据之间的距离尽量小。
2)类间散度矩阵(Between-class Scatter Matrix):衡量不同类别数据之间的距离。LDA旨在使类间散度矩阵最大化,即不同类别数据之间的距离尽量大。
3)Fisher准则:LDA的目标是寻找一个线性变换方向,使得投影后的数据满足类间散度最大,类内散度最小。Fisher准则定义了一个目标函数,即类间散度和类内散度的比值,LDA通过优化该目标函数来寻找最佳的投影方向,实现高维数据的降维,同时保留数据的类别信息。
4)特征值和特征向量:LDA的求解过程涉及到求解特征值和特征向量问题。具体来说,需要求解类间散度矩阵与类内散度矩阵的逆的乘积的特征值和特征向量。选择最大的k个特征值对应的特征向量,就可以构建出一个投影矩阵,将高维数据投影到k维空间。
5)投影和降维:通过特征向量构建的投影矩阵,可以将原始高维数据投影到低维空间,实现降维。在低维空间中,数据的类别信息得到保留,便于进行分类任务。
2. LDA算法过程
1)计算各类别的均值向量:对于每个类别,计算其所有样本在各个特征上的均值,得到每个类别的均值向量。
2)计算类内散度矩阵(Within-class scatter matrix,简称SW):SW衡量了各个类别内部数据点的离散程度,通过计算每个类别的协方差矩阵,并将它们加和得到 SW。
3)计算类间散度矩阵(Between-class scatter matrix,简称SB):SB 衡量了不同类别之间的离散程度,通过计算不同类别之间的差异(均值之差)的协方差矩阵得到 SB。
4)计算广义特征值得到判别向量。广义特征值问题的求解即为的特征向量问题:首先计算矩阵SW的逆矩阵与矩阵SB的乘积:求解矩阵SW的逆矩阵,然后将其与矩阵SB相乘,得到一个新的矩阵;然后再对新矩阵进行特征值分解,得到一组特征值和对应的特征向量。
5)选择最大的k个特征值对应的特征向量:从上一步得到的特征值中选择最大的k个特征值,然后取对应的特征向量。这k个特征向量构成了一个投影矩阵。
6)对原始数据进行投影:将原始数据与投影矩阵相乘,得到降维后的数据。
二、面试真题
1. LDA算法的优缺点?
1)优点:
- 降维效果较好:LDA在降维过程中使用了类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。LDA的目标是寻找一个投影方向,使得同类样本之间的距离尽可能小,不同类样本之间的距离尽可能大。因此,在某些情况下,LDA降维后的数据能够更好地保持原始数据的类别信息。
- 计算复杂度较低:LDA的计算过程相对简单,只需要计算类内散度矩阵、类间散度矩阵以及它们的逆矩阵乘积。相比于PCA等其他降维方法,LDA的计算复杂度较低。
- 可解释性强:LDA是一种线性方法,其投影方向可以直观地解释为类别之间的差异。因此,LDA具有较好的可解释性。
2)缺点:
- 需要标签信息:LDA是一种监督学习方法,需要利用类别标签来计算类内散度矩阵和类间散度矩阵。这使得LDA不适用于无监督学习任务。
- 类内散度矩阵的奇异性:当原始数据的维度高于样本数时,类内散度矩阵可能是奇异的,无法求逆。这时需要采用一些技巧,如正则化,来解决这个问题。
- 线性限制:LDA假设数据的类别边界是线性的,这意味着它可能无法很好地处理非线性数据,即不适合对非高斯分布样本进行降维。对于非线性问题,可以考虑使用核技巧(Kernel trick)的扩展版本,如Kernel LDA。
- 对异常值敏感:LDA在计算类内散度矩阵和类间散度矩阵时,会受到异常值的影响。因此,对于包含异常值的数据,LDA的降维效果可能会受到影响。在应用LDA之前,可以考虑对数据进行预处理,以减小异常值的影响。
2. LDA算法和PCA算法的区别与联系?
1)区别:
- 算法目标: PCA的目标是将高维数据投影到低维空间中,使得投影后的新特征数据具有最大的方差,即保留原始数据的最大信息。 LDA的目标是将高维数据投影到低维空间中,使得同类别数据的距离尽可能小,不同类别数据的距离尽可能大,以便于分类。
- 降维原理: PCA是一种无监督学习方法,它通过计算数据的协方差矩阵,然后对协方差矩阵进行特征值分解,得到特征值和特征向量。最后选择最大的k个特征值对应的特征向量作为投影矩阵,实现降维。 LDA是一种监督学习方法,它通过计算类内散度矩阵和类间散度矩阵,然后求解类内散度矩阵的逆矩阵与类间散度矩阵的乘积。最后对该乘积进行特征值分解,选择最大的k个特征值对应的特征向量作为投影矩阵,实现降维。
- 应用场景: PCA通常用于数据压缩、可视化和预处理等无监督学习任务,不需要使用类别标签信息。 LDA主要用于分类任务,需要利用类别标签信息来计算类内散度矩阵和类间散度矩阵。
2)联系: 尽管LDA和PCA的目标和原理不同,但它们都是线性降维方法,通过将高维数据投影到低维空间来实现降维。另外,LDA和PCA都可以通过特征值分解来求解投影矩阵。
3. 解释类内散度矩阵和类间散度矩阵的概念及其计算方法?
类内散度矩阵和类间散度矩阵是LDA(线性判别分析)算法中的两个关键概念,它们分别用于衡量同类别数据的紧密程度和不同类别数据的分离程度。
1)类内散度矩阵SW: 类内散度矩阵用于衡量同一类别中的数据点之间的紧密程度。对于每个类别,计算该类别中所有样本与其均值向量之间的差值,然后将这些差值向量进行外积计算,最后将所有类别的外积和相加得到类内散度矩阵。
假设有C个类别,每个类别的均值向量为,类别中的第个样本为,其中表示类别i中的样本数。类内散度矩阵SW的计算公式为:
2)类间散度矩阵SB: 类间散度矩阵用于衡量不同类别之间的数据点的分离程度。计算所有类别的均值向量与全局均值向量之间的差值,然后将这些差值向量进行外积计算,最后将所有类别的外积和相加得到类间散度矩阵。
假设有C个类别,每个类别的均值向量为,全局均值向量为。类间散度矩阵SB的计算公式为:
在LDA算法中,我们的目标是寻找一个投影方向,使得类内散度矩阵最小,而类间散度矩阵最大。这样可以保证同一类别的数据在低维空间中的距离尽可能小,而不同类别之间的距离尽可能大。为了实现这个目标,我们需要求解矩阵SW的逆矩阵与矩阵SB的乘积,然后对该乘积进行特征值分解,最后选择最大的k个特征值对应的特征向量作为投影矩阵。
4. LDA假设数据的类别边界是线性的,对于非线性问题,如何使用LDA进行降维?
对于非线性问题,可以使用核技巧(Kernel trick)将LDA扩展为Kernel LDA(也称为非线性判别分析,NLDA)。核技巧的基本思想是将原始数据映射到一个高维空间,使得在高维空间中数据变得线性可分,然后在高维空间中应用LDA进行降维,但核技巧也会引入额外的计算复杂度。
基本步骤如下:
1)选择一个核函数:核函数用于计算原始数据在高维空间中的内积。常用的核函数有高斯核、多项式核、Sigmoid核等。
2)计算核矩阵:使用核函数计算原始数据的核矩阵。核矩阵是一个对称矩阵,其元素K(i, j)表示第i个样本和第j个样本在高维空间中的内积。
3)中心化核矩阵:将核矩阵进行中心化,以消除数据的均值影响。中心化的方法是先计算一个中心化矩阵H,并将其与核矩阵相乘,即K_centered = HKH。
4)计算类内散度矩阵和类间散度矩阵:在核矩阵的基础上,计算类内散度矩阵SW和类间散度矩阵SB。这里的计算方法与线性LDA略有不同,需要根据核矩阵进行计算。
5)求解SW的逆矩阵与SB的乘积:求解矩阵SW的逆矩阵,然后将其与矩阵SB相乘,得到一个新的矩阵。
6)对新矩阵进行特征值分解:对新矩阵进行特征值分解,得到一组特征值和对应的特征向量。
7)选择最大的k个特征值对应的特征向量:从上一步得到的特征值中选择最大的k个特征值,然后取对应的特征向量。这k个特征向量构成了一个投影矩阵。
8)对原始数据进行投影:将原始数据与投影矩阵相乘,得到降维后的数据。这里需要注意的是,由于我们使用了核技巧,实际的投影过程需要通过核函数进行计算。
5. 如果类内散度矩阵是奇异的(无法求逆),应该如何处理?
当类内散度矩阵是奇异的(无法求逆)时,可以采用以下方法处理:
1)正则化:在类内散度矩阵上加一个正则项,即在对角线上加一个很小的正数(如λI,其中λ是一个很小的正数,如1e-6,I是单位矩阵)。这样可以保证类内散度矩阵是非奇异的,从而可以求逆。正则化可以看作是一种平滑方法,它可以防止过拟合并提高模型的稳定性。
2)PCA预处理:在进行LDA之前,先对数据进行PCA(主成分分析)降维。PCA可以将原始数据投影到一个低维空间,使得数据的维度降低,从而减小类内散度矩阵的奇异性。在进行PCA降维时,可以选择一个合适的维度,以保留原始数据的大部分信息。
3)使用广义逆矩阵:当类内散度矩阵是奇异的时候,可以使用广义逆矩阵代替逆矩阵。广义逆矩阵可以用于求解奇异矩阵的逆,它可以通过奇异值分解(SVD)等方法计算得到。
4)特征选择:在进行LDA之前,可以对原始数据进行特征选择,以去除冗余特征或无关特征。特征选择可以降低数据的维度,减小类内散度矩阵的奇异性。常用的特征选择方法有方差分析、互信息和递归特征消除等。
5)数据预处理:对原始数据进行预处理,如去除异常值、缺失值填充等。这些预处理方法可以减小数据的噪声,降低类内散度矩阵的奇异性。
点击下面卡片链接就可以进入专栏,右上角有订阅选项,欢迎大家订阅~
#机器学习##数据挖掘##数据分析##算法工程师##面经#专栏作者曾在校招期间拿到包括字节、微信和华为等多家大厂的SSP offer,该专栏主要是为了帮助同学们系统性地学习和掌握机器学习中的基础知识。专栏详细地整理了各大厂的算法岗面经,力争深入浅出地讲解重要知识点,适合人群为准备校招或者实习,且目标岗位为算法岗、数据挖掘岗或者数据分析岗的同学。