如何改进该算法?
|
Windows 7上的R版本2.11.1 32位
我得到数据train.txt如下:
USER_A USER_B ACTION
1 7 0
1 8 1
2 6 2
2 7 1
3 8 2
我将数据作为以下算法处理:
train_data=read.table(\"train.txt\",header=T)
result=matrix(0,length(unique(train_data$USER_B)),2)
result[,1]=unique(train_data$USER_B)
for(i in 1:dim(result)[1])
{
temp=train_data[train_data$USER_B%in%result[i,1],]
result[i,2]=sum(temp[,3])/dim(temp)[1]
}
结果是train_data中每个USER_B的得分。分数定义为:
USER_B的分数=(USER_B的所有ACTION的总和)/(USER_B的推荐时间)
但是train_data很大,可能需要三天才能完成此程序,所以我来这里寻求帮助,是否可以改进此算法?
没有找到相关结果
已邀请:
4 个回复
厢界山攀
您可以使用软件包
中的
函数用一行代码来完成此操作
或者,基数R中的函数
执行相同的操作:
根据表的大小,执行时间可以提高20倍或更多。这是具有一百万个条目的data.frame的system.time测试。您的算法需要116秒,ddply()需要5.4秒,而tapply需要1.2秒:
舞备联
同样可以解决这个问题:
辽躺
和
时表现出了很高的性能。
封装使性能进一步显着提高了〜75%
RAN16ѭ包可在CRAN获得,并在r-forge上拥有网站
骚瓤
:
您可以使用ѭ21来代替ѭ22,但是我最近读到这最后一个解决方案更快(如果您没有any23等等)。 我还没有测试过,但我认为应该会更快。如果您想要更快的解决方案,请查看
和
软件包...