目前我正在使用SAS中的proc discriminim对数据集运行kNN分析,但问题可能要求我为表中的每一行获取前k个邻居列表,那么如何获取此列表来自SAS ??
感谢您的回答,但我正在寻找每个数据点的邻居列表,例如,如果我有数据集: 名称年龄邮编酒精 约翰福音26 08439是的 凯茜49 47789没有 史密斯37 90897没有 汤姆34 88642是的
然后我需要清单:
name neighbor1 neighbor2 约翰汤姆凯西 凯茜汤姆史密斯 史密斯凯西汤姆 汤姆约翰凯茜
我无法从SAS找到这个输出,有什么可以编程来获取此列表吗?谢谢!
答案 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 =”选项对新数据集进行评分。