判别分析与聚类分析有非常类似的特性,因此,在多数数据分析的教材中,这两章是一前一后出现的,简而言之,聚类分析,其实是判别分析的基础,即在聚类分析的基础上,总结出各类的权值,将待判样本与各类权值做对比,距离最近的,即为一类。
以下,给出我在判别分析实验中做的一个小例子。

判别分析

人文与发展指数是联合国开发计划署于1990年5月发表的第一份《人类发展报告》中公布的。该报告建议,目前对人文发展的衡量指标应当以人生的三大要素为重点。衡量人生的三大要素的指标分别为:实际人均GDP指数、出生时的预期寿命指数、受教育程度指数(由成人识字率指数和综合总人学率指数按2/3、1/3的权重加权而得),将一生三个指数合成为一个指数就是人文发展指数。今从2007年世界各国人文发展指数(2005年)的排序中,选取高发展水平、中等发展水平和低发展水平国家各6个作为三组样品,另选四个国家作为待判样品,资料如下表所示。试用距离判别对以下数据资料进行判别分析,并据此对待选的四个国家进行判别归类,并使用Fisher 判别写出判别函数。
G 国家 人均GDP(美元) 出生时的预期寿命(岁) 成人识字率(%) 初等、中等和高等教育入学率(%)
第一类:高发展水平国家 1 美国 41890 77.9 99.5 93.3
1 德国 29461 79.1 99.2 88
1 希腊 23381 78.9 96 99
1 新加坡 29663 79.4 92.5 87.3
1 意大利 28529 80.3 98.4 90.6
1 韩国 22029 77.9 99 96
第二类:中等发展水平国家 2 古巴 6000 77.7 99.8 87.6
2 罗马尼亚 9060 71.9 97.3 76.8
2 巴西 8402 71.7 88.6 87.5
2 泰国 8677 69.6 92.6 71.2
2 菲律宾 5137 71 92.6 81.1
2 土耳其 8407 71.4 87.4 68.7
第三类:低发展水平国家 3 尼泊尔 1550 62.6 48.6 58.1
3 尼日利亚 1128 46.5 69.1 56.2
3 喀麦隆 2299 49.8 67.9 62.3
3 巴基斯坦 2370 64.6 49.9 40
3 越南 3071 73.7 90.3 63.9
3 印度尼西亚 3843 69.7 90.4 68.2
待判组 日本 31267 82.3 99 85.9
印度 3452 63.7 61 63.8
中国 6757 72.5 90.9 69.1
南非 11110 50.8 82.4 77

这是在判别分析中非常经典的例题,以下给出SAS代码:

距离判别

data exp; 
/*生成训练样本数据集ex_6_2_1; 数据为坐标数据*/
input g $ name $ x1 x2 x3 x4;
cards;
1	美国	41890	77.9	99.5	93.3
1	德国	29461	79.1	99.2	88
1	希腊	23381	78.9	96	99
1	新加坡	29663	79.4	92.5	87.3
1	意大利	28529	80.3	98.4	90.6
1	韩国	22029	77.9	99	96
2	古巴	6000	77.7	99.8	87.6
2	罗马尼亚	9060	71.9	97.3	76.8
2	巴西	8402	71.7	88.6	87.5
2	泰国	8677	69.6	92.6	71.2
2	菲律宾	5137	71	92.6	81.1
2	土耳其	8407	71.4	87.4	68.7
3	尼泊尔	1550	62.6	48.6	58.1
3	尼日利亚	1128	46.5	69.1	56.2
3	喀麦隆	2299	49.8	67.9	62.3
3	巴基斯坦	2370	64.6	49.9	40
3	越南	3071	73.7	90.3	63.9
3	印度尼西亚	3843	69.7	90.4	68.2
;
data testexp;    /*生成待判样品数据集ex1*/
input name $ x1 x2 x3 x4;
cards;
日本	31267	82.3	99	85.9
印度	3452	63.7	61	63.8
中国	6757	72.5	90.9	69.1
南非	11110	50.8	82.4	77
;
proc discrim  data=exp testdata=testexp testout=fexp list listerr testlist testlisterr crosslist  crosslisterr ; 
class g;
var x1 x2 x3 x4;
run;
proc print data=fexp;run;

以下是程序结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Fish判别

data exp; 
input g $ name $ x1 x2 x3 x4;
cards;
1	美国	41890	77.9	99.5	93.3
1	德国	29461	79.1	99.2	88
1	希腊	23381	78.9	96	99
1	新加坡	29663	79.4	92.5	87.3
1	意大利	28529	80.3	98.4	90.6
1	韩国	22029	77.9	99	96
2	古巴	6000	77.7	99.8	87.6
2	罗马尼亚	9060	71.9	97.3	76.8
2	巴西	8402	71.7	88.6	87.5
2	泰国	8677	69.6	92.6	71.2
2	菲律宾	5137	71	92.6	81.1
2	土耳其	8407	71.4	87.4	68.7
3	尼泊尔	1550	62.6	48.6	58.1
3	尼日利亚	1128	46.5	69.1	56.2
3	喀麦隆	2299	49.8	67.9	62.3
3	巴基斯坦	2370	64.6	49.9	40
3	越南	3071	73.7	90.3	63.9
3	印度尼西亚	3843	69.7	90.4	68.2
;
proc candisc data=exp out=outcan simple;
class g;
var x1 x2 x3 x4;
proc print data=outcan;
run;
proc plot ;
plot  can2*can1=g; /*如果不足两个典型变量则不产生散点图*/
run; 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后四个观测的归类结果为19号(日本)观测为高发展水平国家,第20号(印度)为第3类,即低发展水平国家,21号(中国)和22号(南非)归为中等发展水平国家。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