[TIL] 내일배움캠프 103일차_[ML] TF-IDF 벡터화 예제 : 책 추천
👀Today I Learn
데이터 준비
-
책의 제목과 설명을 포함하는 간단한 데이터셋을 가정
import pandas as pd # 샘플 책 데이터 books = pd.DataFrame({ 'title': [ '해리 포터와 마법사의 돌', '반지의 제왕: 두 개의 탑', '어린 왕자', '셜록 홈즈의 모험', '1984' ], 'description': [ '마법과 모험이 가득한 해리 포터의 이야기', '사우론의 반지를 파괴하기 위한 여행', '어린 왕자가 들려주는 철학적인 이야기', '셜록 홈즈가 해결하는 미스터리 사건', '독재 사회에서 살아남는 인간의 이야기' ] })
TF-IDF 벡터화 및 코사인 유사도 계산
-
TF-IDF 벡터화를 수행한 후, 코사인 유사도를 이용하여 가장 유사한 책을 추천
from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # TF-IDF 벡터화 vectorizer = TfidfVectorizer() tfidf_matrix = vectorizer.fit_transform(books['description']) # 코사인 유사도 계산 cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)
추천 함수 구현
-
사용자가 특정 책을 선택했을 때, 가장 유사한 책을 추천하는 함수를 작성
def recommend_book(title, books, cosine_sim): idx = books[books['title'] == title].index[0] # 선택한 책의 인덱스 sim_scores = list(enumerate(cosine_sim[idx])) # 유사도 리스트 sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True) # 유사도가 높은 순으로 정렬 sim_scores = sim_scores[1:3] # 자기 자신을 제외한 상위 2개 추천 book_indices = [i[0] for i in sim_scores] return books['title'].iloc[book_indices] # 예제 실행 recommendations = recommend_book('해리 포터와 마법사의 돌', books, cosine_sim) print(recommendations)
실행 결과
-
해리 포터와 모험 및 판타지 요소가 유사한 책을 추천
1 반지의 제왕: 두 개의 탑 2 어린 왕자 Name: title, dtype: object
💡Today I Thought
오늘의 체크리스트
- 알고리즘 코드카타 1문제
- SQL 코드카타 1문제
- ML 공부
- TIL 작성
회고
집안일 좀 하다가 허리를 삐끗했다. 내일부터 다시 12시간 앉아있어야 하는데 괜찮을지 모르겠다…🥲 오늘 React도 한번 쓰윽 배웠는데, 생각보다 어려워서.. 괜찮을지는 잘 모르겠다. 일단 내일은 ML부터 구현하고 React로 프론트를 구현하던지 해봐야할 것 같다.
댓글남기기