Я выполняю задание, где я пытаюсь создать совместную фильтрующую модель для данных приза Netflix. Данные, которые я использую, находятся в файле CSV, который я легко импортирую в фрейм данных. Теперь мне нужно создать разреженную матрицу, состоящую из Пользователей в виде строк и фильмов в качестве столбцов, и каждая ячейка заполняется соответствующим значением рейтинга. Когда я пытаюсь отобразить значения в кадре данных, мне нужно запустить цикл для каждой строки в фрейме данных, который занимает много времени в R, пожалуйста, любой может предложить лучший подход. Вот пример кода и данных:
buildUserMovieMatrix <- function(trainingData)
{
UIMatrix <- Matrix(0, nrow = max(trainingData$UserID), ncol = max(trainingData$MovieID), sparse = T);
for(i in 1:nrow(trainingData))
{
UIMatrix[trainingData$UserID[i], trainingData$MovieID[i]] = trainingData$Rating[i];
}
return(UIMatrix);
}
Пример данных в фрейме данных, из которого создается разреженная матрица:
MovieID UserID Rating
1 1 2 3
2 2 3 3
3 2 4 4
4 2 6 3
5 2 7 3
Итак, в конце концов я хочу что-то вроде этого: Столбцы - это идентификаторы фильмов, а строки - это идентификаторы пользователей.
1 2 3 4 5 6 7
1 0 0 0 0 0 0 0
2 3 0 0 0 0 0 0
3 0 3 0 0 0 0 0
4 0 4 0 0 0 0 0
5 0 0 0 0 0 0 0
6 0 3 0 0 0 0 0
7 0 3 0 0 0 0 0
Итак, интерпретация выглядит примерно так: user 2 rated movie 1 as 3 star, user 3 оценил фильм 2 как 3 звезды и так далее для других пользователей и фильмов. В моем кадре данных около 8500000 строк, для которых мой код занимает около 30-45 минут, чтобы создать эту матрицу пользовательских элементов, я хотел бы получить любые предложения