해당 글은 코드잇 강의를 참고하여 작성되었습니다.
- 추천 시스템이란?
- 어떤 작업을 할 때, 경험을 통해 그 작업에 대한 성능이 향상되는 프로그램 즉 머신러닝 프로그램이다.
- 유저와 상품의 관계를 표현한 데이터를 사용하여 유저와 상호작용이 없었던 상품에 대한 선호도를 예측하고 선호도가 높게 예측되는 상품들을 유저에게 추천한다.
- 추천 시스템의 데이터
- 직접 데이터
- 유저가 직접적으로 상품에 대한 만족/선호도를 표시한 데이터
- 유저 영화 평점 데이터/ 유튜브 유저 좋아요,싫어요 데이터 등
- 데이터가 정확하다.
- 간접 데이터
- 유저가 직접적 선호도를 표시하지는 않았지만 유추할 수 있는 데이터
- 데이터의 형태는 똑같이 표현함
- 유튜브 유저 영상 시청 데이터/ 아마존 유저 구매 데이터
- 데이터를 수집하기 쉽다
- 내용 기반 추천이란?
- 상품의 속성, 즉 '어떤' 상품인지를 사용해서 추천
- ex) 액션, 로맨스 등이 입력 변수=속성(x)/ 평점은 목표 변수(y)
액션 로맨스 코미디 감동 유저의 평점 러브 액츄얼리 0.1 0.9 0.9 0.6 5 반지의 제왕 1.0 0.5 0.2 0.2 1 국제 시장 0.4 0.2 0 1 1 어바웃 타임 0.3 0.9 0.8 0.5 5
- 데이터 표현하기
- xj(i)= i번째 데이터의 j번째 속성
- 다중 선형 회귀
- hθ(x)=θTx(=θ0+θ1x1+θ2x2+⋯+θnx)
- 경사 하강법 : 손실함수를 최소화하는 방법(가설함수에 1/2m곱한 것) → 최적의 θ값 구하기
손실함수 경사 하강법
- 학습시킨 모델로 추천하기
- 이렇게 해서 찾은 최적의 \theta 값들은 각 영화 종류에 대한 유저의 선호도를 학습한 값
- 은 그냥 상수항
- 가설함수hθ(x)에 경사 하강법으로 구한 와 영화 속성을 저장하고 있는 벡터 x를 대입
- 각각 유저가 이미 평가한 영화 데이터를 가지고 학습하고, 학습된 모델을 가지고 평가하지 않은 영화에 대한 평점을 예측
- sklearn으로 예측하기
# 필요한 도구들을 가지고 오는 코드
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
# 유저 평점 + 영화 속성 데이터 경로 정의
MOVIE_DATA_PATH = './data/movie_rating.csv'
# pandas로 데이터 불러 오기
movie_rating_df = pd.read_csv(MOVIE_DATA_PATH)
features =['romance', 'action', 'comedy', 'heart-warming'] # 사용할 속성들 이름
# 입력 변수와 목표 변수 나누기
X = movie_rating_df[features]
y = movie_rating_df[['rating']]
# 입력 변수와 목표 변수들을 각각의 training/test 셋으로 나누기
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=5)
model=LinearRegression()
model.fit(X_train, y_train)
y_test_predict=model.predict(X_test)
# 실행 코드
y_test_predict
- 장점
- 상품을 추천할 때 다른 유저 데이터가 필요하지 않다.
- 새롭게 출시한 상품이나, 인기가 없는 상품을 추천할 수 있다.
- 단점
- 적합한 속성을 고르는 것이 어렵다.
- 고른 속성 값들이 주관적으로 선정될 수 있다.
- 유저가 준 데이터를 벗어나는 추천을 할 수 없다.
- 인기가 많은 상ㅍ움들을 더 추천해 줄 수 없다.
'데이터 > 머신러닝' 카테고리의 다른 글
실전 1.4 행렬 인수분해 (0) | 2021.07.27 |
---|---|
실전 1.3 협업 필터링 (0) | 2021.07.27 |
4.3 에다 부스트 (0) | 2021.07.26 |
4.2 랜덤 포레스트 (0) | 2021.07.25 |
4.1 결정 트리(Decision Tree) (0) | 2021.07.25 |