Проблема расчета RMSE в R - PullRequest
0 голосов
/ 08 ноября 2019

В настоящее время я работаю над проектом по науке о данных на основе MovieLens, данных Netflix.

Я разделил набор тестов и тренировок следующим образом:

# Test set will be 10% of current MovieLens data
set.seed(1, sample.kind="Rounding")
# if using R 3.5 or earlier, use `set.seed(1)` instead
test_index2 <- createDataPartition(y = edx$rating, times = 1, p = 0.1, list = FALSE)
train_set <- edx[-test_index2,]
test_set <- edx[test_index2,]

У меня естьчтобы вычислить среднеквадратическое среднеквадратичное отклонение для прогнозируемых рейтингов на основе этой функции:

#Define the function that calculates RMSE
RMSE <- function(true_ratings, predicted_ratings){
sqrt(mean((true_ratings - predicted_ratings)^2))
}

Сначала я делаю это с простейшей моделью, которая выглядит следующим образом:

#Get mu_hat with the simplest model
mu_hat <- mean(train_set$rating)
mu_hat
[1] 3.512457

#Predict the known ratings with mu_hat
naive_rmse <- RMSE(test_set$rating, mu_hat)
naive_rmse
[1] 1.060056

#Create the results table
rmse_results <- tibble(method = "Simple average model", RMSE = naive_rmse)

Далее мне нужноиспользуйте модель, которая штрафует за эффекты фильма:

#Penalize movie effects and adjust the mean
b_i <- train_set %>% group_by(movieId) %>%
summarize(b_i = sum(rating - mu_hat)/(n() + 1))

#Save and plot the movie averages with the movie effect model
movie_effect_avgs <- train_set %>% group_by(movieId) %>% summarize(b_i = mean(rating - mu_hat))
movie_effect_avgs %>% qplot(b_i, geom = "histogram", bins = 10, data = ., color = I("azure3"), xlab = "Number of movies with b_i", ylab = "Number of movies")

#Save the new predicted ratings
predicted_ratings <- mu_hat + test_set %>% left_join(movie_effect_avgs, by='movieId') %>%
pull(b_i)

Первая строка прогнозируемых оценок выглядит следующим образом:

predicted_ratings
   [1] 3.130763 4.221028 3.742687 3.429529 3.999581 4.278903 3.167818 3.332393

Моя проблема возникает здесь:

#Calculate the RMSE for the movie effect model
movie_effect_rmse <- RMSE(predicted_ratings, test_set$rating)
movie_effect_rmse
[1] NA

Он просто говорит «NA» вместо того, чтобы давать мне значение RMSE для второй модели, но я не могу понять, что не так с моим кодом или почему функция RMSE не работает. Я подозреваю, что это как-то связано со структурой тестового / тренировочного набора. Код работает, если я выполняю те же самые шаги, как указано выше, но вместо этого я беру набор данных с до . Я сделал дальнейшее разделение на тест и обучение (называемое edx), тренируюсь на этом наборе данных и использую егонепосредственно на проверочном наборе. Тем не менее, это не разрешено в соответствии с инструкциями для проекта.

Есть предложения, что может быть не так?

1 Ответ

1 голос
/ 08 ноября 2019

Просто чтобы кодифицировать это как ответ. Функции, которые генерируют NA, делают это, потому что некоторые из входных данных уже NA.

В случае большинства случайных метрик, таких как sum, mean, sd и т. Д. простое добавление na.rm = TRUE в качестве параметра функции работает.

В вашем случае

mean(x,na.rm= TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...