개념:
오차 계산:
SGD 업데이트 수식:
RMSE 계산 수식:
특징:
SGD 학습 코드 예제:
for i, j, r in non_zeros:
eij = r - np.dot(P[i, :], Q[j, :].T)
P[i,:] += learning_rate * (eij * Q[j,:] - r_lambda * P[i,:])
Q[j,:] += learning_rate * (eij * P[i,:] - r_lambda * Q[j,:])
P, Q = matrix_factorization(ratings_matrix.values, K=50, steps=200, learning_rate=0.01, r_lambda=0.01)
pred_matrix = np.dot(P, Q.T)
ratings_pred_matrix = pd.DataFrame(pred_matrix, index=ratings_matrix.index, columns=ratings_matrix.columns)
개념:
수식:
특징:
유사도 계산 및 예측 함수 예시:
from sklearn.metrics.pairwise import cosine_similarity
rating_matrix = df.fillna(0).to_numpy()
user_similarity = cosine_similarity(rating_matrix)
def predict_rating(user_index, item_index, k=2):
sim_scores = user_similarity[user_index]
neighbor_indices = [i for i in range(len(df)) if not np.isnan(df.iloc[i, item_index]) and i != user_index]
neighbors = sorted(neighbor_indices, key=lambda i: sim_scores[i], reverse=True)[:k]
numerator, denominator = 0, 0
for neighbor in neighbors:
sim = sim_scores[neighbor]
rating = df.iloc[neighbor, item_index]
numerator += sim * rating
denominator += sim
return round(numerator / denominator, 2) if denominator != 0 else np.nan
개념:
ALS 수식:
원리:
특징:
SGD와 ALS 비교:
| 구분 | SGD (경사하강법) | ALS (교대 최소제곱법) |
|---|---|---|
| 업데이트 방식 | 샘플 단위 | 블록 단위 (전체 계산) |
| 장점 | 유연함, 커스터마이징 가능 | 병렬 처리 및 대규모에 적합 |
| 단점 | 느릴 수 있음 | 소규모에서 불안정 가능 |
| 적용 | 소규모/커스터마이징 추천 | 대규모, Spark 기반 추천 |
from pyspark.ml.recommendation import ALS
als = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", rank=10, maxIter=10, regParam=0.1)
model = als.fit(train)
predictions = model.transform(test)
for step in range(steps):
for i in range(num_users):
for j in range(num_items):
if R[i, j] > 0:
error = R[i, j] - np.dot(P[i], Q[j])
for f in range(k):
P[i, f] += lr * (error * Q[j, f] - lambda_ * P[i, f])
Q[j, f] += lr * (error * P[i, f] - lambda_ * Q[j, f])
| 구분 | 방식 | 특징 | 추천 사용처 |
|---|---|---|---|
| SGD | 벡터 내적 기반 잠재 요인 학습 | 유연하고 소규모에 적합 | 커스터마이징, 설명 가능한 추천 |
| KNN | 유사도 기반 (메모리 기반) | 간단하고 직관적이나 희소/대규모에 한계 | 소규모, 간단한 추천 시스템 |
| ALS | 대규모 최적화 학습 | 빠르고 병렬 처리에 강함 | 대규모 서비스, Spark 활용 환경 |