R中有许多库可用于执行最小化。但是,我能找到的所有内容(例如rcgmin或optimx)只允许输入参数的上限和上限:
opt_Params <- Rcgmin(par = Params_init,
fn = cost_func,
gr = params_grad,
lower = min_par,
upper = max_par
)
我正在寻找不同的东西:边界不在输入参数上,而是在接受它们的函数的值上。
具体来说,我的cost_func是一个成本函数,它测量我的(固定)观测数据Y_obs
与我拟合参数Y_calc
的预测之间的残差平方和:
cost_func <- function(Params) {
X <- Params[1:(num_items*num_features)]
dim(X) <- c(num_items,num_features)
Theta <- Params[(num_items*num_features+1):length(Params)]
dim(Theta) <- c(num_users,num_features)
Y_calc <- X * t(Theta)
J <- ((Y_calc - Y_obs) * (Y_calc - Y_obs))
cost <- sum(rowSums(J)[])
return(cost)
}
最小化费用功能,我可以确保我的预测Y_calc
更接近Y_obs
。
然而,这允许Y_calc
中的任意值。我想要做的是强加同样的边界,我知道它存在于Y_obs
中(0到10之间 - 这是一种协同过滤算法)。
所以我不是试图对我的输入参数设置约束,而是根据它们的函数(即Y_calc <- X * t(Theta)
的每个元素)。
是否有可能的R最小化库?或者我需要改变我的方法吗?