Создание функции потерь - PullRequest
0 голосов
/ 15 апреля 2019

Я пытался создать функцию потерь ниже. Где 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


1 Ответ

0 голосов
/ 15 апреля 2019

Первым аргументом любой функции, которую вы хотите оптимизировать с помощью 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...