작성
·
68
·
수정됨
답변 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() 함수가 바르게 작성된 함수로 생각해 주시면 될 것 같습니다.
감사합니다.
similar_indexes = similar_indexes[similar_indexes != title_index]
이 부분을 주석처리하고 실행하면 맨 처음 정의된 find_sim_movie() 함수 인데, 이전 답변에서도 말씀드렸듯이 자기 자신은 1, 다른 코사인 유사도가 0.9999999.... 가 되면 두개를 동일하게 1로 간주하여서 1등이 2개가 되어서, 이 중에 한개를 임의 선택하면서 자기 자신이 나올때도 있고, 그렇지 않을때도 있습니다.
답변 감사드립니다.
"두 개를 동일하게 1로 간주하여서 1등이 2개가 되어서, 이 중에 한 개를 임의 선택하면서 자기 자신이 나올 때도 있고, 그렇지 않을 때도 있습니다"
라고 하셨는데요, 자기 자신이 나오지 않는다는 것은
아예 목록 전체에서 나오지 않게 된다는 의미로 이해하면 되는지요.
자기 자신이 나오지 않는다는 것은
아예 목록 전체에서 나오지 않게 된다는 의미로 이해하면 되는지요.
=> 아뇨, 그런건 아닙니다만 아무래도 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으로 되어 더 이상 결과 리스트에 포함되지 않았거나, 또는 다른 내부 로직에서 자동으로 제거되는 경우입니다.
하지만, 일반적으로 주석 처리 시 기준 영화가 출력 목록에 나타나는 것이 맞습니다. 따라서 코드 전반적인 로직에서 오타나 다른 문제가 있는지 꼼꼼히 점검해 볼 필요가 있습니다.
유사한 질문에 대한 답변을 링크해드릴 테니 참고해 주세요: 컨텐츠 기반 필터링 실습 마지막 코드 질문
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
현재 답변은 봇으로 달아놓으신 것 같습니다.
9:50 부분에서 find_sim_movie() 함수에는
similar_indexes = similar_indexes[similar_indexes != title_index]
이 부분이 없습니다
이 부분은 마지막에 나옵니다.
엉뚱한 답변이 달렸습니다
질문 내용은 다음과 같습니다.
강의 동영상에서는 The Godfather 와
유사도가 높은 순으로 결과가 나왔는데
The Godfather 가 유사도가 가장 높아야 되는데
The Godfatehr 가 아니고 다른 영화가
유사도가 가장 높은 것으로 나옵니다
왜 이런 결과가 나오는지 설명 부탁드립니다
봇이 아니라 담당 강사님으로부터 답변을 받고 싶습니다
인프런 AI 답변은 제가 생성하는 것이 아니라 인프런에서 자동으로 생성하는 답변입니다. 인프런 AI 답변이 달려 있어도, 늘 제가 답변을 드립니다. 인프런 AI 답변은 즉각적으로 유용할 수 있는 답변을 드리기 위해서 인프런에서 잘 만든 서비스이오니 보조 수단으로 생각해 주십시요.
자세한 설명 감사드립니다.
재정의된 find_sim_movie() 함수에서는
자기 자신이 제외되고 나옵니다.
그런데,
similar_indexes = similar_indexes[similar_indexes != title_index]
이 부분을 주석처리하고 실행하면 자기 자신도 나와야 되는 것 아닌지요?
이 부분을 주석처리하고 실행하면 자기 자신도 나오는 영화가 있는가 하면
자기 자신은 제외하고 나오는 영화도 있습니다.
결과가 이렇게 나오는 것은 무슨 이유 때문에 그런 건지요?