1

現在、SAS で proc discrim を使用してデータセットの kNN 分析を実行していますが、この問題により、テーブル内の各行の上位 k 近傍リストを取得する必要がある場合があります。このリストを SAS から取得するにはどうすればよいですか? ?

回答ありがとうございます。たとえば、データ セットを取得した場合、各データ ポイントのネイバー リストを探しています。

それから私はリストが必要です:

name neighbor1 neighbor2 ジョン トム キャシー キャシー トム スミス スミス キャシー トム トム ジョン キャシー

SAS からのこの出力が見つかりませんでした。このリストを取得するためにプログラムできる理由はありますか? ありがとうございました!

4

1 に答える 1

1

私は SAS ユーザーではありませんが、簡単な Web ルックアップであなたの問題に対する良い答えが得られるようです:

私の知る限り、自分で実装する必要はありません。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=" オプションを使用して新しいデータ セットをスコアリングします。

于 2013-10-28T06:29:13.380 に答える