机器学习中的线性判别分析

逻辑回归是一种分类算法,传统上仅限于两类分类问题。

如果您的类别超过两个,那么线性判别分析是首选的线性分类技术。

在这篇文章中,您将了解用于分类预测建模问题的线性判别分析(LDA)算法。阅读本文后,您将了解:

  • 逻辑回归的局限性以及线性判别分析的必要性。
  • 从数据中学习并可以保存到文件的模型表示形式。
  • 如何从您的数据中估计模型。
  • 如何从学习到的 LDA 模型进行预测。
  • 如何准备数据以充分利用 LDA 模型。

本文面向对应用机器学习、模型工作原理以及如何更好地使用模型感兴趣的开发人员。因此,不需要统计学或线性代数背景,尽管了解分布的均值方差会有所帮助。

LDA 在准备和应用方面都是一个简单的模型。模型设置和预测方程推导背后有一些有趣的统计学知识,但本文不作介绍。

通过我的新书《掌握机器学习算法启动您的项目,其中包括逐步教程和所有示例的Excel 电子表格文件。

让我们开始吧。

Linear Discriminant Analysis for Machine Learning

机器学习中的线性判别分析
图片由Jamie McCaffrey拍摄,保留部分权利。

逻辑回归的局限性

逻辑回归是一种简单而强大的线性分类算法。它也有一些局限性,表明需要替代的线性分类算法。

  • 两类问题。逻辑回归适用于两类或二元分类问题。它可以扩展到多类分类,但很少用于此目的。
  • 类分离良好时不稳定。当类别分离良好时,逻辑回归会变得不稳定。
  • 样本较少时不稳定。当用于估计参数的样本较少时,逻辑回归会变得不稳定。

线性判别分析确实解决了这些问题,是多类分类问题的首选线性方法。即使是二元分类问题,尝试逻辑回归和线性判别分析都是一个好主意。

LDA 模型的表示

LDA 的表示是直接的。

它由数据的统计特性组成,为每个类别计算。对于单个输入变量 (x),这是每个类别的变量的均值和方差。对于多个变量,这是在多元高斯分布上计算的相同特性,即均值和协方差矩阵。

这些统计特性从您的数据中估计并代入 LDA 方程进行预测。这些是您将保存到模型文件中的模型值。

让我们看看这些参数是如何估计的。

获取您的免费算法思维导图

Machine Learning Algorithms Mind Map

方便的机器学习算法思维导图样本。

我创建了一份方便的思维导图,其中包含60多种按类型组织的算法。

下载、打印并使用它。


还可以独家访问机器学习算法电子邮件迷你课程。

 

 

学习 LDA 模型

LDA 对您的数据做了一些简化假设

  1. 您的数据是高斯分布的,绘制时每个变量都呈钟形曲线。
  2. 每个属性具有相同的方差,即每个变量的值平均而言围绕均值变化的量相同。

在这些假设下,LDA 模型为每个类别估计数据的均值和方差。在单变量(单个输入变量)两类情况下,这很容易理解。

每个类别 (k) 的每个输入 (x) 的均值 (mu) 值可以通过将值的总和除以值的总数来以正常方式估计。

muk = 1/nk * sum(x)

其中 muk 是类别 k 的 x 的均值,nk 是类别 k 的实例数。方差是在所有类别中计算的,是每个值与均值的平均平方差。

sigma^2 = 1 / (n-K) * sum((x – mu)^2)

其中 sigma^2 是所有输入 (x) 的方差,n 是实例数,K 是类别数,mu 是输入 x 的均值。

使用 LDA 进行预测

LDA 通过估计一组新输入属于每个类别的概率来进行预测。获得最高概率的类别是输出类别并进行预测。

模型使用贝叶斯定理来估计概率。简而言之,贝叶斯定理可用于使用每个类别的概率和数据属于每个类别的概率来估计给定输入 (x) 的输出类别 (k) 的概率

