判别分析及R使用Part2-距离判别法

这部分笔记是MOOC课程《多元统计分析及R语言建模》第6章第二讲“距离判别分析”。在判别分析及R使用-Part1中提到,确定性判别可用Fisher判别法,除此之外还可以用距离判别分析。

两总体距离判别

老师在讲课的时候画了张图,可以直观的理解什么是距离判别法:

μ_1μ_2∑_1∑_2分别为两个类G_1G_2的均值向量和协方差矩阵。

距离判别.jpeg

简单来讲,若想知道一个样本x属于哪个总体,可以计算并比较x到两个总体的距离,距离谁近则属于谁。距离计算方法用的是马氏距离
D(X,G_i)=(X - μ_i)'(∑_i)^{-1}(X-μ_i),i=1,2
判别准则:

  • D(X,G_1) < D(X,G_2),则X ∈ G_1
  • D(X,G_1) > D(X,G_2),则X ∈ G_2
  • D(X,G_1) = D(X,G_2),待判。

按照∑_1∑_2是否相等,距离判别分析又可分为直线判别曲线判别

直线判别

∑_1=∑_2=∑时,就是直线判别。若想知道一个未知的点距离谁近,可以做减法:
W(X)=D(X,G_2)-D(X,G_1) \\=(X - μ_2)'∑^{-1}(X-μ_2)-(X - μ_1)'∑^{-1}(X-μ_1)\\=2X'∑^{-1}(μ_1-μ_2)-(μ_1+μ_2)∑^{-1}(μ_1-μ_2)\\=2[X-1/2(μ_1+μ_2)]'∑^{-1}(μ_1-μ_2)
然后把无伤大雅的2去掉,就可以把W(X)写成b_0+b_1X,此时b_0=-1/2(μ_1+μ_2)'∑^{-1}(μ_1-μ_2)b_1=∑^{-1}(μ_1-μ_2)。这个b_1其实就是Fisher判别分析里的\alpha',换句话说,当两总体协方差矩阵相等时,距离判别分析和Fisher判别分析是一样的。

其实吧,上面公式是怎么推倒的,我还没整的特别明白,先记录下来,回头再扣

曲线判别

曲线判别就是∑_1≠∑_2时的情况,不等则不能像相等时将∑代入展开:
W(X)=D(X,G_2)-D(X,G_1) \\=(X - μ_2)'∑^{-1}(X-μ_2)-(X - μ_1)'∑^{-1}(X-μ_1)

举例说明

还是之前的天气的例子,这回我们使用距离判别分析天气数据,在R语言中使用qda()函数即可:

> qd <- qda(G~x1+x2)
> qp<- predict(qd)
> G2 <- qp$class
> data.frame(G,G1,G2)##G1是使用Fisher判别法时预测的结果,不明白的可以去看上一张笔记的内容
  G G1 G2
1  1  1  2
2  1  1  1
3  1  1  1
4  1  1  1
5  1  1  1
6  1  2  1
7  1  1  1
8  1  1  1
9  1  1  1
10 1  1  1
11 2  2  2
12 2  2  2
13 2  2  2
14 2  2  2
15 2  1  1
16 2  2  1
17 2  2  2
18 2  2  2
19 2  2  2
20 2  2  2
##计算正确率
> sum(diag(prop.table( table(G,G2))))
[1] 0.85
##做天气预测
> predict(qd,data.frame(x1=8.1,x2=2.0))
$class
[1] 1
Levels: 1 2

$posterior
          1           2
1 0.9939952 0.006004808

多总体距离判别

多总体时就不能像两总体那样做距离的减法了,需要带着i对公式进行下变换,若协方差矩阵相同(直线判别):
D(X,G_i)=(X - μ_i)'∑^{-1}(X-μ_i)\\=X'∑^{-1}X- 2μ_i'∑^{-1}X+μ_i'∑^{-1}μ_i\\ =X'∑^{-1}X-2(b_iX+b_0)\\=X'∑^{-1}X-2Z_i
其中,Z_i=b_0+b_iX,当Z_i=max(Z_j),i≤j≤k,则X ∈ G_i
而协方差矩阵若不相等(非线性判别),则马氏距离公式无法展开D(X,G_i)=(X - μ_i)'∑^{-1}(X-μ_i),此时是当D(x,G_i)=min D(X,G_i),i≤j≤k时,X ∈ G_i

