线性判别分析

线性判别分析(Linear Discriminant Analysis,LDA),一般的机器学习资料将其笼统地归类为“分类算法”,实则这是一个值得探究的问题。

在参考资料 [1] 中,已经比较详细地讲解了费雪的线性判别分析,此处则从贝叶斯定理出发,阐述 LDA 基本原理,推导过程所用数学知识可以参考 [3] 。

优势 Odds

  • Probability,译为“概率”,这是公认的,也是概率论教材中普遍采用的翻译。另外,还有“几率”、“机率”等翻译,皆为此单词的中文译名。
  • Odds,翻译为“优势”。对此单词,有诸多译名,比如“赔率”、“几率”(周志华教授的《机器学习》一书中用此翻译)、“比值比”、“发生比”等。此处,采信“优势”的翻译(感谢苏州大学唐煜教授指导)。

概率,在统计学中有严格的定义,请参阅《机器学习数学基础》。

以抛硬币为例,正面朝上的概率为:

优势 Odds 不是概率。

优势定义式:

其中 是概率。

对数优势,即计算 通常是以 为底的对数。

分类问题

数据集

假设数据集 ,样本数量是 ,特征数量(维数)是 ,即样本数据 空间。

作为样本所属的类别,或者说是样本标签。若 属于第 类或属于 类,即其标签是 ,亦可表示为

问题:现有给定一个样本 ,判断它属于哪一个类别?

贝叶斯定理

根据贝叶斯定理,有:

其中:

  • 是类别 出现的概率,称为先验概率

  • 是给定类别 ,样本数据 的概率密度函数,称为似然函数(likelihood,“看起来像”)。

  • 是样本数据 的概率密度函数,称为证据,根据全概率公式,算式为:

  • 是给定样本数据 情况下,该样本属于 的概率,称为后验概率

对贝叶斯定理的全面理解,参阅《机器学习数学基础》5.2.3节。

由贝叶斯定理,判定:样本数据 应归属于具有最大后验概率的类别,即:若 ,则 属于类别

又因为对任何后验概率 ,(3)式的 都相同,所以: ,即:若 ,则 属于类别

S 形函数

考虑二分类问题,即 ,则(3)式中的后验概率有两个:

于是(4)式即为:

根据(3)式,计算 (5)式中最后得到的分母:

根据(3)式,可得(注意,下面的(6)式跟上面的(5)式分母相比,互为倒数,分子分母位置倒过来了):

相对 的优势,若取优势对数,得: (7)式是对数优势(log odds)函数,也称为 logit 函数

由于对数优势中的对数是以 为底,由(7)式可得: (8)式的倒数为: 将(9)式代入到(5)式,得: 函数 是 S 形函数(sigmoid function),也称为 logistic 函数。它具有如下形式:

  • 对称性:
  • 反函数: ,即(7)式中的 logit 函数
  • 导数:

在神经网络中,logistic 函数常作为激活函数(参阅《机器学习数学基础》4.4.1节、4.4.4节),且喜欢用符号 表示,则其导数:

Softmax 函数

如果考虑多分类问题,即 ,将(4)式代入(3)式,并将分母(4)式用求和符号表示: 令: 其中对数让然是以 为底,则: 将(13)式代入到(11)式,则: (14)式所得函数即称为 Softmax 函数

二分类的线性判别分析

构建线性判别分析的分类器

根据贝叶斯定理构建分类器。

线性判别分析:linear discriminant analysis,LDA。

二分类的线性判别分析,即

假设:(此假设是 LDA 的重要适用条件)

  • 服从正态分布
  • 所有类别有相同的协方差矩阵

即: 其中:

  • 是类别 的均值(向量)
  • 的协方差矩阵, 表示协方差矩阵对应的行列式
  • ,二分类

由 logit 函数(对数优势函数)(7)式可知, ,即 对(15)式取对数,得到: 将(17)式代入到(16)式中,得到: 在(18)式中,二次项 之和等于

由于 是对称矩阵, ,有:

故,(18)式等于: 令:

