我试图在下面创建损失函数。 其中tts是平方的总和,x是值1-100,t是给定的y hat。 W0 + W1应该是par(0,1),但是我在使函数正确时遇到问题,但是我不确定为什么。
x
t
loss <- function(par){
th<-w0+w1*x
tts<-(t-th)^2
return(sum(tts))
}
```{r, error = TRUE}
results <- optim(par = c(0,1), fn = loss, method = 'BFGS')
results$par
答案 0 :(得分:0)
要使用optim
优化的任何函数的第一个参数必须是optim
将搜索的参数的向量。您将此向量命名为par
,但随后在函数中的任何地方都没有使用par
。在下面的示例中,我将调用参数params
的向量,以免将其与optim
的第一个参数混合使用,您会发现它已被使用(即,损失函数使用params[1]
等):
# define loss function
loss <- function(params, x, y) {
yhat <- params[1] + params[2]*x
tss <- (y - yhat)^2
return(sum(tss))
}
# generate fake data
n <- 100
x <- 1:n
w0_true <- 2
w1_true <- 3
y <- w0_true + w1_true*x + rnorm(n)
# find w0_hat and w1_hat with optim
optim(par=c(0,1), fn=loss, x=x, y=y)
# check with lm
summary(lm(y ~ x))