1

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

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

然后我需要列表:

名称邻居 1 邻居 2 约翰汤姆凯茜凯茜汤姆史密斯史密斯凯茜汤姆汤姆约翰凯茜

我无法从 SAS 中找到这个输出,我可以通过编程来获得这个列表吗?谢谢!

4

1 回答 1

1

我不是 SAS 用户,但快速的网络查找似乎可以很好地解决您的问题:

据我所知,您不必自己实施。歧视就足够了。

来自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 不输出它在内部构建的 Tree,因此使用“data=test=testout=”选项对新数据集进行评分。

于 2013-10-28T06:29:13.380 回答