SAS - 到集群中心的观察距离
SAS - distance of observation to the center of cluster
有没有一种简单的方法可以获取每个观测值与其相应簇中心的距离?
我的任务如下:
我有一个包含 42000 个观测值的数据集,每个观测值有 8 个变量。
我运行SAS中的集群程序
proc cluster data=WORK.stndstandardized_0000 method=average pseudo noeigen outtree=WORK.tree;
id POL_NUMBER;
var stnd_P_M200 stnd_P_M150 stnd_P_M100 stnd_P_M50 stnd_P_50 stnd_P_100 stnd_P_150 stnd_P_200;
run;
proc tree out=WORK.part nclusters=10;
id POL_NUMBER;
copy stnd_P_M200 stnd_P_M150 stnd_P_M100 stnd_P_M50 stnd_P_50 stnd_P_100 stnd_P_150 stnd_P_200;
proc sort;
by cluster;
run;
我应该分析各个集群并获取最接近集群中心和最远离集群中心的观测值
我的输出包含所有具有相应集群名称的观察结果。但我想获得更详细的信息,例如观测到星团中心的距离。
有什么自动获取的方法吗?我已经花了很多时间阅读手册,但我还没有找到任何方法。感谢您的任何帮助。
这是使用 FastClus 的解决方案
PROC FASTCLUS 不会 return 您是一棵簇树,只是具有您指定的簇数的一个解决方案。 PROC FASTCLUS 所需的时间大致与观察次数成正比。此外,据我所知,它提供了相同的聚类,但提供了其他输出数据集;
创建聚类 mean=mean
指定您希望在数据集 ´work.mean´ 中使用您的 cetroids,并且 out=prelim
指定您想要您的观察结果,包括数据集中的簇数和距离 ´work.prelim´;
title2 ’Preliminary Analysis by FASTCLUS’;
proc fastclus data=sashelp.iris summary maxc=10 maxiter=99 converge=0
mean=mean out=prelim cluster=preclus;
var petal: sepal:;
run;
剩下的就是老派的 SAS 编程
您可能会根据自己的要求进行调整;
proc sort data=mean;
by preclus;
proc sort data=prelim;
by preclus distance;
data closest farthest;
format Species . Distance 5.2
SepalLength 5.2 centroidSepalLength 5.2
SepalWidth 5.2 centroidSepalWidth 5.2
PetalLength 5.2 centroidPetalLength 5.2
PetalWidth 5.2 centroidPetalWidth 5.2 ;
merge prelim
mean (rename=(
SepalLength=centroidSepalLength
SepalWidth=centroidSepalWidth
PetalLength=centroidPetalLength
PetalWidth=centroidPetalWidth ) drop=_:);
by preclus;
if first.preclus then output closest;
if last.preclus then output farthest;
run;
有没有一种简单的方法可以获取每个观测值与其相应簇中心的距离?
我的任务如下:
我有一个包含 42000 个观测值的数据集,每个观测值有 8 个变量。
我运行SAS中的集群程序
proc cluster data=WORK.stndstandardized_0000 method=average pseudo noeigen outtree=WORK.tree; id POL_NUMBER; var stnd_P_M200 stnd_P_M150 stnd_P_M100 stnd_P_M50 stnd_P_50 stnd_P_100 stnd_P_150 stnd_P_200; run; proc tree out=WORK.part nclusters=10; id POL_NUMBER; copy stnd_P_M200 stnd_P_M150 stnd_P_M100 stnd_P_M50 stnd_P_50 stnd_P_100 stnd_P_150 stnd_P_200; proc sort; by cluster; run;
我应该分析各个集群并获取最接近集群中心和最远离集群中心的观测值
我的输出包含所有具有相应集群名称的观察结果。但我想获得更详细的信息,例如观测到星团中心的距离。
有什么自动获取的方法吗?我已经花了很多时间阅读手册,但我还没有找到任何方法。感谢您的任何帮助。
这是使用 FastClus 的解决方案
PROC FASTCLUS 不会 return 您是一棵簇树,只是具有您指定的簇数的一个解决方案。 PROC FASTCLUS 所需的时间大致与观察次数成正比。此外,据我所知,它提供了相同的聚类,但提供了其他输出数据集;
创建聚类 mean=mean
指定您希望在数据集 ´work.mean´ 中使用您的 cetroids,并且 out=prelim
指定您想要您的观察结果,包括数据集中的簇数和距离 ´work.prelim´;
title2 ’Preliminary Analysis by FASTCLUS’;
proc fastclus data=sashelp.iris summary maxc=10 maxiter=99 converge=0
mean=mean out=prelim cluster=preclus;
var petal: sepal:;
run;
剩下的就是老派的 SAS 编程 您可能会根据自己的要求进行调整;
proc sort data=mean;
by preclus;
proc sort data=prelim;
by preclus distance;
data closest farthest;
format Species . Distance 5.2
SepalLength 5.2 centroidSepalLength 5.2
SepalWidth 5.2 centroidSepalWidth 5.2
PetalLength 5.2 centroidPetalLength 5.2
PetalWidth 5.2 centroidPetalWidth 5.2 ;
merge prelim
mean (rename=(
SepalLength=centroidSepalLength
SepalWidth=centroidSepalWidth
PetalLength=centroidPetalLength
PetalWidth=centroidPetalWidth ) drop=_:);
by preclus;
if first.preclus then output closest;
if last.preclus then output farthest;
run;