聚类分析是用来寻找观测值中潜在的、未知的知识。它可以通过各种各样的方法计算得到,最常用的就是运用距离度量方式计算数据点之间的关系,从而创建聚簇。
SAS中执行聚类分析
PROC CLUSTER <选项>;
VAR 变量1 变量2 变量3 ... 变量 n;
选项主要是控制过程的打印、计算和输出
选项如下:
NOPRINT禁止打印输出
NOEIGEN禁止打印特征值
SIMPLE 产生每个变量的简单统计描述
METHOD=控制使用的聚类方法
STANDRAD 使用相关矩阵计算
OUTTREE
创建用于聚类图的输出数据集
VAR语句用来列举变量列表
例如:PROC CLUSTER METHOD = AVERAGE OUTTREE = TREE;
VAR PEAK_VISC TROUGH_VISC FINAL_VISC BREAKDOWN
TOTAL_SETBACK TIMEPEAK_VISC;
在SAS中,可以通过Proc tree来创建树图,proc cluster的输出数据集作为proc tree的输入数据集。proc tree data=tree;
axis1 label=none;
proc tree data=tree1
dis horizontal
lines=(color=red dots)
vaxis=axis1;
SAS代码
%makegplot(type=pdf,pltfile='irisclus.pdf');
DATA IRISCLUS;
TITLE 'CLUSTER ANALYSIS OF 15 CASES FROM IRIS DATA SET';
TITLE2 'FIVE CASES FROM EACH IRIS TYPE';
INFILE 'irisclus.dat';
INPUT IRISGRP IRISID SEPALLEN SEPALWID PETALLEN PETALWID;
PROC CLUSTER OUTTREE=SINGLE SIMPLE STANDARD
METHOD=SINGLE PSEUDO;
VAR SEPALLEN SEPALWID PETALLEN PETALWID;
ID IRISID;
PROC TREE DATA=SINGLE DISSIMILAR;
TITLE3 'SINGLE LINKAGE METHOD';
ID IRISID;
%MACRO MAKEGPLOT(TYPE=PS,PLTFILE='PLOT.PS');
%PLOT:
FILENAME grafout &PLTFILE;
data _NULL_;
file grafout;
%* use device=ps for postscript file output;
%* use device=pdf for pdf file output;
%* use device=gif for gif file output;
%* use device=psepsf for encapsulated postscript file output;
%* use device=jpeg for jpeg file output;
%* use device=tiffp for tiff file output;
%* use device=bmp for bmp file output;
%* use device=WMF for Windows Metafile format file output;
goptions device=&type gsflen=80 gsfname=grafout gsfmode=append;
%goto exit;
Filename grafout clear;
%exit:
%blankln(0)
%endit:
%blankln(0)
%MEND MAKEGPLOT;
%MACRO BLANKLN(LINES);
%DO I=1 %TO &LINES;
%PUT %STR( );
%END;
%MEND BLANKLN;
SAS Kmeans聚类
data irisclus;
input IRISGRP IRISID SEPALLEN SEPALWID PETALLEN PETALWID;
cards;
1 101 5.1 3.5 1.4 0.2
1 102 4.9 3.0 1.4 0.2
1 103 4.7 3.2 1.3 0.2
1 104 4.6 3.1 1.5 0.2
1 105 5.0 3.6 1.4 0.2
2 201 7.0 3.2 4.7 1.4
2 202 6.4 3.2 4.5 1.5
2 203 6.9 3.1 4.9 1.5
2 204 5.5 2.3 4.0 1.3
2 205 6.5 2.8 4.6 1.5
3 301 6.3 3.3 6.0 2.5
3 302 5.8 2.7 5.1 1.9
3 303 7.1 3.0 5.9 2.1
3 304 6.3 2.9 5.6 1.8
3 305 6.5 3.0 5.8 2.2
;
* 数据标准化处理;
proc standard data=irisclus out=Stand mean=0 std=1;
var SEPALLEN SEPALWID PETALLEN PETALWID;
proc print data=stand;
* 执行Kmeans程序;
proc fastclus data=Stand out=Clust maxclusters=3 maxiter=100 drift;
var SEPALLEN SEPALWID PETALLEN PETALWID;
* 查看聚类结果;
proc print data=clust;
run;
* 运用 PROC DISCRIM寻找典型变量,并且绘制出来;
proc discrim data=clust out=discout canonical;
class cluster;
var SEPALLEN SEPALWID PETALLEN PETALWID;
proc plot data=discout;
plot can2*can1=cluster;
run;