P(Y=x|X=x) = (PIk * fk(x)) / sum(PIl * fl(x))

其中 PIk 指的是在您的训练数据中观察到的每个类别 (k) 的基本概率(例如,在两类问题中,50-50 分割为 0.5)。在贝叶斯定理中,这称为先验概率。

PIk = nk/n

上面的 f(x) 是 x 属于该类别的估计概率。f(x) 使用高斯分布函数。将高斯函数代入上述方程并简化,我们得到以下方程。这被称为判别函数,并且计算出具有最大值的类别将是输出分类 (y)

Dk(x) = x * (muk/siga^2) – (muk^2/(2*sigma^2)) + ln(PIk)

Dk(x) 是给定输入 x 的类别 k 的判别函数,muk、sigma^2 和 PIk 都从您的数据中估计。

如何为 LDA 准备数据

本节列出了一些在使用 LDA 准备数据时可能考虑的建议。

  • 分类问题。这可能不言而喻,但 LDA 适用于输出变量是分类的分类问题。LDA 支持二元和多类分类。
  • 高斯分布。模型的标准实现假设输入变量是高斯分布的。考虑检查每个属性的单变量分布,并使用变换使它们看起来更像高斯分布(例如,对数和根用于指数分布,Box-Cox 用于偏态分布)。
  • 删除异常值。考虑从数据中删除异常值。这些可能会扭曲用于分离 LDA 中类别(例如均值和标准差)的基本统计量。
  • 相同方差。LDA 假设每个输入变量具有相同的方差。在使用 LDA 之前对数据进行标准化以使其均值为 0、标准差为 1,这几乎总是一个好主意。

LDA 的扩展

线性判别分析是一种简单有效的分类方法。因为它简单且被很好地理解,所以该方法有许多扩展和变体。一些流行的扩展包括:

  • 二次判别分析(QDA):每个类别使用自己的方差估计(或当存在多个输入变量时的协方差)。
  • 灵活判别分析(FDA):使用输入的非线性组合,例如样条函数。
  • 正则化判别分析(RDA):在方差(实际上是协方差)估计中引入正则化,调节不同变量对 LDA 的影响。

最初的开发被称为线性判别或费舍尔判别分析。多类版本被称为多重判别分析。现在这些都简称为线性判别分析。

进一步阅读

如果您想深入研究,本节提供了一些额外的资源。我必须感谢《统计学习导论:R 应用》一书,本文中的一些描述和符号都取自此书,它非常出色。

书籍

其他

总结

在这篇文章中,您了解了用于分类预测建模问题的线性判别分析。您学到了:

  • LDA 的模型表示以及学习模型有什么独特之处。
  • 如何从训练数据中估计 LDA 模型的参数。
  • 如何使用模型对新数据进行预测。
  • 如何准备数据以充分利用该方法。

您对这篇文章有什么疑问吗?

请留言提问,我将尽力回答。

了解机器学习算法的工作原理!

Mater Machine Learning Algorithms

几分钟内了解算法如何工作

...只需算术和简单示例

在我的新电子书中探索如何实现
精通机器学习算法

它涵盖了**10种顶级算法**的**解释**和**示例**,例如:
_线性回归_、_k-近邻_、_支持向量机_等等...

最后,揭开
机器学习算法的神秘面纱

跳过学术理论。只看结果。

查看内容

