SAS中最近邻k:如何获取每行的邻居列表?

时间:2013-10-28 02:26:38

标签: machine-learning sas bigdata nearest-neighbor knn

目前我正在使用SAS中的proc discriminim对数据集运行kNN分析,但问题可能要求我为表中的每一行获取前k个邻居列表,那么如何获取此列表来自SAS ??

感谢您的回答,但我正在寻找每个数据点的邻居列表,例如,如果我有数据集: 名称年龄邮编酒精 约翰福音26 08439是的 凯茜49 47789没有 史密斯37 90897没有 汤姆34 88642是的

然后我需要清单:

name neighbor1 neighbor2 约翰汤姆凯西 凯茜汤姆史密斯 史密斯凯西汤姆 汤姆约翰凯茜

我无法从SAS找到这个输出,有什么可以编程来获取此列表吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我不是SAS用户,但快速网页查找似乎可以为您的问题提供一个很好的答案:

据我所知,你不必自己实施。 DISCRIM就足够了。

来自http://www.sas-programming.com/2010/05/k-nearest-neighbor-in-sas.html

的虹膜数据代码
ods select none;
proc surveyselect data=iris  out=iris2  
                  samprate=0.5  method=srs  outall;
run;
ods select all;

%let k=5;
proc discrim data=iris2(where=(selected=1))   
             test=iris2(where=(selected=0))
             testout=iris2testout
             method=NPAR k=&k 
             listerr crosslisterr; 
      class Species; 
      var SepalLength SepalWidth PetalLength PetalWidth; 
      title2 'Using KNN on Iris Data'; 
run; 

这里也有详细的描述: http://analytics.ncsu.edu/sesug/2012/SD-09.pdf

来自sas社区:

  

只需要使用选项“METHOD = NPAR K =”,请PROC DISCRIM使用非参数方法。注意,不要同时使用“R =”选项,这对应于基于半径的最近邻方法。还要注意PROC DISCRIM如何自动处理分类数据。有时,您可能希望事先将分类数据更改为度量标准坐标。由于PROC DISCRIM不输出内部构建的树,因此使用“data = test = testout =”选项对新数据集进行评分。