PCA与LDA[差异]

161 阅读6分钟

PCA vs LDA [Differences]

在机器学习领域,有时我们不得不处理大规模的数据,不仅有很多的数据点,而且还有大量的特征维。在PCA和LDA诞生之前,这个问题耗费了我们大量的时间和内存空间,使我们的模型难以工作。在这篇文章中,我们将讨论这两种算法如何工作以及它们之间的区别。

目录

  1. 降维简介
  2. PCA
  3. LDA
  4. 对比表
  5. 实施

1.降维简介

许多机器学习问题涉及到每个训练实例的数千甚至数百万的特征。这些高维数据不仅使训练变得极其缓慢,而且还使我们的模型难以找到好的解决方案。幸运的是,科学家们创造了PCA和LDA,帮助我们解决了这些麻烦。本文解释了它们的机制和一些数学概念。之后,我将比较它们的效果以及在哪些情况下我们应该使用它们。

2.2.PCA

主成分分析(简称PCA)是一种无监督学习算法,用于降维。直接处理高维数据会导致训练缓慢,所以应用PCA作为预处理步骤会使训练更快。顺便说一下,我们都知道,人脑和计算机都只能在三维或二维空间中绘制图表,它们显然不能将大于三维的数据可视化。PCA允许我们通过将数据维度减少到4以下来实现这一点,所以应用PCA的第二个目的是为了可视化

那么,PCA是如何工作的呢?好吧,PCA的核心思想是:找到一组定义新空间的单元向量,新空间的轴的数量比原来的少。

2.1.方差

第一步,我们需要了解:什么是数据的信息?如果你知道概率,它实际上就是方差。每个数据点沿一个轴的方差就是它在该轴上的坐标。

PCA vs LDA [Differences]

请看上面的例子。我们有原始的数据集(红点)。如果我们把它们投影到X1轴上,我们仍然保留它们的X1值和点的数量(蓝点)。但如果我们把它们投影到x2轴上,你猜怎么着?现在新的数据(绿点)的质量非常低。许多点重叠了,因为它们有相同的x2值,所以投影的数据失去了许多信息。这个观察结果得出一个结论。拥有较高方差的数据是件好事,因为它们会有更多的信息和重要性。

2.2.协方差和关联性

协方差是一个衡量变量对在一起变化程度的指标。

PCA vs LDA [Differences]

上面表达的是数据居中后的协方差矩阵。在得到数据集的协方差矩阵后,这将我们引向约束优化问题。
PCA vs LDA [Differences]

第一个项正是我们的数据集在新空间中的方差,我们需要如上所述将其最大化。u是构成我们投影空间的正态向量。通过使用拉格朗日乘法器,他们证明这个问题的解决方案是与协方差矩阵的k个最大特征值相对应的特征向量。这是一个多么有趣的结果啊所以我们需要做的就是找到最大的特征值。

之后,你可以保留k个最大成分,这些成分是k个最大特征值。它们的特征向量构成了我们的新空间,剩下的就很简单了:将原始数据投射到新的轴上,就可以得到新的数据,其维度比以前的要小。

3.3.LDA

线性判别分析(简称LDA)是由Ronald Fisher提出的,是一种监督学习算法。它意味着你必须同时使用数据的特征和标签来降低维度,而PCA只使用特征。另一个关键点:LDA的目的是找到一个新的空间,在这个空间中,降低维度的数据集有利于分类任务。

为了达到这个目标,LDA使用了两个指标。类内方差类间方差

其核心思想非常简单:找到能使两个类的平均向量之间的距离最大化,并使每个类内的方差最小的向量w

稍微解释一下:类内方差指散点。这个量越小,数据点的散布就越小,反之亦然。我们想对类进行分类,当然我们要最大化每个类之间的距离,这就是为什么要最大化平均向量之间的距离。然而,我们也需要考虑到数据的分散性。类内方差越大,两个类的数据点重叠越多,最终导致分类的不良结果。

基于这些论点,LDA的优化问题变成了最大化这个项。
PCA vs LDA [Differences]
分母是每个类内的总方差,分子是类间方差。解决这个问题是相当复杂的,我会把它留在上面的文章中。但有一点值得注意的是,新空间的维数小于或等于C-1(C是类的数量)。看来,在轴的数量明显减少的情况下,我们得到了一个好的结果。

4.比较表

为了比较PCA和LDA之间的差异,我将创建一个汇总表。

属性PCALDA
类型无监督的有监督的
目标-训练更快- 有利于分类
-视觉化
维度的-小于或等于-小于或等于结果
新数据原有的一个的时,从数字中减去1
方法使方差最大化最大化班级间的方差并
最小化类内方差

PCA和LDA之间有一些相似之处:

  • 它们都试图通过投射到新的空间来减少数据的维度,而新空间的维度比前者要小。
  • 它们都按重要性对新轴进行排序,这种重要性由特征值来衡量。
  • 从两者中,我们可以知道哪些特征是重要的,在创建新轴时贡献更大。

5.实施

这是使用PCA和LDA处理爱尔兰花数据集的代码。注意,我们使用sklearn库,而不是从头开始建立每个算法。

import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

iris = datasets.load_iris()

X = iris.data
y = iris.target
target_names = iris.target_names

pca = PCA(n_components=2)
X_r = pca.fit(X).transform(X)

lda = LinearDiscriminantAnalysis(n_components=2)
X_r2 = lda.fit(X, y).transform(X)

# Percentage of variance explained for each components
print(
    "explained variance ratio of PCA (first two components): %s"
    % str(pca.explained_variance_ratio_)
)
print("explained variance ratio of LDA : %s"
       %str(lda.explained_variance_ratio_))

plt.figure()
colors = ["navy", "turquoise", "darkorange"]
lw = 2

for color, i, target_name in zip(colors, [0, 1, 2], target_names):
    plt.scatter(
        X_r[y == i, 0], X_r[y == i, 1], color=color, alpha=0.8, lw=lw, label=target_name
    )
plt.legend(loc="best", shadow=False, scatterpoints=1)
plt.title("PCA of IRIS dataset")

plt.figure()
for color, i, target_name in zip(colors, [0, 1, 2], target_names):
    plt.scatter(
        X_r2[y == i, 0], X_r2[y == i, 1], alpha=0.8, color=color, label=target_name
    )
plt.legend(loc="best", shadow=False, scatterpoints=1)
plt.title("LDA of IRIS dataset")

plt.show()

运行这个单元后,我们得到了结果。

explained variance ratio of PCA (first two components): [0.92461872 0.05306648]
explained variance ratio of LDA :[0.9912126 0.0087874]

你可以看到下面两张图片。它们是我们的数据集投射到新空间后的可视化。
PCA vs LDA [Differences]

OpenGenus的这篇文章描述了PCA和LDA的区别和相似之处。希望它能帮助你更多地了解这些算法。感谢你的阅读,如果你觉得它有用,请分享给大家