特異値分解を用いたスパースインタラクション行列の分解
メニューを表示するにはスワイプしてください
SVDの概要
定義
**特異値分解(Singular Value Decomposition, SVD)**は、行列を3つのより単純な行列に分解する強力な数学的手法。
レコメンデーションシステムの文脈では、SVDは大規模かつ疎なユーザー・アイテム相互作用行列を分析・圧縮し、隠れたパターンや関係性を明らかにするためによく利用される。
数学的説明
行列A(ユーザー・アイテム相互作用行列など)が与えられた場合、SVDはこれを3つの行列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を適用する主な目的は何ですか?
すべて明確でしたか?
フィードバックありがとうございます!
セクション 4. 章 2
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 4. 章 2