Learn AI with Python · 강의

SVD를 활용한 행렬 인수분해

사용자-항목 행렬, SVD 분해, 잠재 요인, Surprise 라이브러리 구현을 다룹니다.

레슨 2/413개 단계

SVD를 활용한 행렬 인수분해은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

행렬 분해를 사용하는 이유

사용자-아이템 행렬은 매우 크고 대부분 비어 있습니다. 행렬 분해는 이 행렬을 잠재 요인으로 이루어진 더 작은 두 행렬로 압축합니다. 하나는 사용자용이고 다른 하나는 아이템용이며, 두 행렬의 곱으로 평점을 복원하고 빈 부분을 채웁니다. 이 방법은 이웃 기반 방법보다 희소성을 훨씬 잘 처리합니다.

잠재 요인 직관

각 사용자와 아이템은 숨겨진 특성을 나타내는 짧은 벡터로 표현됩니다. 영화의 경우 액션 성향이나 코미디 성향 같은 특성일 수 있습니다. 예측 평점은 사용자 벡터와 아이템 벡터의 내적이며, 이 벡터는 오직 데이터만으로 학습됩니다.

추천에서의 SVD

SVD 방식의 모델은 알려진 평점에 대한 예측 오류를 정규화와 함께 최소화하여 이러한 요인을 학습합니다. surprise 라이브러리는 추천에 맞게 최적화된 바로 사용할 수 있는 SVD를 제공하며, 넷플릭스 프라이즈를 통해 널리 알려졌습니다.

Surprise 라이브러리

필요한 구성 요소를 가져오십시오. 알고리즘, 데이터셋 래퍼, 그리고 데이터 형식을 설명하는 읽기 도구가 필요합니다.

from surprise import SVD, Dataset, Reader
from surprise.model_selection import cross_validate

리더와 평점 범위

리더는 평점 범위를 통해 유효한 평점의 범위를 Surprise에 알려 줍니다. 데이터에 맞게 설정하십시오(예: 별 1개부터 5개까지). 그렇지 않으면 예측값의 보정이 잘못됩니다.

reader = Reader(rating_scale=(1, 5))

DataFrame 불러오기

사용자, 아이템, 평점 순서로 정확히 세 개의 열을 가진 DataFrame을 불러오십시오.

data = Dataset.load_from_df(
    df[["user_id", "item_id", "rating"]],
    reader
)

교차 검증

cross_validate는 여러 폴드에 걸쳐 모델을 평가하고 오류 측정값을 보고합니다. 이를 통해 분리해 둔 데이터에서 정확도를 공정하게 판단할 수 있습니다.

results = cross_validate(
    SVD(), data,
    measures=["RMSE", "MAE"],
    cv=5,
    verbose=True
)

RMSE와 MAE

  • RMSE(평균 제곱근 오차)는 큰 오류에 큰 페널티를 줍니다.
  • MAE(평균 절대 오차)는 절대 오차의 평균으로, 해석하기가 더 쉽습니다.

두 지표 모두 낮을수록 좋으며, RMSE는 평점 예측에서 표준적으로 사용하는 대표 지표입니다.

전체 데이터셋으로 학습

검증이 끝나면 예측을 제공하기 전에 전체 데이터셋으로 학습하십시오.

trainset = data.build_full_trainset()
algo = SVD()
algo.fit(trainset)

예측 만들기

algo.predict(uid, iid)는 예측 객체를 반환하며, 이 객체의 .est 필드에는 해당 사용자-아이템 쌍에 대한 추정 평점이 들어 있습니다.

pred = algo.predict(uid="user_42", iid="item_99")
print(pred.est)  # estimated rating

하이퍼파라미터 조정

주요 SVD 설정은 n_factors(잠재 차원), n_epochs, lr_all(학습률), reg_all(정규화)입니다. GridSearchCV를 사용해 RMSE 기준으로 가장 좋은 조합을 찾으십시오.

from surprise.model_selection import GridSearchCV

grid = {"n_factors": [50, 100], "reg_all": [0.02, 0.1]}
gs = GridSearchCV(SVD, grid, measures=["rmse"], cv=3)
gs.fit(data)
print(gs.best_params["rmse"])

빠른 확인

행렬 분해 지식을 테스트해 보십시오.

복습

SVD를 통한 행렬 분해를 학습했습니다. 잠재 사용자 벡터와 아이템 벡터의 내적으로 평점을 예측합니다. surprise를 사용해 평점 범위를 설정하고, 데이터를 불러오고, cross_validate를 RMSE/MAE와 함께 실행하고, 학습한 뒤 algo.predict(uid, iid)를 호출했습니다. 다음 주제는 콘텐츠 기반 필터링입니다.

무료로 시작

AI 튜터와 함께 Python을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
53
레슨
225

자주 묻는 질문

“SVD를 활용한 행렬 인수분해” 강의는 무료인가요?

네 — “SVD를 활용한 행렬 인수분해” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

“SVD를 활용한 행렬 인수분해”에서 뭘 배우나요?

사용자-항목 행렬, SVD 분해, 잠재 요인, Surprise 라이브러리 구현을 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“SVD를 활용한 행렬 인수분해” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 협업 필터링: 사용자 기반과 항목 기반
  2. SVD를 활용한 행렬 인수분해
  3. 콘텐츠 기반 필터링
  4. 하이브리드 시스템과 평가 지표
← Learn AI with Python(으)로 돌아가기