分类模型与算法--线性判别分析

来源:互联网 发布:java随机生成二维数组 编辑:程序博客网 时间:2024/06/14 00:03

一、概述

线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的线性学习方法,在二分类问题上最早由Fisher提出,故又称“Fisher判别分析”。
LDA的思想:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离;在对测试集点进行分类时,将其投影到同样的这条直线上,根据投影点的位置来确定样本的类别。
如下图所示:
图片来源于网络
LDA既可以用来做线性分类,也可以单纯用来对数据进行降维。

二、实例

这里仅展示如何使用R语言,用LDA方法解决二分类问题。
R语言中MASS包中的lda函数可以实现该算法。这里采用天气预报数据进行演示。

> #数据录入> G<-c(rep(1,10),rep(2,10))> x1=c(-1.9,-6.9,5.2,5.0,7.3,6.8,0.9,-12.5,1.5,3.8,0.2,-0.1,0.4,2.7,2.1,-4.6,-1.7,-2.6,2.6,-2.8)> x2=c(3.2,0.4,2.0,2.5,0.0,12.7,-5.4,-2.5,1.3,6.8,6.2,7.5,14.6,8.3,0.8,4.3,10.9,13.1,12.8,10.0)> weather<-data.frame(G,x1,x2)> #画图观测> plot(x1,x2)> text(x1,x2,G,adj = -0.5)

散点图如下

> #加载包> library(MASS)> #建模> ld<-lda(G~x1+x2)> ldCall:lda(G ~ x1 + x2)Prior probabilities of groups:  1   2 0.5 0.5 Group means:     x1   x21  0.92 2.102 -0.38 8.85Coefficients of linear discriminants:          LD1x1 -0.1035305x2  0.2247957> z<-predict(ld)> newG<-z$class> #结果展示> newG [1] 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2Levels: 1 2> z$class [1] 1 1 1 1 1 2 1 1 1 1 2 2 2 2 1 2 2 2 2 2Levels: 1 2$posterior            1          21  0.61625867 0.383741332  0.65888888 0.341111123  0.89412853 0.105871474  0.87143887 0.128561135  0.96214822 0.037851786  0.17275662 0.827243387  0.98442237 0.015577638  0.68514398 0.314856029  0.85330562 0.1466943810 0.52789262 0.4721073811 0.43015877 0.5698412312 0.30676827 0.6932317313 0.03336323 0.9666367714 0.34672296 0.6532770415 0.88585263 0.1141473716 0.40213732 0.5978626817 0.08694507 0.9130549318 0.03480991 0.9651900919 0.08934413 0.9106558720 0.09926372 0.90073628$x           LD11  -0.286749012  -0.398524393  -1.291570534  -1.158466575  -1.958576036   0.948094697  -2.509877538  -0.470661049  -1.0658646110 -0.0676084211  0.1702240212  0.4935176013  2.0378018514  0.3834687115 -1.2403807716  0.2400586717  1.4234718218  2.0111998419  1.4054024420  1.33503926> y<-data.frame(G,z$x,newG)> y   G         LD1 newG1  1 -0.28674901    12  1 -0.39852439    13  1 -1.29157053    14  1 -1.15846657    15  1 -1.95857603    16  1  0.94809469    27  1 -2.50987753    18  1 -0.47066104    19  1 -1.06586461    110 1 -0.06760842    111 2  0.17022402    212 2  0.49351760    213 2  2.03780185    214 2  0.38346871    215 2 -1.24038077    116 2  0.24005867    217 2  1.42347182    218 2  2.01119984    219 2  1.40540244    220 2  1.33503926    2

从预测结果可以看出,只有6号和15号样本判别错误,准确率达到了90%。

参考资料:
【1】周志华.机器学习[M].北京:清华大学出版社,2016.