Скачать книгу

csr_matrix

      from scipy.sparse.linalg import svds

      # Пример матрицы оценок пользователей

      ratings = np.array([

      [5.0, 4.0, 0.0, 0.0, 0.0, 0.0],

      [0.0, 0.0, 4.0, 0.0, 5.0, 0.0],

      [0.0, 0.0, 0.0, 2.0, 4.0, 5.0],

      [4.0, 0.0, 0.0, 0.0, 0.0, 4.0]

      ])

      # Выполнение сингулярного разложения (SVD)

      def perform_svd(ratings, k):

      # Преобразование матрицы оценок в разреженную матрицу

      sparse_ratings = csr_matrix(ratings)

      # Применение SVD для получения матриц U, Sigma и Vt

      U, Sigma, Vt = svds(sparse_ratings, k)

      # Построение диагональной матрицы Sigma

      Sigma = np.diag(Sigma)

      return U, Sigma, Vt

      # Функция рекомендации фильмов для пользователя

      def recommend_movies(user_id, ratings, U, Sigma, Vt, num_recommendations=5):

      user_ratings = ratings[user_id]

      predicted_ratings = np.dot(np.dot(U[user_id, :], Sigma), Vt)

      # Исключение уже оцененных фильмов из рекомендаций

      predicted_ratings[user_ratings != 0] = -1

      top_movies = np.argsort(predicted_ratings)[::-1][:num_recommendations]

      return top_movies

      # Пример использования

      user_id = 0

      k = 2 # Размерность скрытого пространства

      U, Sigma, Vt = perform_svd(ratings, k)

      recommended_movies = recommend_movies(user_id, ratings, U, Sigma, Vt)

      print(f"Рекомендуемые фильмы для пользователя {user_id}:")

      for movie_id in recommended_movies:

      print(f"Фильм {movie_id}")

      ```

      В данном примере используется алгоритм Singular Value Decomposition (SVD) для выполнения сингулярного разложения матрицы оценок пользователей. Полученные матрицы U, Sigma и Vt представляют собой аппроксимацию исходной матрицы оценок с использованием латентного пространства низкой размерности.

      Функция `perform_svd` выполняет сингулярное разложение матрицы оценок с помощью функции `svds` из модуля `scipy.sparse.linalg`. Разложение возвращает матрицы U, Sigma и Vt.

      Функция `recommend_movies` принимает идентификатор пользователя, матрицу оценок, а также матрицы U, Sigma и Vt в качестве аргументов. Она вычисляет предсказанные оценки для пользователя и рекомендует фильмы, имеющие наивысшие предсказанные оценки, исключая уже оцененные фильмы.

      В приведенном примере выводится список рекомендованных фильмов для пользователя с идентификатором 0. Количество рекомендаций задается параметром `num_recommendations`.

      Singular Value Decomposition (SVD), или Сингулярное разложение, является мощным алгоритмом линейной алгебры, который используется в различных областях, включая рекомендательные системы, сжатие данных, обработку изображений и многие другие.

      Сингулярное разложение позволяет представить матрицу в виде произведения трех матриц: U, Sigma и Vt. Формально, для матрицы A размерности m x n SVD определяется следующим образом:

      A = U * Sigma * Vt,

      где U – матрица размерности m x m, содержащая левые сингулярные векторы,

      Sigma – диагональная матрица размерности m x n, содержащая сингулярные значения,

      Vt – транспонированная матрица размерности n x n, содержащая правые сингулярные векторы.

      Сингулярные значения в матрице Sigma являются неотрицательными числами и упорядочены по убыванию. Они представляют собой меру важности каждого сингулярного вектора и определяют вклад каждого сингулярного вектора в исходную матрицу A.

      При использовании SVD в рекомендательных системах, например, матрица A представляет собой матрицу оценок пользователей, где строки соответствуют пользователям,

Скачать книгу