TMDB5000 데이터 세트를 이용한 콘텐츠기반 필터링 구현 실습 - 02 강의내용 질문입니다
96
작성한 질문수 32
안녕하세요
168. TMDB5000 데이터 세트를 이용한 콘텐츠기반 필터링 구현 실습 - 02
강의에서
9:50 부분을 보면
find_sim_movie() 함수가 있습니다
강의 동영상에서는 The Godfather 와
유사도가 높은 순으로 결과가 나왔는데
The Godfather 가 유사도가 가장 높아야 되는데
The Godfatehr 가 아니고 다른 영화가
유사도가 가장 높은 것으로 나옵니다
왜 이런 결과가 나오는지 설명 부탁드립니다
답변 2
0
안녕하십니까,
첫번째 나오는 find_sim_movie() 함수가 약간 소스코드가 잘못된 측면이 있습니다. 원래는 자기 자신은 언제나 유사도가 1이기 때문에 자기 자신을 제외한 코사인 유사도 행렬에서 그 다음 높은 값을 찾아야 하는데, 해당 소스 코드가 생략이 되어 있습니다. 그런데 이 코드가 생략되었음에도 The Godfather와 가장 유사한 영화가 자기 자신이 아닌 다른 영화를 찾아 주는 결과가 될 수 있는데, 이런 경우는 해당 유사도가 1과 컴퓨터 계산적으로 동일한 0.999999999 와 같은 값일 때 이 경우 1로 동일하게 간주해서 argsort() 시에 해당 인덱스를 가장 높은 값으로 추출해 줄 수 있습니다.
그래서 강의 영상에 마지막 쯤에 보시면 find_sim_movie() 함수가 재 정의 되어 있습니다. 여기서는 기준영화 index를 제외하는 것으로 소스코드가 제대로 적용됩니다.
# 기준 영화 index는 제외
similar_indexes = similar_indexes[similar_indexes != title_index]
재 정의된 find_sim_movie() 함수가 바르게 작성된 함수로 생각해 주시면 될 것 같습니다.
감사합니다.
0
자세한 설명 감사드립니다.
재정의된 find_sim_movie() 함수에서는
자기 자신이 제외되고 나옵니다.
그런데,
similar_indexes = similar_indexes[similar_indexes != title_index]
이 부분을 주석처리하고 실행하면 자기 자신도 나와야 되는 것 아닌지요?
이 부분을 주석처리하고 실행하면 자기 자신도 나오는 영화가 있는가 하면
자기 자신은 제외하고 나오는 영화도 있습니다.
결과가 이렇게 나오는 것은 무슨 이유 때문에 그런 건지요?
0
similar_indexes = similar_indexes[similar_indexes != title_index]
이 부분을 주석처리하고 실행하면 맨 처음 정의된 find_sim_movie() 함수 인데, 이전 답변에서도 말씀드렸듯이 자기 자신은 1, 다른 코사인 유사도가 0.9999999.... 가 되면 두개를 동일하게 1로 간주하여서 1등이 2개가 되어서, 이 중에 한개를 임의 선택하면서 자기 자신이 나올때도 있고, 그렇지 않을때도 있습니다.
0
답변 감사드립니다.
"두 개를 동일하게 1로 간주하여서 1등이 2개가 되어서, 이 중에 한 개를 임의 선택하면서 자기 자신이 나올 때도 있고, 그렇지 않을 때도 있습니다"
라고 하셨는데요, 자기 자신이 나오지 않는다는 것은
아예 목록 전체에서 나오지 않게 된다는 의미로 이해하면 되는지요.
0
자기 자신이 나오지 않는다는 것은
아예 목록 전체에서 나오지 않게 된다는 의미로 이해하면 되는지요.
=> 아뇨, 그런건 아닙니다만 아무래도 genre를 기준으로 count vectorizer 적용하다보니 cosine similarity가 동일한 영화가 상당히 많이 나와서, 헷갈리실 수 있을 것 같습니다.
예를 들어 The Godfather는 코사인 유사도가 1.0 인게 26개가 있습니다. 아래 코드로 확인해 보시면 됩니다. The Godfather는 index id가 3337 입니다.
genre_sim_temp = genre_sim[3337]
print(genre_sim_temp[genre_sim_temp >= 0.9999999].shape)
그러다 보니 def find_sim_movie(df, sorted_ind, title_name, top_n=10) 에서 top_n이 10개 일때 자신이 포함될 수도 있고 포함되지 않을 수도 있는 결과가 나오는 군요.
0
안녕하세요, 인프런 AI 인턴입니다. 박종성님.
귀하의 질문에 대해 이해를 돕기 위해 설명드리겠습니다. find_sim_movie() 함수 내부에서 사용되는 similar_indexes = similar_indexes[similar_indexes != title_index] 이 부분은 기준 영화를 제외하고 유사한 영화를 찾기 위해 사용되는 코드는 맞습니다.
주석처리를 했음에도 불구하고, 기준 영화가 결과에 나타나지 않는다면 몇 가지 가능성을 고려해볼 수 있습니다. 예를 들어, 해당 영화의 유사도 계산에서 0으로 되어 더 이상 결과 리스트에 포함되지 않았거나, 또는 다른 내부 로직에서 자동으로 제거되는 경우입니다.
하지만, 일반적으로 주석 처리 시 기준 영화가 출력 목록에 나타나는 것이 맞습니다. 따라서 코드 전반적인 로직에서 오타나 다른 문제가 있는지 꼼꼼히 점검해 볼 필요가 있습니다.
유사한 질문에 대한 답변을 링크해드릴 테니 참고해 주세요: 컨텐츠 기반 필터링 실습 마지막 코드 질문
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
0
현재 답변은 봇으로 달아놓으신 것 같습니다.
9:50 부분에서 find_sim_movie() 함수에는
similar_indexes = similar_indexes[similar_indexes != title_index]
이 부분이 없습니다
이 부분은 마지막에 나옵니다.
엉뚱한 답변이 달렸습니다
질문 내용은 다음과 같습니다.
강의 동영상에서는 The Godfather 와
유사도가 높은 순으로 결과가 나왔는데
The Godfather 가 유사도가 가장 높아야 되는데
The Godfatehr 가 아니고 다른 영화가
유사도가 가장 높은 것으로 나옵니다
왜 이런 결과가 나오는지 설명 부탁드립니다
봇이 아니라 담당 강사님으로부터 답변을 받고 싶습니다
0
인프런 AI 답변은 제가 생성하는 것이 아니라 인프런에서 자동으로 생성하는 답변입니다. 인프런 AI 답변이 달려 있어도, 늘 제가 답변을 드립니다. 인프런 AI 답변은 즉각적으로 유용할 수 있는 답변을 드리기 위해서 인프런에서 잘 만든 서비스이오니 보조 수단으로 생각해 주십시요.
안녕하세요 열심히 수강중인 학생입니다
0
58
2
정수 인덱싱
0
65
2
넘파이 오류
0
83
2
11강 numpy의 axis 축 질문 드립니다.
0
84
2
Kaggle 에서 Santander customer satisfaction data 를 다운로드 되지가 않습니다.
0
76
2
Feature importances 를 보여주는 barplot 이 그래프로 안보여져요.
0
68
2
타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.
0
73
2
타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.
0
62
2
5강 강의 오류가 있어요.
0
81
1
실무에서 LTV 관련 모델 선택 질문입니다!
0
71
2
14강 강의 듣는중에 궁금한게 있어서 질문합니다~
0
67
3
파이썬 다운그레이 후 사이킷런 재설치
0
115
2
좋은 강의 감사합니다.
0
70
2
scoring 함수 음수값
0
66
2
6번 강의에 사이킷런, 파이썬, 아나콘다 각각 버전 일치 안 시키고 진행해도 강의 따라가 지나요?
0
98
2
분류 평가 정확도 예측
0
75
2
안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.
0
96
1
카카오톡 채널 있나요
0
104
1
혹시 강의에서 사용하시는 ppt 받을 수 있는건가요
0
187
2
pca 스케일링 관련하여 질문드립니다.
0
100
2
주피터 대신 구글 코랩
0
169
2
강의에서 사용하는 pdf or ppt자료는 따로 없는 건가요?
0
145
2
실루엣 스코어..
0
82
2
float64 null 값 처리 방법
0
99
2





