Coding Diary.

(Machine Learning) 내용 기반 추천 시스템, sklearn으로 유저 평점 예측하기 본문

Coding/Machine Learning

(Machine Learning) 내용 기반 추천 시스템, sklearn으로 유저 평점 예측하기

life-of-nomad 2023. 10. 16. 09:17
728x90
반응형

 

선형 회귀를 사용해서 내용 기반 추천을 해 봅시다.

 

가장 먼저 선형 회귀에서는 데이터를 수학적으로 어떻게 표현하는지 봅시다. 먼저 아래 데이터를 실제로 사용할 떄는 영화 이름이나 속성 이름을 쓰지 않았는데, 구별을 하기 위해 몇 번째 데이터와 속성인지를 자연수로 표시해보겠습니다.

가장 기본적으로 입력 변수들, 위의 경우 영화 속성들은 x라는 문자로 나타내고, 목표 변수, 즉 유저 평점은 y라는 문자로 나타냅니다.

 

1. 입력 변수

각 영화에서 속성은 액션, 로맨스, 코미디, 감동 총 4개 입니다.

첫 번째 입력 변수인 액션 정도를 나타내기 위해 x_1, 로맨스 정도를 나타내기 위해 x_2, 나머지도 마찬가지로 x_3, x_4로 나타냅니다.

입력 변수의 개수는 n이라는 문자로 표현하는데 지금은 총 4개의 입력 변수가 있기 때문에 n=4입니다.

 

2. 각 데이터

학습 데이터의 개수는 m이라는 문자로 표현합니다. 별점을 예측하는 프로그램을 만드는 데 m이 50이면 50개의 영화데이터를 갖고 프로그램을 학습시키는 것입니다.

 

1번째 영화의 입력 변수는 x^(1)로 표현합니다. 그리고 1번째 영화 목표변수는 y^(1)로 표현합니다.

나머지도 마찬가지로 표현하면 됩니다.

이건 그냥 하나의 값이 아니라 여러 값을 담은 하나의 벡터입니다.

위 벡터는 3번째 영화가 얼마나 액션, 로맨스, 코미디, 감동인지가 들어있는 벡터입니다.

 

3. 합치기

따라서 3번째 영화의 2번째 속성인 로맨스 정도는 아래와 같이 표현하면 됩니다.

이걸 일반화하면 i번째 데이터의 j번째 속성은 아래와 같이 나타낼 수 있습니다.

4. sklearn으로 유저 평점 예측하기

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_ratind_df = pd.read_csv(MOVIE_DATA_PATH)
#사용할 속성들 이름
features = ['romance', 'action', 'comedy', 'heart-warming']
#입력 변수와 목표 변수 나누기
X = movie_rating_df[features]
y = movie_rating_df[['rating']]

#선형 회귀 모델 학습 시키기
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)

#X_test 예측하기
y_test_predict = model.predict(X_test

 

728x90
반응형