线性判别分析(Linear Discriminant Analysis,LDA),一般的机器学习资料$$^{[1]}$$将其笼统地归类为“分类算法”,实则这是一个值得探究的问题。
在参考资料 [1] 中,已经比较详细地讲解了费雪的线性判别分析,此处则从贝叶斯定理出发,阐述 LDA 基本原理,推导过程所用数学知识可以参考 [3] 。
- Probability,译为“概率”,这是公认的,也是概率论教材中普遍采用的翻译。另外,还有“几率”、“机率”等翻译,皆为此单词的中文译名。
- Odds,翻译为“优势”。对此单词,有诸多译名,比如“赔率”、“几率”(周志华教授的《机器学习》一书中用此翻译)、“比值比”、“发生比”等。此处,采信“优势”的翻译(感谢苏州大学唐煜教授指导)。
概率,在统计学中有严格的定义,请参阅《机器学习数学基础》。
以抛硬币为例,正面朝上的概率为:
优势 Odds 不是概率。
优势定义式:
$$
\text{odds}=\frac{p}{1-p}\tag{1}
$$
其中
对数优势,即计算
$$
\text{log}(\text{odds})=\text{log}\frac{p}{1-p}\tag{2}
$$
通常是以
假设数据集
以
**问题:**现有给定一个样本
根据贝叶斯定理$$^{[4]}$$,有:
$$ P(C_j|\pmb{x})=\frac{p(\pmb{x}|C_j)P(C_j)}{p(\pmb{x})}\tag{3} $$ 其中:
-
$$P(C_j)$$ 是类别$$C_j$$ 出现的概率,称为先验概率。 -
$$p(x|C_j)$$ 是给定类别$$C_j$$ ,样本数据$$\pmb{x}$$ 的概率密度函数,称为似然函数(likelihood,“看起来像”)。 -
$$p(\pmb{x})$$ 是样本数据$$\pmb{x}$$ 的概率密度函数,称为证据,根据全概率公式,算式为: $$ p(\pmb{x})=p(\pmb{x}|C_1)P(C_1)+\cdots+p(\pmb{x}|C_k)P(C_k)\tag{4} $$ -
$$P(C_j|\pmb{x})$$ 是给定样本数据$$\pmb{x}$$ 情况下,该样本属于$$C_j$$ 的概率,称为后验概率。
对贝叶斯定理的全面理解,参阅《机器学习数学基础》5.2.3节。
由贝叶斯定理,判定:样本数据
又因为对任何后验概率
考虑二分类问题,即
于是(4)式即为:$$p(\pmb{x})=p(\pmb{x}|C_1)P(C_1)+p(\pmb{x}|C_2)P(C_2)$$ 。
根据(3)式,计算
根据(3)式,可得(注意,下面的(6)式跟上面的(5)式分母相比,互为倒数,分子分母位置倒过来了): $$ \frac{P(C_1|\pmb{x})}{P(C_2|\pmb{x})}=\frac{p(\pmb{x}|C_1)P(C_1)}{p(\pmb{x}|C_2)P(C_2)}\tag{6} $$
即
由于对数优势中的对数是以
- 对称性:$$f(-a)=1-f(a)$$
- 反函数:$$a=\text{log}\left(\frac{f}{1-f}\right)$$ ,即(7)式中的 logit 函数
- 导数:$$\frac{df}{da}=f(1-f)$$
在神经网络中,logistic 函数常作为激活函数(参阅《机器学习数学基础》4.4.1节、4.4.4节),且喜欢用符号
如果考虑多分类问题,即
根据贝叶斯定理构建分类器。
线性判别分析:linear discriminant analysis,LDA。
二分类的线性判别分析,即
假设:(此假设是 LDA 的重要适用条件)
-
$$p(\pmb{x}|C_j)$$ 服从正态分布 - 所有类别有相同的协方差矩阵
即: $$ p(\pmb{x}|C_j)=\frac{1}{(2\pi)^{n/2}|\pmb{\Sigma}|^{1/2}}\text{exp}\left(-\frac{1}{2}(\pmb{x}-\pmb{\mu}_j)^\text{T}\pmb{\Sigma}^{-1}(\pmb{x}-\pmb{\mu}_j)\right)\tag{15} $$ 其中:
-
$$\pmb{\mu}_j\in\mathbb{R}^d$$ 是类别$$C_j$$ 的均值(向量) -
$$\pmb{\Sigma}$$ 是$$(d\times d)$$ 的协方差矩阵,$$|\pmb{\Sigma}|$$ 表示协方差矩阵对应的行列式 -
$$j=1,2$$ ,二分类
由 logit 函数(对数优势函数)(7)式可知,$$a=a(\pmb{x})$$ ,即
$$
\begin{split}a(\pmb{x})&=\text{log}\frac{p(\pmb{x}|C_1)P(C_1)}{p(\pmb{x}|C_2)P(C_2)}\&=\text{log}p(\pmb{x}|C_1)+\text{log}P(C_1)-\text{log}p(\pmb{x}|C_2)-\text{log}P(C_2) \end{split}\tag{16}
$$
对(15)式取对数,得到:
$$
\begin{split}\text{log}p(\pmb{x}|C_j)&=\text{log}\left[\frac{1}{(2\pi)^{n/2}|\pmb{\Sigma}|^{1/2}}\text{exp}\left(-\frac{1}{2}(\pmb{x}-\pmb{\mu}_j)^\text{T}\pmb{\Sigma}^{-1}(\pmb{x}-\pmb{\mu}_j)\right)\right]\&=-\text{log}\left((2\pi)^{n/2}|\pmb{\Sigma}|^{1/2}\right)+ \left(-\frac{1}{2}(\pmb{x}-\pmb{\mu}_j)^\text{T}\pmb{\Sigma}^{-1}(\pmb{x}-\pmb{\mu}_j)\right),\quad(j=1,2)\end{split}\tag{17}
$$
将(17)式代入到(16)式中,得到:
$$
\begin{split}a(\pmb{x})
&=&&-\frac{1}{2}(\pmb{x}-\pmb{\mu}_1)^\text{T}\pmb{\Sigma}^{-1}(\pmb{x}-\pmb{\mu}_2)
+\frac{1}{2}(\pmb{x}-\pmb{\mu}_2)^\text{T}\pmb{\Sigma}^{-1}(\pmb{x}-\pmb{\mu}_2)+\text{log}P(C_1)-\text{log}P(C_2)
\
&=&&-\frac{1}{2}\pmb{x}^{\text{T}}\pmb{\Sigma}^{-1}\pmb{x}
+\frac{1}{2}\pmb{x}^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_1
+\frac{1}{2}\pmb{\mu}_1^{\text{T}}\pmb{\Sigma}^{-1}\pmb{x}
-\frac{1}{2}\pmb{\mu}_1^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_1
\
& &&+\frac{1}{2}\pmb{x}^{\text{T}}\pmb{\Sigma}^{-1}\pmb{x}
-\frac{1}{2}\pmb{x}^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_2
-\frac{1}{2}\pmb{\mu}_2^{\text{T}}\pmb{\Sigma}^{-1}\pmb{x}
+\frac{1}{2}\pmb{\mu}_2^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_2+\text{log}P(C_1)-\text{log}P(C_2)
\
&=&&\frac{1}{2}\pmb{x}^{\text{T}}\pmb{\Sigma}^{-1}(\pmb{\mu}_1-\pmb{\mu}_2)+\frac{1}{2}(\pmb{\mu}_1^{\text{T}}-\pmb{\mu}_2^{\text{T}})\pmb{\Sigma}^{-1}\pmb{x}
\
& &&-\frac{1}{2}\pmb{\mu}_1^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_1+\frac{1}{2}\pmb{\mu}_2^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_2+\text{log}P(C_1)-\text{log}P(C_2)
\
&=&&\frac{1}{2}\pmb{x}^{\text{T}}\pmb{\Sigma}^{-1}(\pmb{\mu}_1-\pmb{\mu}_2)+\frac{1}{2}(\pmb{\mu}_1-\pmb{\mu}_2)^{\text{T}}\pmb{\Sigma}^{-1}\pmb{x}
\
& &&-\frac{1}{2}\pmb{\mu}_1^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_1+\frac{1}{2}\pmb{\mu}_2^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_2+\text{log}P(C_1)-\text{log}P(C_2)
\end{split}
\tag{18}
$$
在(18)式中,二次项
由于
故,(18)式等于: $$ \begin{split}a(\pmb{x})&=&&(\pmb{\mu}_1-\pmb{\mu}_2)^{\text{T}}\pmb{\Sigma}^{-1}\pmb{x} \ & &&-\frac{1}{2}\pmb{\mu}_1^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_1+\frac{1}{2}\pmb{\mu}_2^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_2+\text{log}P(C_1)-\text{log}P(C_2) \end{split}\tag{19} $$ 令:
$$\pmb{w}=\pmb{\Sigma}^{-1}(\pmb{\mu}_1-\pmb{\mu}_2)$$ $$w_0=-\frac{1}{2}\pmb{\mu}_1^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_1+\frac{1}{2}\pmb{\mu}_2^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_2+\text{log}P(C_1)-\text{log}P(C_2)$$
则(19)式可以写成:
$$
a(\pmb{x})=\pmb{w}^{\text{T}}\pmb{x}+w_0\tag{20}
$$
将(20)式代入到(10),得到后验概率
这就是所谓的“线性判别”,因为(22)式是“线性”函数。
所以,问题就转化为如何确定
- 先验概率:$$P(C_j),j=1,2$$
- 均值向量:$$\pmb{\mu}_j,j=1,2$$
- 协方差矩阵:$$\pmb{\Sigma}$$
设样本数据集 $$\mathcal{X}={\pmb{x}i,y_i}{i=1}^n$$ ,其中:
-
$$\pmb{x}_i\in\mathbb{R}^n$$ 表示一个样本,共有$$d$$ 个特征 -
$$y_i=1$$ 表示$$i\in C_1$$ ;$$y_i=0$$ 表示$$i\in C_2$$
并设先验概率
按照前述假设:$$p(\pmb{x}|C_j)$$ 服从正态分布,用
-
如果
$$\pmb{x}_i$$ 来自$$C_1$$ 类,则: $$ p(\pmb{x}_i,C_1)=p(\pmb{x}_i|C_1)P(C_1)=N(\pmb{x}_i|\pmb{\mu}_1,\pmb{\Sigma})\cdot \pi=\pi N(\pmb{x}_i|\pmb{\mu}_1,\pmb{\Sigma})\tag{23} $$ -
如果
$$\pmb{x}_i$$ 来自$$C_2$$ 类,则: $$ p(\pmb{x}_i,C_2)=p(\pmb{x}_i|C_2)P(C_2)=(1-\pi)N(\pmb{x}_i|\pmb{\mu}_2,\pmb{\Sigma})\tag{24} $$
写出似然函数:
$$
\begin{split}L(\pi,\pmb{mu}_1,\pmb{\mu}_2,\pmb{\Sigma}|\mathcal{X})&=p(\mathcal{X}|\pi,\pmb{\mu}_1,\pmb{\mu}2,\pmb{\Sigma})
\
&=\prod{i=1}^n\left[p(\pmb{x}_i,C_1)\right]^{y_i}\left[p(\pmb{x}i,C_2)\right]^{1-y_i}
\
&=\prod{i=1}^n\left[\pi N(\pmb{x}_i|\pmb{\mu}_1,\pmb{\Sigma})\right]^{y_i}\left[(1-\pi) N(\pmb{x}_i|\pmb{\mu}2,\pmb{\Sigma})\right]^{1-y_i}
\end{split}\tag{25}
$$
因为对数是单调递增函数,所以,最大化 $$L$$ 就等价于最大化 $$\text{log}L$$ (通常取以 $$e$$ 为底的对数),于是得:
$$
\text{log}L=\sum{i=1}^n\left(y_i[\text{log}\pi+\text{log} N(\pmb{x}_i|\pmb{\mu}_1,\pmb{\Sigma})]+(1-y_i)[\text{log}(1-\pi)+\text{log} N(\pmb{x}_i|\pmb{\mu}_2,\pmb{\Sigma})]\right)\tag{26}
$$
接下来分别将(26)式对
1. 计算
令
首先计算
$$\because\frac{\partial\pmb{a}^{\text{T}}\pmb{x}}{\pmb{x}}=\frac{\pmb{x}^{\text{T}}\pmb{a}}{\pmb{x}}=\pmb{a},\quad\therefore\frac{\partial}{\partial\pmb{\mu}_1}(\pmb{\mu}_1^{\text{T}}\pmb{\Sigma}^{-1}\pmb{x}_i)=\pmb{\Sigma}^{-1}\pmb{x}_i$$ $$\because\frac{\partial\pmb{x}^\text{T}\pmb{Ax}}{\partial\pmb{x}}=(\pmb{A}+\pmb{A}^{\text{T}})\pmb{x},\quad\therefore\frac{\partial}{\partial\pmb{\mu}_1}\left(-\frac{1}{2}\pmb{\mu}_1^{\text{T}}\pmb{\Sigma}^{-1}\pmb{\mu}_1\right)=-\frac{1}{2}(\pmb{\Sigma}^{-1}+(\pmb{\Sigma}^{-1})^{\text{T}})\pmb{\mu}_1=-\pmb{\Sigma}^{-1}\pmb{\mu}_1$$
令
将(15)式正态分布的具体函数代入到(26)式,并根据对数展开,将含有
另外,还是用了矩阵迹的性质:$$\text{trace}(\pmb{ABC})=\text{trace}(\pmb{BCA})=\text{trace}(\pmb{CBA})$$ $$ \begin{split} \text{log}L &= && -\frac{1}{2}\sum_{i=1}^ny_i\text{log}|\pmb{\Sigma}|-\frac{1}{2}\sum_{i=1}^ny_i(\pmb{x}_i-\pmb{\mu}_1)^{\text{T}}\pmb{\Sigma}^{-1}(\pmb{x}i-\pmb{\mu}1) \ & &&-\frac{1}{2}\sum{i=1}^n(1-y_i)\text{log}|\pmb{\Sigma}|-\frac{1}{2}\sum{i=1}^n(1-y_i)(\pmb{x}_i-\pmb{\mu}_2)^{\text{T}}\pmb{\Sigma}^{-1}(\pmb{x}i-\pmb{\mu}2)+\beta \ &=&&-\frac{1}{2}\sum{i\in C_1}\text{log}|\pmb{\Sigma}|-\frac{1}{2}\sum{i\in C_1}\text{trace}\left((\pmb{x}_i-\pmb{\mu}_1)^{\text{T}}\pmb{\Sigma}^{-1}(\pmb{x}i-\pmb{\mu}1)\right) \ & &&-\frac{1}{2}\sum{i\in C_2}\text{log}|\pmb{\Sigma}|-\frac{1}{2}\sum{i\in C_2}\text{trace}\left((\pmb{x}_i-\pmb{\mu}_2)^{\text{T}}\pmb{\Sigma}^{-1}(\pmb{x}_i-\pmb{\mu}2)\right)+\beta \ &=&&-\frac{n}{2}\text{log}|\pmb{\Sigma}|-\frac{1}{2}\sum{i\in C_1}\text{trace}\left(\pmb{\Sigma}^{-1}(\pmb{x}_i-\pmb{\mu}_1)(\pmb{x}_i-\pmb{\mu}1)^{\text{T}}\right) \ & &&-\frac{1}{2}\sum{i\in C_2}\text{trace}\left(\pmb{\Sigma}^{-1}(\pmb{x}_i-\pmb{\mu}_2)(\pmb{x}_i-\pmb{\mu}2)^{\text{T}}\right)+\beta \ &=&&-\frac{n}{2}\text{log}|\pmb{\Sigma}|-\frac{1}{2}\text{trace}\left(\pmb{\Sigma}^{-1}\sum{i\in C_1}(\pmb{x}_i-\pmb{\mu}_1)(\pmb{x}_i-\pmb{\mu}1)^{\text{T}}+\pmb{\Sigma}^{-1}\sum{i\in C_1}(\pmb{x}_i-\pmb{\mu}_2)(\pmb{x}_i-\pmb{\mu}_2)^{\text{T}}\right)+\beta \ &=&&-\frac{n}{2}\text{log}|\pmb{\Sigma}|-\frac{n}{2}\text{trace}(\pmb{\Sigma}^{-1}\pmb{S})+\beta \end{split}\tag{32} $$ 其中: $$ \pmb{S}=\frac{n_1}{n}\pmb{S}_1+\frac{n_2}{n}\pmb{S}_2\\pmb{S}j=\frac{1}{n_j}\sum{i\in C_j}(\pmb{x}_i-\pmb{\mu}_j)(\pmb{x}_i-\pmb{\mu}_j)^{\text{T}}, \quad(j=1,2)\tag{33} $$ 根据迹与行列式导数公式:
$$\frac{\partial\text{log}(det\pmb{X})}{\partial\pmb{X}}=(\pmb{X}^{-1})^{\text{T}}$$ $$\frac{\partial\text{trace}(\pmb{AX}^{-1}\pmb{B})}{\partial\pmb{X}}=-(\pmb{X}^{-1}\pmb{BAX}^{-1})^{\text{T}}$$
计算(32)式对
将上述二分类下的公式推广到多分类,即:$$j=1,\cdots,k$$
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 的模糊性,其目的更明确,更能反应样本间的差异
缺点:
- 不适合对非高斯分布样本进行降维
- 降维最多到
$$k-1$$ 维 - 在样本分类信息依赖方差而不是均值的时候,降维效果不好
- 有过拟合的可能
[1]. 费雪的线性判别分析
[2]. 谢文睿等. 机器学习公式详解. 北京:人民邮电出版社
[3]. 齐伟. 机器学习数学基础. 北京:电子工业出版社
[4]. 贝叶斯定理