热线电话:13121318867

登录
首页精彩阅读sas-协同过滤中求出k个邻居的实现_数据分析师考试
sas-协同过滤中求出k个邻居的实现_数据分析师考试
2015-07-02
收藏

sas-协同过滤中求出k个邻居的实现_数据分析师考试


本文利用sas软件计算出相似的k个邻居,后期的基于邻居的推荐系统就不是sas所做的了。

关于相似邻居的计算,方法有很多。本文采用的是欧几里得的计算距离的算法,后期会尝试使用其他的算法。

%macro quan;
data quan;
array a{4} a1-a4;
do k=1 to 10;
do j=1 to 4;
a{j}=ranuni(0);
end; output;
end; drop j ;
run;
%do i= 1 %to 10;
data a&i b&i;
set quan;
if _n_=&i then output a&i;
else output b&i;
run;
data quan&i;
array a{4} a1-a4;
array b{4}b1-b4;
retain b1-b4;
if _n_=1 then do ;
set a&i;
do i=1 to 4;
b{i}=a{i};
end;
end;
else do ;
set b&i;
do i= 1 to 4;
a{i}=a{i}-b{i} ;
end; output;
end; drop b1-b4 i;
run;
data x&i;
array a{4} a1-a4;
set quan&i;
do i=1 to 4;
x=sum(a(i)**2);
end;
output;drop i;
run;
proc rank data=x&i out=rank&i ;
var x ;
ranks y;
run;
data output&i;
set rank&i;
where y le 2;
run;
proc print data=output&i;
title "与&i.相似的两个邻居";
var k;
run;
%end;
%mend;
%quan;
以上为贴出的sas宏代码。稍作解释一下,本文是利用随机产生的数据计算的,所以第一步随机产生数据。第二部将要求出某个的邻居其本身的数据放到数据集a&i中,其余人的数据放到b&i中。然后计算出b&i中每个与其本身(即a&i中的数据)的距离,方法使用欧几里德距离。最后利用rank过程步对其距离排序,输出前两名的邻居 。 

数据分析咨询请扫描二维码

若不方便扫码,搜微信号:CDAshujufenxi

最新资讯
更多
客服在线
立即咨询