天天看点

Python 数据分析实例——判别分析

作者:昌华量化
Python 数据分析实例——判别分析

判别分析是一种经典的分析方法,其利用已知类别的样本建立判别模型,对未知类别的样本进行分类。本节主要讨论费歇(Fisher)判别分析的方法。

1.Fisher线性判别原理

Fisher判别的思想是投影,使多维问题简化为一维问题来处理。选择一个适当的投影轴,使所有的样品点都投影到这个轴上得到一个投影值。对这个投影轴的方向的要求是:使每一类内的投影值所形成的类内离差尽可能小,而不同类间的投影值所形成的类间离差尽可能大。

Fisher判别原理示意图如图1所示。

Python 数据分析实例——判别分析

图1 Fisher判别原理示意图

2.公式推导

图8.7给出了一个二维的示意图,接下来讨论将以二维的情况进行分类来逐步分析原理和实现。

对于给定的数据集D(已经设置好分类标签),Xi、Ui和∑i分别表示给定类别i的集合、均值向量和协方差矩阵。现将数据投影到直线y=wTx 上,则样本中心的投影为y=w1∗u1+w2∗u2+…+wn∗un(n为样本维度,接下来的讨论中将统一设置为2),写成向量形式则为wTu=y。若将所有的样本都投影到直线上,则两类样本的协方差分别为wT∑0w和wT∑1w。

要想达到较好的分类效果,应该使得同类样本的投影点尽可能接近,也就是让同类样本投影点的协方差尽可能小,即(wT∑0w+wT∑0w)尽可能小。同时,应该保证不同类样本的投影点尽可能互相远离,即||wTu0-wTu1||尽可能大。如果同时考虑两者的关系,可以得到下面的需要最大化的目标:

Python 数据分析实例——判别分析

这里定义类内散度矩阵(Within-Class Scatter Matrix):

Python 数据分析实例——判别分析

以及类间离散度矩阵(Between-Class Scatter Matrix):

Python 数据分析实例——判别分析

则J可重写为:

Python 数据分析实例——判别分析

3.编程实现

【例1】

下面直接用Scikit-Learn的接口来生成数据。

Python 数据分析实例——判别分析
Python 数据分析实例——判别分析

Fisher线性判别如图2所示。

Python 数据分析实例——判别分析

图2 Fisher线性判别