sirin05137 / CSE364_Project

2 stars 0 forks source link

Make simple recommendation system #24

Closed sirin05137 closed 3 years ago

sirin05137 commented 3 years ago

Make simple recommendation system

Milestone2 part1에서는 user data를 입력받아 해당 user data를 기반으로 Top10의 영화를 추천해준다. 그래서 우선 user에 대한 data를 아무것도 입력 받지 않았을 때 추천해주는 기능을 구현하였다. 즉 command가 아래와 같을 때의 결과값을 구현하였다.

java -cp target/cse364-project-1.0-SNAPSHOT-jar-with-dependencies.jar gourp11.milestone2 “” “” “”

구현 방법에 대해 간단하게 알아보자

우선 movieID, Title, Genre, total rating, vote counter를 멤버변수로 가지는 class Movie_data_node로 ArrayList를 생성한다. 이 ArrayList를 movie_rating_matrix라고 하자. 그런 다음 IMDB의 weighted rating 방법을 통해 각 영화의 가중평균을 구한다.

IMDB의 Weighted rating을 구하는 방법은 다음과 같다.

W = (vR+mC)/(v+m)

v = 해당 영화의 총 투표수 m = Top 차트에 들기 위한 최소한의 투표수 R = 해당 영화의 평균 평점 C = 모든 영화의 평균 평점

v와 R 값은 Movie_data_node에서 쉽게 구할 수 있으며 m과 C는 각각 다음과 같은 메소드를 이용하여 구할 수 있다. 해당 메소드의 헤더는 다음과 같다

static int Percentile(ArrayList<Movie_data_node> movie_rating_matrix, double p)
static double total_average_rating(ArrayList<Movie_data_node> movie_rating_matrix)

그런 다음 movie_rating_matrix에서 vote count가 m 이상인 객체만 골라서 classified_table라는 ArrayList를 만든다. 그 후 Weighted rating에 따라 내림차순으로 List를 sort 하고 상위 10개의 영화만 출력한다.

간단하게 설명했지만 코드에는 복잡한 부분이 다소 있다. 이 설명을 바탕으로 코드 리뷰를 하면 조금은 더 이해하기 쉬울 것이다.