对《机器学习中的线性判别分析》的 55 条回复

  1. Shaksham Kapoor 2017 年 6 月 6 日 下午 6:32 #

    我无法理解这些方程式

    P(Y=x|X=x) = (PIk * fk(x)) / sum(PIl * fl(x))

    PIk = nk/n ……. 我知道贝叶斯定理是什么,但 fk(x)、PII 和 fl(x) 代表什么?

  2. Pia Laine 2017 年 8 月 9 日 上午 1:58 #

    你好 Shaksham,

    这可能有点晚了,但如果您使用以下符号

    P(Y=y|X=x) = P(X=x|Y=y) * P(Y=y) / P(X=x),

    您可以看到 fk(x) 代表 P(X=x|Y=y)。我认为分母中我们只是对所有类别进行求和。原始符号对我来说也有些令人困惑,因为在某些情况下,我见过希腊字母“pi”被用于后验概率本身。

  3. Pia Laine 2017 年 8 月 9 日 上午 1:59 #

    嗨,Jason,

    我很难理解方差方程中的 n-K 项

    sigma^2 = 1 / (n-K) * sum((x – mu)^2)

    你能澄清一下吗?

    谢谢!

    • Jason Brownlee 2017 年 8 月 9 日 上午 6:43 #

      “n 是实例数,K 是类别数”。

      • Pia Laine 2017 年 8 月 9 日 下午 3:40 #

        是的,谢谢,我注意到了,但“减去 K”对我来说似乎不直观。🙂

        • Aleksa Mihajlovic 2020 年 5 月 24 日 上午 6:01 #

          N-k,我们减去 k 个自由度,因为我们有 k 个类别(除非我错了)

  4. Madeleine 2017 年 10 月 12 日 下午 8:56 #

    亲爱的 Jason,

    关于预测变量 p > 1 的情况,我有 2 个问题。

    1. 当我们有多个预测变量时,如何为每个 K 类估计 mu?
    2. 如何估计所有 K 组的 pxp 公共协方差矩阵?

    提前非常感谢您,
    希望我的问题足够清楚

    此致,
    Madeleine

    • Jason Brownlee 2017 年 10 月 13 日 上午 5:47 #

      好问题。我推荐一本好的教科书,也许可以从《统计学习导论》开始。

  5. Aniket Saxena 2018 年 1 月 9 日 下午 2:19 #

    嗨,Jason,

    你能推荐一些我可以学习灵活判别分析和正则化判别分析的资料吗?

    祝好,
    Aniket

  6. om 2018 年 5 月 29 日 上午 8:02 #

    https://sebastianraschka.com/Articles/2014_python_lda.html

    他正在谈论 LDA 的不同用途。

    Jason 你想评论一下吗?

  7. statAstrologer 2018 年 10 月 12 日 下午 6:42 #

    你好先生,我想知道为什么我们将这种分类技术称为“分析”?

  8. SIMM 2018 年 10 月 24 日 下午 1:38 #

    在费舍尔线性判别中,我们如何对新样本进行分类?

    • Jason Brownlee 2018 年 10 月 24 日 下午 2:49 #

      请参阅标题为“使用 LDA 进行预测”的部分。

  9. manef 2018 年 11 月 4 日 上午 12:21 #

    您好,您能告诉我费舍尔判别分析 FDA 和线性判别分析之间的区别吗?
    谢谢

  10. Hemanga 2018 年 11 月 26 日 下午 4:26 #

    线性判别分析 (LDA) 编码中应该使用什么标签值

    • Jason Brownlee 2018 年 11 月 27 日 上午 6:31 #

      抱歉,我没听懂,也许您能详细说明或重新措辞您的问题?

  11. Vishal 2019 年 7 月 6 日 上午 4:40 #

    你好,
    如您的文章所述,当类别分离良好时,逻辑回归会变得不稳定。

    您能告诉我“类别分离良好”是什么意思吗?

    • Jason Brownlee 2019 年 7 月 6 日 上午 8:44 #

      线性分离指的是能够在输入特征空间中使用一条线或超平面按类别分离实例。

  12. Yihan Ma 2019 年 7 月 15 日 下午 7:38 #

    感谢您的文章。

    阅读您的文章后,我对使用此算法进行分类有点困惑。

    1. 根据我的理解,对于分类,训练数据和测试数据应该分开。当通过 LDA 降低维度时,我应该将训练数据和测试数据结合起来降低维度,还是只降低训练数据的维度,并使用特征向量 W 将测试数据映射到较低维度?

    2. 对于您在本文中提到的标准化,我应该将整个数据一起标准化,还是只标准化训练数据,并使用相同的比例映射测试数据?

    • Jason Brownlee 2019 年 7 月 16 日 上午 8:15 #

      理想情况下,任何数据准备都只使用训练数据进行计算,然后应用于/用于准备训练和测试数据,例如计算均值/标准差/等。

  13. Yihan Ma 2019 年 7 月 16 日 下午 5:37 #

    谢谢您的回复,

    所以您的意思是,我应该只使用训练数据来获取特征向量 W,并通过 W 映射测试数据以降低维度吗?

    对于标准化数据集,我也应该分开考虑训练集和测试集。

  14. Astarag Mohapatra 2019 年 9 月 5 日 下午 10:45 #

    为什么逻辑回归在类别分离良好时不稳定?

  15. Amol 2019 年 9 月 16 日 下午 2:16 #

    我有一个关于判别函数计算的问题:-

    Dk(x) = x * (muk/siga^2) – (muk^2/(2*sigma^2)) + ln(PIk)

    例如,如果我有一个两类问题,并且有 5 行/实例数据,其中包含 4 个特征。
    我需要为所有 5 行数据找到两类 Dk(x),这会为每行提供两个判别函数值。对于行中的单个特征,我可以计算判别式,但如果我有多个特征,我该如何进行?
    在多特征数据中,为了计算两类之间的判别函数值,传递了什么 x 值?

  16. Sam 2019 年 12 月 15 日 下午 6:52 #

    先生您好,当我们的自变量是分类变量时,我们可以使用 LDA 吗?

    谢谢,
    山姆

    • Jason Brownlee 2019 年 12 月 16 日 上午 6:15 #

      不,LDA 假设输入变量是数值型的。

  17. Allan 2020 年 5 月 6 日 上午 8:36 #

    您好,LDA/FDA 只能生成 2 个输出是正确的吗?

  18. Emma Wileman 2020 年 5 月 7 日 上午 8:44 #

    我想知道在降维中使用 LDA/FDA 的情况下。LDA/FDA 可以从“n”维度开始,以 k 维度结束,其中“k”小于“n”。或者 输出是“c-1”,其中“c”是类别数,数据维度为 n,且“n>c”。

    • Jason Brownlee 2020 年 5 月 7 日 上午 11:50 #

      是的,您可以使用 LDA 进行降维,并且可以将结果维数选择为参数,小于类别数。

  19. Md Azharuddin 2020 年 5 月 30 日 下午 10:19 #

    你好 Jason,我想知道如果我的数据集中有多个特征(X1、X2、X3...),那么我该如何计算判别式,因为判别函数期望单个“X”?

  20. Ben Specter 2020 年 7 月 1 日 下午 4:47 #

    你好 Jason,如何在在线学习中应用 LDA 算法?例如,我想能够用一些初始训练数据训练模型,然后用新的数据点更新它

    • Jason Brownlee 2020 年 7 月 2 日 上午 6:15 #

      也许是自定义代码,您可以随着新数据的到来逐步重新估计模型的系数?

      或者,每当有新的已知目标数据块可用时,就重新拟合模型。

  21. Ketan Jindal 2022 年 2 月 7 日 下午 8:52 #

    你好,
    如果我们有两个方差相同但均值不同的类别,LDA 可以对它们进行分类吗?

    谢谢
    Ketan

  22. Ketan Jindal 2022 年 2 月 7 日 下午 9:38 #

    如果两个类具有相同的均值但方差不同,LDA 可以分类吗?

  23. shima 2023 年 6 月 6 日 下午 4:47 #

    亲爱的老师您好
    非常感谢您的精彩课程。
    我无法下载算法思维导图,如果可能,请将机器学习算法思维导图的免费 pdf 发送给我。

发表评论

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。