线性判别分析(
discriminant_analysis.LinearDiscriminantAnalysis
)和二次判别分析(
discriminant_analysis.QuadraticDiscriminantAnalysis
)是两个经典的分类器。顾名思义,它们分别代表了线性决策面和二次决策面。
这些分类器十分实用,因为它们具有易于计算的封闭式解决方案,且本质上是多种类别的,它们已被证明在实践中能很好地工作并且没有任何超参数要调整。
该图显示了线性判别分析和二次判别分析的决策边界。由图可得,线性判别分析只能学习线性边界,而二次判别分析则可以学习二次边界,因此它更加灵活。
例子:
协方差椭圆形的线性和二次判别分析:LDA和QDA在合成数据上的比较。
使用线性判别分析进行降维
discriminant_analysis.LinearDiscriminantAnalysis
通过将输入数据投影到一个线性子空间来进行有监督的降维,该线性子空间由类间距离最大化的方向组成(在下面的数学部分中有对其进行精确的讨论)。输出的维数必须小于原来类别的数量,因此,通常这会缩减相当多的维数,并且仅在多类别中才有意义。
这是函数
discriminant_analysis.LinearDiscriminantAnalysis.transform
的实现。可以使用构造函数的
n_components
参数来设置要降到多少维。此参数对
discriminant_analysis.LinearDiscriminantAnalysis.fit
或
discriminant_analysis.LinearDiscriminantAnalysis.predict
没有影响 。
例子:
鸢尾属植物数据集的LDA和PCA二维投影的比较:在鸢尾属植物数据集上使用LDA和PCA算法的降维比较。
LDA和QDA分类器的数学公式
LDA和QDA都可以从概率模型中推导出来,该模型是对数据 的每一个的条件分布下进行建模。然后使用贝叶斯规则进行预测: 然后选择能够使该条件概率最大化的k。 更具体地说,对于线性和二次判别分析,会把 建模成多变量高斯分布(multivariate Gaussian distribution), 其密度函数如下所示: 其中d是特征分量的个数. 如果需要将这个模型当分类器进行使用,我们只需要从训练数据中估算出类的先验概率 (按类k的数量的比例),类的均值 (通过经验样本计算类的均值)和协方差矩阵(通过经验样本计算类的协方差矩阵,或通过正则估计器(estimator)计算得到:请参见下面有关收缩(shrinkage)的章节)。 对于LDA,假定每个类的高斯分布都与其他类共享同一个的协方差矩阵的话: (是指对所有的k),这会产生线性决策面(linear decision surfaces),可以通过比较对数概率比(log-probability ratios) 来看到这一现象: 对于QDA,我们对于每个类的高斯分布的协方差矩阵 没有做任何假设,这样就会产生二次决策面(quadratic decision surfaces)。请参见 3来获得相关更多详细信息。 注意:QDA与高斯朴素贝叶斯的关系(Gaussian Naive Bayes) 如果在QDA模型中假设协方差矩阵是对角阵的话,则对于每个类来说,假定输入是条件独立的,这就导致了分类器的结果等同于高斯朴素贝叶斯分类器naive_bayes.GaussianNB
。
LDA降维的数学公式
为了理解 LDA 在降维上的应用,我们从上面的 LDA 分类规则的几何重构(geometric reformulation)来解释,令K为目标类的总数量,既然我们在LDA中假定了所有类都共享同一个协方差矩阵Σ, 我们就可以重新改变数据规模(rescale the data)使得这个共享的协方差矩阵是个单位阵(identity): 然后,我们就会发现要对一个经过缩放的数据点进行分类就等价于在欧式空间中找到距离这个数据点最近的某个类的均值 ,只要找到这个均值,我们要分类的那个数据点的类标签就是该均值所代表的类标签。但是这仅仅只是在由所有类的所有 ,只要找到这个均值, 我们要分类的那个数据点的类标签就是该均值所代表的类标签。但是这仅仅只是在由所有类的所有 形成 的仿射子空间 K − 1 上效果才会很好. 这表明 LDA 分类器是通过把数据线性投影在 K − 1 维空间上来实现降维的。 我们可以进一步缩小维度L,通过投影到线性子空间 上来最大化 的方差(实际上,我们正在为转换后的类的 提供一种PCA表示形式)。这个L对应于discriminant_analysis.LinearDiscriminantAnalysis.transform
方法中使用的
n_components
参数 。请参见3来获得有关更多详细信息。
收缩(Shrinkage)
在训练数据的样本数量比特征数量少的情况下,收缩(Shrinkage)是一种改进协方差矩阵估计的工具。在这种情况下,样本数据的经验协方差是一个不好的估计量。通过将类discriminant_analysis.LinearDiscriminantAnalysis
的
shrinkage
参数设置为“自动(auto)”,根据Ledoit 和 Wolf [4] 的介绍,这样做可以以解析的方式自动确定最优的收缩参数。需要注意的是,目前收缩(Shrinkage)只能在求解器
solver
的参数为 “lsqr” 或 “eigen”的时候才能发挥作用。
该
shrinkage
参数也可以手动设置在0和1之间。0对应于无收缩(这意味着将使用经验协方差矩阵),1对应于完全收缩(这意味着对角矩阵的方差将用作协方差矩阵的估计值)。将参数
shrinkage
的取值设定在0到1之间的话,就可以估计出一个收缩(Shrinkage)版的协方差矩阵。
估计算法
默认的求解器(solver)是 “svd”,它既可以进行分类也可以对数据进行变换(transform),且不依赖于协方差矩阵的计算,在特征数量很大的时候这是一个很大的优势。但是“svd”求解器(solver)不能与shrinkage
参数同时使用。
“ lsqr”求解器(solver)是仅适用于分类的高效算法。它支持收缩(Shrinkage)。
“eigen”求解器(solver)是一种通过优化类间散度(between class scatter)与类内散度(within class scatter)的比率进行求解的方法,它也支持收缩(Shrinkage),“eigen” 求解器(solver)需要计算协方差, 因此这种求解器不适用于高维特征的情况。
案例:
应用于分类任务的正常(Normal)和缩减(Shrinkage)的LDA: 具有和不具有收缩(Shrinkage)的LDA分类器的比较。
参考文献:
“The Elements of Statistical Learning”, Hastie T., Tibshirani R., Friedman J., Section 4.3, p.106-119, 2008.
Ledoit O, Wolf M. Honey, I Shrunk the Sample Covariance Matrix. The Journal of Portfolio Management 30(4), 110-119, 2004.
☆☆☆为方便大家查阅,小编已将scikit-learn学习路线专栏
文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“系列文章”,如图:
欢迎大家和我一起沿着scikit-learn文档这条路线,一起巩固机器学习算法基础。(添加微信:mthler,备注:sklearn学习,一起进【sklearn机器学习进步群】开启打怪升级的学习之旅。)