Факторизація розріджених матриць взаємодій за допомогою сингулярного розкладу
Свайпніть щоб показати меню
Огляд SVD
Сингулярне розкладання або SVD — потужний математичний метод для розкладання матриці на три простіші матриці.
У контексті рекомендованих систем SVD часто використовується для аналізу та стиснення великих розріджених матриць взаємодії користувач-товар, виявляючи приховані закономірності та зв'язки.
Математичне пояснення
Нехай дана матриця A (наприклад, матриця взаємодії користувач-товар), SVD розкладає її на три матриці: U, Σ та V^T. Взаємозв'язок можна описати так:
A = U Σ V^T
U— матриця, стовпці якої є лівими сингулярними векторами;Σ(Сігма) — діагональна матриця, що містить сингулярні значення;V^T— транспонована матриця, стовпці якої є правими сингулярними векторами.
Такий розклад дозволяє апроксимувати початкову матрицю, використовуючи лише найбільш значущі сингулярні значення та вектори, що особливо корисно у випадках з високою розмірністю та розрідженими даними.
Роль у рекомендаціях
У рекомендованих системах матриці користувач-товар зазвичай розріджені, з багатьма відсутніми значеннями (наприклад, непроставлені оцінки товарів). SVD допомагає виявити латентні ознаки, які пояснюють спостережувані взаємодії. Відновлюючи матрицю з меншою кількістю сингулярних значень, можна передбачити відсутні значення — тобто оцінити, як користувач може оцінити товар, з яким ще не взаємодіяв. Це дозволяє створювати персоналізовані рекомендації на основі прихованих вподобань, а не лише явних даних.
Застосування SVD до розрідженої матриці користувач-товар
Припустимо, у вас є матриця користувач-товар, де рядки — це користувачі, а стовпці — товари. Багато значень відсутні (або дорівнюють нулю), що означає невідомі вподобання користувачів. Застосовуючи SVD, можна звести матрицю до її основних компонентів і використати реконструкцію для оцінки відсутніх значень, які потім можна використати для формування рекомендацій.
123456789101112131415161718192021222324252627282930import numpy as np # Example sparse user-item matrix (0 indicates missing/unknown rating) user_item_matrix = np.array([ [5, 3, 0, 1], [4, 0, 0, 1], [1, 1, 0, 5], [0, 0, 5, 4], [0, 1, 5, 4], ]) # Filling missing values (0) with the mean of non-zero elements for SVD mean_value = user_item_matrix[user_item_matrix != 0].mean() filled_matrix = np.where(user_item_matrix == 0, mean_value, user_item_matrix) # Performing SVD U, sigma, VT = np.linalg.svd(filled_matrix, full_matrices=False) # Keeping only top 2 singular values for dimensionality reduction k = 2 U_k = U[:, :k] sigma_k = np.diag(sigma[:k]) VT_k = VT[:k, :] # Reconstructing the matrix using only top k components approx_matrix = np.dot(np.dot(U_k, sigma_k), VT_k) print('Original matrix with missing values filled:') print(np.round(filled_matrix, 2)) print('\nApproximated matrix (using top 2 singular values):') print(np.round(approx_matrix, 2))
1. Яка матриця у SVD містить сингулярні значення, що відображають важливість кожної прихованої ознаки?
2. Яка основна мета застосування SVD до матриці користувач-товар у рекомендованих системах?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат