非参数聚类分析--SAS
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
非参数聚类MODECLUS Syntax语法 PROC MODECLUS < options> ; ID variable; VAR variables;
Smoothing Parameters
例 data example; input x y @@; datalines;
18 18 20 22 21 20 12 23 17 12 23 25 25 20 16 27 20 13 28 22 80 20 75 19 77 23 81 26 55 21 64 24 72 26 70 35 75 30 78 42 18 52 27 57 41 61 48 64 59 72 69 72 80 80 31 53 51 69 72 81 ;
proc modeclus data=l method=6 r=6 7 8 test list ; var x y; id xx; run;
proc modeclus data=l method=6 k=2 3 4 5 test list ; var x y; id xx; run;
proc modeclus data=l method=6 k=2 test list MAXC=2; var x y; id xx; run;
proc modeclus data=example method=6 k=3 8 15 out=out; run;
data zsq; Input country$ pdi index; Datalines; 阿根廷 49 比利时 65 巴西 69 保加利亚 智利 63 哥伦比亚 捷克共和国 萨尔瓦多 法国 68 希腊 60 香港 68 伊朗 58 意大利 50 牙买加 45 日本 54 马耳他 56 摩洛哥 70 巴基斯坦 秘鲁 64 波兰 68 葡萄牙 63 新加坡 74 南非 49 南韩 60 西班牙 57 台湾 58 泰国 64 特立尼达岛 土耳其 66 乌拉圭 61 ;
第三步:以密度估计由小到大的顺序 把没有分配的观测点排成一类,然后 重复下面的步骤:
非参数聚类法,MODECLUS 变量聚类,VARCLUS, (TREE)
层次聚类用于小样本
快速聚类用于大样本
原理:将距离最近的样本点聚为一类
非参数聚类方法,类是由概率密度函数 的众数定义的,一个类大致可以定义为 概率密度函数的一个局部最大点附近的 区域。
非参数密度估计使用球均匀核,球 半径是固定的,也可以是可变的。在某 点的密度估计值是以该点为中心的球内 所含观测值除以样本量和球的体积。球 的大小由光滑参数确定,光滑参数自定, 通常要试几个光滑参数。
非参数聚类分析
聚类:将相近和相似的样本合成一类。
特点:
1、聚类的个数事先不知。
2、聚类的结果与本次样本数据特征有关。 3、聚类的结果与选择的变量有关。与标 准化变换有关, 4、聚类结果与选择聚类的方法有关。 WARD法,最近法,最远法等。
聚类方法有:
层次聚类法,cluster, (TREE)
快速聚类法(K-MEAN法)fastclus
类的个数是光滑参数的函数, 在光滑参数增大时,类的个数由减小 的趋势,但不是严格单调下降的。一 般来说应该指定几个不同的光滑参数, 看看类的个数的变化。
5、密度估计法(METHOD=DENSITY) 密度估计法按非参数密度来定义两点间 的距离 。如果两个点 和 是近邻(两点 距离小于某指定常数或 在距离 最近的 若干点内)则距离是两点密度估计的倒 数的平均,否则距离为正无穷。 密度估计有最近邻估计(K=)、均匀核 估计(R=)和Wong 混合法 (HYBRID)。
data l; input xx$ x datalines; A 62 77 B 73 68 C 82 80 D 86 88 E 89 85 F 92 89 G 97 90 q1 70 75 q2 78 75 q3 80 69 q4 82 80 q5 84 85 q6 96 99 ;
y ;
proc modeclus data=l method=6 r=6 7 8 ; var x y; id xx; run;
axis1 label=(angle=90 rotate=0) minor=none order=(0 to 80 by 20); axis2 minor=none; proc gplot; plot y*x /frame cframe=ligr vaxis=axis1 haxis=axis2; run; proc modeclus data=example method=6 r=10 15 35 out=out; run; symbol1 v=’1’ font=swiss c=white; symbol2 v=’2’ font=swiss c=yellow; symbol3 v=’3’ font=swiss c=cyan; symbol4 v=’4’ font=swiss c=green; symbol5 v=’5’ font=swiss c=orange;symbol6 v=’6’ font=swiss c=blue; symbol7 v=’7’ font=swiss c=black; proc gplot data=out; plot y*x=cluster /frame cframe=ligr nolegend vaxis=axis1 haxis=axis2; by _r_; run;
第一步:找到一些种子,每个种子是一个单独的 观测点,在,在这一点的密度估计不小于它的任 何相邻点的密度估计。如果规定选项 MAXCLUSTERS=n,则只保留n个密度估计最大的 种子。
第二步:以密度估计由大到小的顺序逐个考虑每个种子: 1)如果当前这个种子已被分配,则考虑下一个种子。 否则形成一个包含当前这个种子的新类。 2)如果有某个未被分配的种子是这个类中一个成员的 相邻点,或者与某个成员有共同的相邻点,则把这个种 子加入这个类;重复这个步骤直到没有未被分配的种子 满足这个条件为止。 3) 如果一些种子属于这个类,则把这些种子的所有相 邻点加入这个类。 4)考虑每个没有被分配的观测点。计算属于当前类的 相邻点的密度估计的p-1次幂的和与它的所有相邻点密 度估计的p-1次幂的和的比率,其中P是由选项POWER =指定的值,缺省是为2。
2.9 7.1 3.7 70 6.7 67 57 66 6.9 3.8 8.2 1.8 4.3 3.0 7.7 5.2 3.3 55 3.7 5.0 5.8 9.2 4.7 5.5 6.1 5.6 3.4 47 4.4 6.7
3.8 3.7 4.9 3.4
2.4
Βιβλιοθήκη Baidu3.6
proc modeclus data=zsq r= 5 6 7 m=6 out=out1; var PDI index; run; symbol1 v='1' font=swiss c=white; symbol2 v='2' font=swiss c=yellow symbol3 v='3' font=swiss c=cyan; symbol4 v='4' font=swiss c=green symbol5 v='5' font=swiss c=orange;symbol6 v='6' font=swiss c=blue symbol7 v='7' font=swiss c=black; proc gplot data=out1; plot PDI * index =cluster /frame cframe=ligr nolegend vaxis=axis1 haxis=axis2; by _r_; run; proc modeclus data=zsq K=6 7 8 m=6 out=zsq2; var PDI index; run; proc plot data=zsq2; plot PDI*index$country=cluster; run;
proc modeclus data=l method=6 k=2 test list MAXC=2 NEIGHBOR; var x y; id xx; run;
options noovp ps=28 ls=95; data uniform; drop n; true=1; do n=1 to 100; x=ranuni(123); output; end; axis1 label=(angle=90 rotate=0) minor=none order=(0 to 3 by 0.5); axis2 minor=none; symbol9 v=none i=splines; proc modeclus data=uniform m=1 k=10 20 40 60 out=out short; var x; proc gplot data=out; plot density*x=cluster /frame cframe=ligr vzero nolegend vaxis=axis1 haxis=axis2; plot2 true*x=9/vaxis=axis1 haxis=axis2; by _K_; run; proc modeclus data=uniform m=1 r=.05 .10 .20 .30 out=out short; var x; axis1 label=(angle=90 rotate=0) minor=none order=(0 to 2 by 0.5); proc gplot data=out; plot density*x=cluster /frame cframe=ligr vzero nolegend vaxis=axis1 haxis=axis2;