举例说明

表6.3.png

20个电视机,5种畅销,8种平销,7种滞销,试建立判别函数,当一新产品其质量评分为8.0,功能评分为7.5,销售价格为65元,问该厂产品的销售前景如何?
首先使用直线判别:

> d6.3 <- read.xlsx("/home/my/桌面/MOOC/多元统计分析/mvstats5.xlsx",sheet="d6.3")
> d6.3
     Q   C  P G3
1  8.3 4.0 29  1
2  9.5 7.0 68  1
3  8.0 5.0 39  1
4  7.4 7.0 50  1
5  8.8 6.5 55  1
6  9.0 7.5 58  2
7  7.0 6.0 75  2
8  9.2 8.0 82  2
9  8.0 7.0 67  2
10 7.6 9.0 90  2
11 7.2 8.5 86  2
12 6.4 7.0 53  2
13 7.3 5.0 48  2
14 6.0 2.0 20  3
15 6.4 4.0 39  3
16 6.8 5.0 48  3
17 5.2 3.0 29  3
18 5.8 3.5 32  3
19 5.5 4.0 34  3
20 6.0 4.5 36  3
> attach(d6.3)
> ld3 <- lda(G3~Q+C+P)
> ld3
Call:
lda(G3 ~ Q + C + P)

Prior probabilities of groups:
   1    2    3 
0.25 0.40 0.35 

Group means:
         Q        C      P
1 8.400000 5.900000 48.200
2 7.712500 7.250000 69.875
3 5.957143 3.714286 34.000

Coefficients of linear discriminants:
          LD1         LD2
Q -0.81173396  0.88406311
C -0.63090549  0.20134565
P  0.01579385 -0.08775636

Proportion of trace:
   LD1    LD2 
0.7403 0.2597 
> lp3<- predict(ld3)
> lG3 <- lp3$class
> data.frame(G3,lG3)
   G3 lG3
1   1   1
2   1   1
3   1   1
4   1   1
5   1   1
6   2   1
7   2   2
8   2   2
9   2   2
10  2   2
11  2   2
12  2   2
13  2   3
14  3   3
15  3   3
16  3   3
17  3   3
18  3   3
19  3   3
20  3   3
> ltab3 <- table(G3,lG3)
> ltab3
   lG3
G3  1 2 3
  1 5 0 0
  2 1 6 1
  3 0 0 7
> plot(lp3$x)
> text(lp3$x[,1],lp3$x[,2],lG3,adj=-0.8,cex=0.75)
lp3.png
> predict(ld3,data.frame(Q=8,C=7.5,P=65))
$class
[1] 2
Levels: 1 2 3

$posterior
          1        2           3
1 0.2114514 0.786773 0.001775594

$x
        LD1        LD2
1 -1.537069 -0.1367865

若协方差矩阵不等,使用pda()函数:

> qd3 <- qda(G3~Q+C+P)
> qd3
Call:
qda(G3 ~ Q + C + P)

Prior probabilities of groups:
   1    2    3 
0.25 0.40 0.35 

Group means:
         Q        C      P
1 8.400000 5.900000 48.200
2 7.712500 7.250000 69.875
3 5.957143 3.714286 34.000
> qp3 <- predict(qd3)
> qG3 <- qp3$class
> data.frame(G3,lG3,qG3)
   G3 lG3 qG3
1   1   1   1
2   1   1   1
3   1   1   1
4   1   1   1
5   1   1   1
6   2   1   2
7   2   2   2
8   2   2   2
9   2   2   2
10  2   2   2
11  2   2   2
12  2   2   2
13  2   3   3
14  3   3   3
15  3   3   3
16  3   3   3
17  3   3   3
18  3   3   3
19  3   3   3
20  3   3   3
> qtab3<-table(G3,lG3)
> predict(qd3,data.frame(Q=8,C=7.5,P=6.5))
$class
[1] 2
Levels: 1 2 3

$posterior
              1 2             3
1 5.080497e-225 1 1.498709e-158

无论哪种方法,正确率大于0.8就是可以的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容