1.2. 线性与二次判别分析
线性判别分析(discriminant_analysis.LinearDiscriminantAnalysis
)和二次判别分析(discriminant_analysis.QuadraticDiscriminantAnalysis
)是两种经典的分类器。这两种模型如它们的名字所揭示的那样,分别用作线性和二次决策面。
这些分类器的优势在于,它们有封闭形式解,而且便于计算。其与生俱来就支持多类别分类,在实际应用中表现出色,而且没有超参数需要调优。
上图给出了线性判别分析和二次判别分析的决策平面。其中底下两幅图表明,线性判别分析只能学习到线性边界,而二次判别分析可以学到二次边界,所以更加灵活。
例子
- Linear and Quadratic Discriminant Analysis with confidence ellipsoid 给出了在人造数据集上对LDA和QDA的比较。
1.2.1. 使用线性判别分析进行维度缩减
discriminant_analysis.LinearDiscriminantAnalysis
可以用来进行有监督的维度缩减。其原理是把输入数据投影到一个线性子空间中,而该子空间的方向将不同类别之间的距离最大化(更准确的数学语言表示请见下文)。输出数据的维度一定小于类别的个数,因此总体来讲这是一个比较强的维度缩减方法,而且只在多类别问题中有意义。
该过程在discriminant_analysis.LinearDiscriminantAnalysis.transform
中实现。可以通过n_components
来设置目标维度数。该参数不影响discriminant_analysis.LinearDiscriminantAnalysis.fit
或 discriminant_analysis.LinearDiscriminantAnalysis.predict
。
例子
- Comparison of LDA and PCA 2D projection of Iris dataset:比较LDA和PCA在Iris数据集上的维度缩减性
1.2.2. LDA与QDA分类器的数学表达
无论是LDA还是QDA,都可以从简单的条件概率模型中推导出。这里的概率模型指的是给定类别这一条件下这一条件概率模型。这样,可以通过贝叶斯定理求出预测值: 最后选择能够最大化该条件概率的值。
更准确地说,对于线性和二次判别分析,的模型为多变量高斯分布,分布密度为: 为了把这个模型用作分类器,我们只需要从训练数据中估计以下值
- 所属类别的概率。该值可以通过求属于类别的数据所占比例获得。
- 每个类别的期望。该值可以通过求属于类别的数据的均值获得。
- 协方差矩阵。该值可以通过分析样本数据得出,也可以通过正则化的估计函数得出。可参考下面关于“收缩(shrinkage)”的章节。
对于LDA,我们假设每个类别的高斯分布都有相同的协方差矩阵,即对所有有。这样才能得出类别之间的线性决策平面(可以通过不同类的对数概率比得出)。即 对于QDA,我们对高斯分布的协方差矩阵不做任何假设,可以得到二次决策平面。更多细节可参看[3]。
注:与高斯朴素贝叶斯的关系
如果在QDA模型中假设协方差矩阵是对角矩阵(即假设类别之间条件独立),则得到的分类器与高斯朴素贝叶斯分类器naive_bayes.GaussianNB
等价。
1.2.3. LDA维度缩减的数学形式
为了理解LDA在维度缩减中的应用,这里有必要从几何的角度上重新回顾一下上面说明的LDA分类原理。记为所有目标类别的总个数。由于在LDA中假设所有类别都有相同的估计协方差,因此可以对数据进行重新缩放,使得协方差矩阵是单位矩阵: 由此可得,在数据缩放以后,若要对某个数据点进行分类,则等价于找到与该点欧几里得距离最近的类别均值。但是这个分类过程也可以在把原数据点投影到所有类别的所有生成的维仿射子空间后得到。这说明LDA分类器隐含着一个思想,就是通过把数据线性投影到维空间进行维度缩减。
甚至我们可以设定投影过后数据的新维度,使缩减量不止为1维。即将数据投影到维线性子空间,该子空间将投影后得到的的方差最大化(实际上可以看作是在为转换后的类别均值做主成分分析)。这个对应于discriminant_analysis.LinearDiscriminantAnalysis.transform
方法中用到的n_components
参数。更详细的解释参看[3]。
1.2.4. 收缩
在训练样本数小于特征总数时,可以借助“收缩”这一工具来提高协方差矩阵估计的准确度。在这种情况下,把按照经验得到的样本协方差作为估计量效果会很差。把discriminant_analysis.LinearDiscriminantAnalysis
类的shrinkage
参数设为“auto”就可以使用收缩LDA。这样,根据Ledoit和Wolf提出的引理[4],sklearn可以通过分析的方式自动确定最优的收缩参数。需要注意的是,只有把solver
参数设为“lsqr”或者“eigen”才能让当前的收缩起作用。
也可以手动把参数shrinkage
设为一个0到1中间的值。特别的,当该值为0时,不进行收缩(即使用经验得到的协方差矩阵);该值为1时,使用完全收缩(即使用对角的方差矩阵作为协方差矩阵的估计值)。不走极端则会得到协方差矩阵的收缩估计版本。
1.2.5. 估计算法
默认的求解器为“svd”,在分类和转换问题上都可用,而且不依赖协方差矩阵的计算。当特征数量比较大时,该方法表现不错。但是它不能和收缩一起使用。
“lsqr”求解器是一种高效的算法,只能用于回归,支持收缩。
“eigen”求解器基于optimization of the between class scatter to within class scatter ratio,在分类和转换问题上都可用。不过该求解器需要计算协方差矩阵,所以在特征数目比较多时不太适合。
例子
Normal and Shrinkage Linear Discriminant Analysis for classification 比较了使用和不用收缩的LDA分类器
参考文献
[3] “The Elements of Statistical Learning”, Hastie T., Tibshirani R., Friedman J., Section 4.3, p.106-119, 2008.
[4] Ledoit O, Wolf M. Honey, I Shrunk the Sample Covariance Matrix. The Journal of Portfolio Management 30(4), 110-119, 2004.