我有一个关于我自己编写的基于项目的协同过滤算法的特殊问题。该算法基于Yi Ding和Xue Li的this article方程(4)。
通过以下例外修改算法。如果I(c)和I(j)的相似度小于0,则相似性将乘以-1,因此等级0(ic)将被翻转为6-0(ic)。 例如,如果相似性为-0.5且等级为5,则等式将产生值(( - 0.5) -1)(6-5)= 0.5。我在R中编写了以下代码:
func_pred2 <- function(i,j)
{
a1 <- UI_ratings_sim[,j]
b1 <- sort(a1,decreasing=TRUE)
c1 <- b1[-1]
c2 <- ifelse(c1<0,c1*-1,c1*1)
c3 <- names(c2)
c4 <- UI_ratings[i,c3]
c5 <- ifelse(c1<0,6-c4,c4*1)
d1 <- UI_time_dist_efunc[i,c3]
e1 <- as.vector(c5)
e2 <- as.vector(c2)
e3 <- as.vector(d1)
count <- sum(e1*e2*e3,na.rm=TRUE)
denom <- sum(e2*e3,na.rm=TRUE)
pred <- count/denom
return(pred)
}
进一步解释:
UI_ratings_sim是由项目相互关联组成的矩阵,UI_ratings是包含用户和项目的二维矩阵以及项目的评级。我已经生成了一个矩阵,该矩阵由矩阵中的位置组成,其中应该预测评级。我的问题是,如果我能够在函数中将i和j的矢量值放在picewise中。如果我正在训练将整个两个向量放在函数中,那么i的一个向量和j的另一个向量得到0作为结果。如果有人帮助我,我会很高兴。