二次判别分析Quadratic Discriminant Analysis(QDA)

与线性判别分析类似,二次判别分析是另外一种线性判别分析算法,二者拥有类似的算法特征,区别仅在于:当不同分类样本的协方差矩阵相同时,使用线性判别分析;当不同分类样本的协方差矩阵不同时,则应该使用二次判别。关于线性判别分析的更多内容,请在文章《线性判别分析Linear Discriminant Analysis (LDA)》中查看。

为了清楚的了解LDA和QDA的应用差异,下图显示了在固定协方差矩阵以及不同协方差矩阵下LDA和QDA的表现差异:

plot_lda_qda_00111

由图中可以看出,在固定协方差矩阵下,LDA和QDA是没有分类结果差异的(上面两张图);但在不同的协方差矩阵下,LDA和QDA的分类边界明显存在差异,而且LDA已经不能准确的划分数据(下面两张图)。

那么,协方差矩阵是什么?

在统计学中,有几个描述样本分布的基本指标,例如均值、方差、标准差、峰度、偏度、最大值、最小值、极值等,这些都描述的是一个维度;如果一个样本存在多个维度,除了可以单独描述每个维度的分布规律外,如何描述不同维度间的关系?

协方差就是用来描述维度间关系的一个指标。它的定义为:任意两个随机变量X和Y的协方差,记为Cov(X,Y),定义为

Cov(X,Y)=E{[ X-E(X)][Y-E(Y) ]}

其中E(X)、E(Y)反映分量X、Y各自的均值。它反映的是任意两个随机变量(或者是任意两个维度) 间的关系:

  • 当X取值不断增大时,Y也不断增大,此时Cov(X,Y)>0
  • 当X取值不断减小时,Y也不断减小,此时Cov(X,Y)>0
  • 当X取值不断增大时,Y也不断减小,此时Cov(X,Y)<0
  • 当X取值不断减小时,Y也不断增大,此时Cov(X,Y)<0

总结X和Y之间的规律就是,当两个随机变量倾向于沿着相同趋势变化时为正协方差,反之则为负协方差。

但我们知道,不同维度间可能由于值本身存在量级的差异而导致结果的偏差,例如订单金额的单位可能是万元区间,而用户等级可能只是10以内的数字分布。为了消除这个差异性,需要对协方差进行标准化,而标准化后的指标即相关系数(通常用P表示),其矩阵被称为相关性矩阵。

相关系统P的基本意义如下:

  • 当P>0时,X和Y呈正相关
  • 当P<0时,X和Y呈负相关

那么,当P=0呢?难道意味着不相关?——当P=0时,意味着X和Y不存在线性相关关系,但可能存在其他相关关系。

注意:假设我们现在又3个维度,协方差只能显示任意2个维度的关系,如何把这3个维度显示在同时显示出来?——这时,就要用到矩阵,即协方差矩阵。

下面举例说明协方差和相关系数。 现在有一个观测数据集,其中包含三个维度(年龄、等级和购买金额),样本量为5,现在要对其求协方差和相关系数。

年龄 等级 购买金额
41 3 8,084
27 1 1,983
40 1 100
41 1 221
24 2 7,816

我们可以直接使用SPSS进行求解,得到以下结果:

QQ截图2015051020435711

结果反映出,年龄和等级之间的协方差是0.550,相关系数为0.073,年龄和购买金额之间的协防差是-11055.77,相关系数为-0.329。同样的,我们也可以直接读出其他任意维度和其他2个维度的协方差以及相关系数。

问题:如果A和B的相关系数P1为0.5,A和C的相关系数P2为-0.6,哪个相关性更高?大家可以留言。

回归本文的主体QDA,以下是Python的SKlearn的QDA进行二次判别分析。

  1. #coding:utf-8   
  2. from sklearn import datasets
  3. from sklearn.qda import QDA
  4. iris = datasets.load_iris()
  5. X = iris.data[:-5]
  6. pre_x = iris.data[-5:]
  7. y = iris.target[:-5]
  8. clf = QDA()
  9. clf.fit(X, y)
  10. pre_y = clf.predict(pre_x)
  11. #预测目标分类结果
  12. print ('predict value:', pre_y)


其运行结果如下:

  1. ('predict value:', array([2, 2, 2, 2, 2]))


QDA可配置的参数包括:

  1. class sklearn.qda.QDA(priors=None, reg_param=0.0)


 


 

尾巴

Python机器学习库中的QDA不具有LDA和PCA的降维功能,只能用来做分类预测,对于协方差的求解则很容易使用Numpy中的cov进行求解。


====================【好书推荐,我为自己代言】====================

《Python数据分析与数据化运营》上市啦!

50+数据流工作知识点
14个数据分析与挖掘主题
8个综合性运营分析案例
涵盖会员、商品、流量、内容4大主题
360°把脉运营问题并贴合数据场景落地


本书主要基于Python实现,其中主要用到的计算库是numpy、pandas和sklearn,其他相关库还包括:
  • 标准库:re、time、datetime、json、 base64、os、sys、cPickle、tarfile
  • 统计分析:Statsmodels
  • 中文处理:结巴分词
  • 文本挖掘:Gensim
  • 爬虫和解析:requests、Beautiful Soup、xml
  • 图像处理:OpenCV和PIL
  • 数据读取:xlrd、pymongo、mysql.connector
  • 数据预处理:imblearn
  • 展示美化类:Matplotlib、graphviz、prettytable、wordcloud、mpl_toolkits、pydotplus
如果你对以下内容感兴趣,那么本书将值得一看:
  • KMeans聚类的自动K均值的确立方法
  • 基于软方法的多分类模型组合评估模型的应用
  • 基于自动下探(下钻、细分)的应用
  • 基于增量学习的多项式贝叶斯分类
  • pipeline管道技术的应用
  • 基于超参数的自动参数值的优化方法
  • 特征自动选择
  • 文本分类、文本主题挖掘
  • 基于自动时间序列ARIMA的P、D、Q的调整
  • python决策树规则输出
  • 基于自定义图像的文本标签云
  • 非结构化数据,例如图像、音频、文本等处理
  • 对象持久化处理
有关这本书的写作感受、详细内容介绍、附件(含数据和代码源文件-源代码可更改数据源直接使用)下载、关键知识和方法以及完整书稿目录,请访问《Python数据分析与数据化运营》新书上线,要购买此书请直接点击图片或扫描二维码去京东购买

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>