[1] Introduction
앙상블과 랜덤 포레스트
: 다수의 분류기를 사용해서 예측하는 방식, 성능이 좋지만 train, test 시간이 오래 걸림
> 유사도 측정 알고리즘
1) 코사인 유사도: n차원 공간에 있는 두 개의 벡터간의 각도로 유사도 판단 - scikit-learn
2) 피어슨 유사도: 코사인 유사도의 개선 버전
각 벡터 내 셀들의 평균 값 구하기 -> 각 셀에서 평균 값 빼기 ; 모든 벡터가 원점을 중심으로 이동함, 벡터 간 비교가 쉬워짐
[2] 텍스트를 행렬로 표현하는 방법
1) Bag Of Words
: 단어의 수를 카운트해서 표현함
- CountVectorizer
from sklearn.feature_extraction.text import CountVectorizer
text = [
'The sky is blue.',
'The sun is bright.',
'The sun in the sky is bright',
'We can see the shining sun, the bright sun.'
]
countvectorizer = CountVectorizer(analyzer = 'word', stop_words='english') // 단어 단위로
count_wm = countvectorizer.fit_transform(text)
2) TF-IDF
: 단어의 수를 카운트하고 문서군 전체를 보고 중요도를 부여함
단어가 한 문서에서 자주 나오면 중요하지만 이 단어가 다른 문서들에서는 자주 나오지 않는다면 더 중요하다고 생각함
TF(단어 t가 문서 d에서 몇 번 나왔나?), DF(단어 t가 전체 문서군에서 몇번 나왔나?), ln(N/DF) (N은 총 문서 수, DF는 단어가 나온 문서의 수, ex) N은 4, sun이 나온 문서는 3개, Doc4에서 sun은 2개 -> 2*ln(4/3) = 0.575
- 코드
from sklearn.feature_extraction.text import TfidfVectorizer
text = [
'The sky is blue.',
'The sun is bright.',
'The sun in the sky is bright',
'We can see the shining sun, the bright sun.'
]
tfidfvectorizer = TfidfVectorizer (analyzer = 'word', stop_words='english', norm='l2') // 주로 l2 정규화 사용함
tfidf_wm = tfidfvectorizer.fit_transform(text)
- 문제
정확하게 동일한 단어가 나와야 유사도 계산이 됨 (동의어 x)
단어의 수가 늘어나고 아이템의 수가 늘어나면 계산이 오래걸림
워드 임베딩을 사용하는 것이 더 좋음
[3] 일반적인 추천 엔진 아키텍처
1) 아키텍처
- 입력: 사용자 or 아이템
- 협업 필터링 평점 예측 모델 (개인의 선호도 정보) + 콘텐츠 기반 추천 (아이템 정보) = 추천 후보 생성 로직; 다양한 알고리즘이 사용됨
- 추천 후보 랭킹 / 필터링
- 출력: 추천 아이템들
2) 협업 필터링
: 기본적으로 다른 사용자들의 정보를 이용하여 내 취향을 예측하는 방식
a. 사용자 기반: 나와 비슷한 평점 패턴을 보이는 사람들을 찾아서 그 사람들이 높게 평가한 아이템 추천
b. 아이템 기반: 평점의 패턴이 비슷한 아이템을 찾아서 그걸 추천함
c. 예측 모델 기반: 앞의 2개는 유사도를 기반으로 추천 아이템 결정, 이 방식은 평점을 예측하는 머신러닝 모델 생성
> 구현 방식
- 메모리 기반
: 코사인/피어슨 상관계수 유사도를 사용함
유사도를 기반으로 추천
- 모델 기반
: ML을 이용해 평점 예측
행렬의 차원을 줄여서 평점 데이터의 부족 문제 해결
> 평가 방식
- 메모리 기반
: Top-N 방식으로 평가; 사용자가 좋아한 아이템을 일부 남겼다가 추천 리스트에 포함되어 있는지 보는 방식
추천 순서를 고려해서 평가하면 nDCG(normalized discounted cumulative gain)도 사용함
- 모델 기반
:RMSE으로 성능 평가 가능, 과거의 평가가 미래에도 반영될 거라는 보장 X
메모리 기반의 Top-N이나 nDCG 방식도 사용 가능
- 온라인 테스트
: 가장 좋은 방식을 실제 사용자에세 노출시키고 성능을 평가함
> SurpriseLib
: 협업 필터링의 성능 평가와 관련한 다양한 기능을 제공하는 라이브러리
KNNBasic 객체를 사용해 사용자 기반 / 아이템 기반 협업 필터링 구현
SVD 또는 SVDpp 객체를 사용해 모델 기반 협업 필터링
[4] 사용자 기반 협업 필터링
1) 사용자의 유사도 측정
: 사용자들을 벡터(아이템에 대한 평점)로 표현
지정된 사용자(u)와 다른 사용자들(u')과 유사도 측정: 공통으로 평점을 준 아이템만 대상으로 사용자들간 유사도 측정
이 중 가장 비슷한 K명의 사용자 선택 -> 이 K명의 사용자(u')들 대상으로 u가 평가하지 않은 아이템을 평가
u'가 평가한 아이템 i의 평점에 u와 u'의 유사도를 가중치로 합을 계산, 합산한 값이 큰 아이템들을 추천함
[5] 아이템 기반 협업 필터링
: 아이템의 유사도를 기준으로 추천을 하는 아이템 기반 협업 필터링
'ML 공부' 카테고리의 다른 글
[3] 추천 시스템 3 (1) | 2025.03.24 |
---|---|
[1] 추천 시스템 (1) | 2025.03.18 |
TextMining_lecture06 (0) | 2024.11.10 |
TextMining_lecture05 (0) | 2024.11.07 |
TextMining_lecture04 (2) | 2024.11.07 |