추천 시스템 UserCF 1: 사용자 싱크로 율
3195 단어 추천 시스템
먼저 사용자 의 행위 데 이 터 를 소개 합 니 다. 한 사이트 에서 사용자 의 행위 데 이 터 는 일반적으로 사용자 가 사 이 트 를 방문 한 후에 서버 에 남 겨 진 방문 일 기 를 말 합 니 다. 주로 조회, 클릭, 구 매, 평가, 평론, 공유 등 몇 가지 로 나 눌 수 있 습 니 다.
협동 필터 링 알고리즘 은 여러 가지 방법 으로 이 루어 질 수 있다. 예 를 들 어 이웃 을 바탕 으로 하 는 방법, 은어 적 의미 모델, 그림 을 바탕 으로 하 는 무 작위 이동 등 이다. 다음 내용 은 이웃 을 바탕 으로 하 는 방법 을 선택 하 는데 이것 도 공 인 된 효과 가 상대 적 으로 좋 은 방법 이다.
이웃 지역 을 바탕 으로 하 는 협동 여과 은 주로 두 가지 로 나 뉘 는데 사용자 의 협동 여과 와 물품 을 바탕 으로 하 는 협동 여과 이다.전 자 는 사용자 에 게 그의 취미 와 비슷 한 다른 사용자 가 좋아 하 는 물건 을 추천 하고 후 자 는 그 가 이전에 좋아 했 던 물건 과 비슷 한 물건 을 추천 했다.
사용자 의 협동 여 과 를 바탕 으로 정의 하면 다음 과 같은 두 단계 로 나 눌 수 있 습 니 다.
1. 목표 사용자 의 관심 사 와 비슷 한 사용자 집합 찾기
2. 이 집합 중의 사용자 가 좋아 하 는 것 을 찾 고 목표 사용자 가 듣 지 못 한 아 이 템 을 목표 사용자 에 게 추천 합 니 다.
본론 으로 들 어가 사용자 싱크로 율.
1. 사용자 싱크로 율 을 계산 하 는 기본 알고리즘:
(1) Jaccard 계수: 샘플 집합 과 샘플 집합 의 비례 값, 즉 J = | A ∩ B | / | A ∪ B |
(2) 코사인 싱크로 율: 코사인 유사 성 이 라 고도 부른다.두 벡터 의 협각 코사인 값 을 계산 하여 그들의 싱크로 율 을 평가 합 니 다. 즉, w = | A ∩ B | / √ | A | * | B |
2. 데이터 세트
여기 MovieLens (http://grouplens.org/datasets/movielens/1m/) 의 1M 데이터 세트
3. 우선 ratings. dat 의 데 이 터 를 처리 하여 사용 하기에 편리 합 니 다.
def readRatingDate(path=''):
'''
csv
:param path:
:return: DataFrame
'''
f = pd.read_table(path,sep='::',names=['UserID','MovieID','Rating','Timestamp'])
f.to_csv('ratings.csv',index=False)
return f
4. 그 다음 에 사용자 데이터 의 싱크로 율 을 계산 하 는 함수 가 필요 합 니 다. 여기 서 우 리 는 코사인 싱크로 율 로 계산 합 니 다.
def calcuteSimilar(series1,series2):
'''
:param data1: 1 Series
:param data2: 2 Series
:return:
'''
unionLen = len(set(series1) & set(series2))
if unionLen == 0: return 0.0
product = len(series1) * len(series2)
similarity = unionLen / math.sqrt(product)
return similarity
5. 마지막 으로 계산 합 니 다. 사용자 1 과 가장 비슷 한 사용자 10 명 을 기본 으로 되 돌려 줍 니 다.
def calcuteUser(csvpath,targetID=1,TopN=10):
'''
targetID
:return: TopN Series
'''
frame = pd.read_csv(csvpath) #
targetUser = frame[frame['UserID'] == targetID]['MovieID'] #
otherUsersID = [i for i in set(frame['UserID']) if i != targetID] # ID
otherUsers = [frame[frame['UserID'] == i]['MovieID'] for i in otherUsersID] #
similarlist = [calcuteSimilar(targetUser,user) for user in otherUsers] #
similarSeries = pd.Series(similarlist,index=otherUsersID) #Series
return similarSeries.sort_values()[-TopN:]
6. 결과
ID 싱크로 율
681 0.311960
5762 0.315668
4718 0.315709
1858 0.319137
6006 0.320719
5705 0.334187
1283 0.364549
5190 0.377051
1481 0.384610
5343 0.389188
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[프로그래머스 과제관] 채용 공고 추천 - EDA 및 전처리Programmers 채용 공고 페이지를 방문한 개발자들의 방문/지원 기록을 바탕으로 추천 모델을 만들어야 합니다. 전체 학습 데이터 중 applied = 1인 데이터와 applied = 0인 데이터의 수를 살펴보았...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.