CVXR: solve()的问题--在as.vector(data)中出错:没有将这个s4类强制为向量的方法。

问题描述 投票:0回答:1

我想把这个函数最小化。

\min_{{mu} サム_{t=T}^T | y_t - むu_t | 。2 + జజజ{t=1}^{T-1} |mu_{t+1}-/mu_{t}|_2

其中:y 和 mu 是 p*T 矩阵.在我使用 solve()函数之前,一切都很好编译。

以下是我在y是p*obs矩阵的情况下编写的代码。

library(CVXR)

mu <- Variable(p, obs)

# group lasso ----
total_var <- lapply(X = seq_len(obs-1), FUN = function(j) mu[,j+1] - mu[,j])
total_var_norm <- lapply(X = total_var, FUN = cvxr_norm, p=2)
group_lasso <- Reduce(f = sum, x = total_var_norm)

# loss function ---- 
col_diff <- lapply( X = seq_len(obs), FUN = function(j) y[,j] - mu[,j])
col_diff_norm <- lapply( X = col_diff, FUN = cvxr_norm, p=2)
loss <- Reduce(f = sum, x = col_diff_norm)

# convex optimization ----
objective_mu <- loss + lambda * group_lasso
problem_mu <- Minimize(objective_mu)
result_mu <- solve(problem_mu)

一切都执行得很好,直到 result_mu <- solve(problem_mu). 在那里我得到以下错误信息。

> result_mu <- solve(problem_mu)
Error in as.vector(data) : 
  no method for coercing this S4 class to a vector

在这之前一切都很正常。

我还尝试了以下公式。

# group lasso ----
group_lasso <- norm(mu[,2] - mu[,1], type = "2")
for (s in 2:obs-1){
  group_lasso <- group_lasso + norm(mu[,s] - mu[,s+1], type = "2")
}

# loss function ---- 
loss <- norm(y[,1] - mu[,1], type = "2")
for (s in 2:obs){
  loss <- group_lasso_2 + norm(y[,s] - mu[,s], type = "2")
}

同样的目标和问题函数 在这里,我又在同一点得到了完全相同的错误信息。

我不知道代码在哪一点上出了问题......。有什么好的建议吗?有什么好的建议吗?

r s4 convex-optimization cvx
1个回答
0
投票

Problem 在您的代码中缺失了...。

problem_mu <- Problem(Minimize(objective_mu))
© www.soinside.com 2019 - 2024. All rights reserved.