则(19)式可以写成: 将(20)式代入到(10),得到后验概率 的重新表述: 由于是二分类,则 ,根据(21)式,故两个类别的边界(超平面)为: 也就是说,如果 ,则样本 属于 ,否则属于

这就是所谓的“线性判别”,因为(22)式是“线性”函数。

所以,问题就转化为如何确定 。由(19)式可知,必须要知道:

  • 先验概率:
  • 均值向量:
  • 协方差矩阵:

用最大似然估计求解

设样本数据集 ,其中:

  • 表示一个样本,共有 个特征
  • 表示 表示

并设先验概率 ,则

按照前述假设: 服从正态分布,用 表示正态分布的概率密度函数:

  • 如果 来自 类,则:

  • 如果 来自 类,则:

写出似然函数: 因为对数是单调递增函数,所以,最大化 就等价于最大化 (通常取以 为底的对数),于是得: 接下来分别将(26)式对 求导,并令其导数为零,即可得到最优解

1. 计算 在(27)式求导中,使用了自然对数的导数:

,则可得到 的最大似然估计,即: 2. 计算

首先计算 ,由(26)式可知,只有第一个方括号中的项含有 ,并参考(15)式,故: 在上面计算导数的时候,使用了矩阵导数的公式(参考《机器学习数学基础》213页):

,则得: 同样方法,可以求得: 3. 计算

将(15)式正态分布的具体函数代入到(26)式,并根据对数展开,将含有 的项都写出来,其余的项用 表示。

另外,还是用了矩阵迹的性质: 其中: 根据迹与行列式导数公式:

计算(32)式对 的导数: 令(34)式等于零,则得到协方差矩阵的最大似然估计: 也就是样本(有偏差的)协方差矩阵 的加权平均。

多分类的线性判别分析

将上述二分类下的公式推广到多分类,即:

表示类别 的数据样本数量, ,则:

注意

LDA 要求数据样本服从正态分布,且所有类别有相同协方差矩阵。

但对离群值敏感,若有离群值,则会造成较大的参数估计偏差。

实践案例

在 scikit-learn 中,提供了实现线性判别分析的专门模型:https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html

这是一个分类器模型,要求数据必须符合正态分布,并且各类有相同的协方差矩阵。这个模型,也能够实现对数据的降维。

1. 导入数据

# 使用鸢尾花数据集
import pandas as pd
from sklearn import datasets

iris = datasets.load_iris(as_frame=True)  # 载入鸢尾花数据集
df = iris.data
df['target'] = iris.target   # 将数字表示的标签列添加到 df
df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names)  # 增加样本类别名称列
df.head()

2. 划分数据集

from sklearn.model_selection import train_test_split
X = df[iris.feature_names]   # 得到样本数据 sepal length\sepal width\petal length\petal width (cm)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

3. 训练模型

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

lda = LDA()
lda.fit(X_train, y_train)

4.简单评估

lda.score(X_test, y_test)

5. 可视化显示结果

lda = LDA(n_components=1)      # 降维
X_1d = lda.fit(X,y).transform(X)
print(X_1d[:5])    # 降维之后
print(X)           # 降维之前
df['X'] = X_1d
df.head()
import seaborn as sns
sns.scatterplot(data=df, x="X", y="target", hue="species")

总结

优点:

  • 使用类别的先验知识
  • 以标签、类别衡量差异性的有监督降维方法,相对于 PCA 的模糊性,其目的更明确,更能反应样本间的差异

缺点:

  • 不适合对非高斯分布样本进行降维
  • 降维最多到
  • 在样本分类信息依赖方差而不是均值的时候,降维效果不好
  • 有过拟合的可能

参考资料

[1]. 费雪的线性判别分析

[2]. 谢文睿等. 机器学习公式详解. 北京:人民邮电出版社

[3]. 齐伟. 机器学习数学基础. 北京:电子工业出版社

[4]. 贝叶斯定理

作者: 老齐
链接: http://math.itdiffer.com/bayes-lda.html
来源: 机器学习
本文原创发布于「机器学习」,转载请注明出处,谢谢合作!

http://math.itdiffer.com/images/0.jpg

results matching ""

    No results matching ""