일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- mariadb설치 #mysql설치
- FastAPI
- 리눅스 # 기초
- HeidiSQL
- aiflow
- text.children
- 원하는 태그 찾기
- requesthead
- ssh operator
- enumerate #함수 # def
- beautifulsoup
- 모델서빙
- Google Cloud Storage
- 파일저장
- celery
- with open
- 정규표현식
- 자연어처리 환경 컨테이너
- cron
- 자동화
- JavaScripts
- etl
- pickle #datetime
- K-ICT
- requests
- datetime #zip
- 빗썸api
- 가상환경 초기세팅
- Docker
- airflow
- Today
- Total
오음
추천시스템 본문
추천시스템 역사
연관 규칙 - 규칙 평가 지표
연관 분석 문제점:
아이템의 수가 늘어날 수록 너무 많은 규칙이 생김
Apriori 알고리즘
빈번한 아이디어 아이템 셋 또한 빈번할 것이다. → 아이템 셋의 증가를 줄이는 방법
항목 집단을 줄이면서 진행
희소 행렬 : 0이라는 무의미한 값이 많은 행렬을 의미
Implicit Feedback : 구매하고 만족했는지 만족 안 했는지 모르는 데이터를 표현한다.
- 단일 항목 집단 생성
p(우유) : 0.5 / p(양상추) : 0.75 / p(기저귀) : 0.75 / p(주스): 0.25 / p(맥주) : 0.75
- 단일항목집단에서 최소 지지도(support)이상의 항목만 선택
- 이제 2개 항목 집단 생성
- 최소 지지도 이상의 항목만 선택
- 위의 과정을 k개의 k-item frequent set을 생성할 때까지 반복
단점 : 데이터가 클 경우(item이 많은 경우) 속도가 너무 느림 / 너무 많은 연관 상품들이 나타남
FP_Growth 알고리즘
- 최소 지지도를 없애는 것은 aprori알고리즘과 같음
- 모든 거래에서 빈도가 높은 아이템 순서대로 순서를 정렬한다. ex) 기저귀가 우유보다 더 많이 나왔음으로 정렬을 기저귀 ,우유
- 부모 노드를 중심으로 거래를 자식 노드로 추가해주면서 tree 생성
- 새로운 아이템이 나올 경우에는 부모노드부터 시작하고, 그렇지 않으면 기존의 노드에서 확장
- 지지도가 낮은 순서부터 시작하여, 조건부 패턴을 생성
- 모든 아이템에 대해서 반복
- 조건을 토대로 패턴 생성
장점: DB를 두번만 스캔하면 되기 때문에 빠름/ 후보 itemsets을 생성할 필요 없음
단점 : 대용량에서 효율적이지 않음 / 설계가 어려움
컨텐츠 기반 추천
유사도 함수
- 유클리디안 유사도 : p와 q의 거리를 단순 계산하는 방법
- 계산하기 쉬움
- But p와q의 분포가 다르거나 범위가 다른 경우 상관성을 놓칠 수 있음
- 코사인 유사도 : 얼마나 비슷한 방향(cos(세타))을 가지고 있는지를 계산 ex) 세타가 똑같으면 같은 방향을 보고 있음으로 1을 가짐
- 벡터의 크기가 중요하지 않은 경우에 예를 들어 문서 내에서 단어의 빈도수 - 문서들의 길이가 고르지 않더라도 문서 내에서 얼마나 나왔는지라는 비율로 확인하기 때문에 상관없음
- 반대로 벡터의 크기가 중요한 경우에 대해서 잘 작동하지 않음
방향으로
- 피어슨 유사도 : 상관 계수 기반으로 계산
- sorence 유사도
- 유사도 구하는 방법은 여러 개 있음 -> 상황에 맞게 써야한다.
- 유사도 값을 가중치를 더해서 적절하게 만들 수도 있다.
- 각각의 유사도 모델을 만들고 순서대로 추천해 줄 수 도 있다.
- 유사도 매트릭스들을 더해서 만들어도 된다.
컨텐츠 기반 모델 이론
1.2 TF-IDF모델
- 특정 문서 내에 특정 단어가 얼마나 자주 등장하는 지를 의미하는 단어 빈도(TF)와 전체 문서에서 특정 단어가 얼마나 자주 등장하는지를 의미하는 역문서 빈도(DF)를 통해서 “다른 문서에서는 등장하지 않지만 특정 문서에서만 자주 등장하는 단어”를 찾아서 문서 내 단어의 가중치를 계산하는 방법.
- 용도 : 문서의 핵심어를 추출,문서들 사이의 유사도를 계산, 검색 결과의 중요도를 정하는 작업등에 활용할 수 있음
TF(d,t)
- 특정 문서 d에서의 특정 단어 t의 등장 횟수
DF(t)
- 특정 단어 t가 등장한 문서의 수
IDF(d,t)
- DF(t)에 반비례하는 수
⇒ TF(d,t) * IDF(d,t) = TF_IDF(d,t)
단순 빈도만을 계산하기에 조사,관사처럼 의미는 없지만 문장에 많이 등장하는 단어들도 높게 쳐주는 한계가 있다. 이러한 단어들에 패널티를 줘서 적절하게 중요한 단어만을 잡아내는게 TF-IDF 기법이다.
예제)
- TF는 문서수 / DF는 문서내에 바나나가 포함한 문서가 몇개인지
2. IDF 계산
n은 문서의 개수 / 1+df(t) :IDF(역 문서 빈도)
3. TF * IDF 를 곱하면 최종 매트릭스가 나옴
4. 문서간의 유사도를 계산
5. 먹고 싶은 사과 user에게 먹고 싶은 바나나 를 추천!
장점 : 직관적인 해석이 가능함
단점 : 메모리 효율적으로 사용하지 못함/ 매우 sparse한 형태의 데이터 / 높은 차원을 가짐
https://www.kaggle.com/code/chocozzz/00-tf-idf-2
00. 컨텐츠 기반 추천시스템 - TF-IDF를 이용한 추천시스템#2
Explore and run machine learning code with Kaggle Notebooks | Using data from T Academy Recommendation2
www.kaggle.com
https://www.youtube.com/watch?v=43gb7WK56Sk&list=PL9mhQYIlKEhdkOVTZWJJIy8rv6rQaZNNc
'데이터 분석' 카테고리의 다른 글
Word2Vec모델 (1) | 2023.10.09 |
---|