추천 시스템 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

좋은 웹페이지 즐겨찾기