google_adsense2


R의 recommenderlab를 이용한 추천 시스템 만들기 2 by 메타샤워

이번에는 recommenderlab 패키지 내에 있는 Jester5k 데이터 세트를 이용해본다.

익명의 평가 데이터에서 5000명의 사용자 샘플을 포함하고 있는 데이터이다
Jaster Online Joke Recommender시스템은 1999년 4월에서부터 2003년 5월 사이에 수집되었다.
데이터 세트는 100개의 농담에 대한 평가가 포함되어 있다.
-10 에서 + 10사이의 평점으로 표시되고
모든 사용자는 36개 이상의 농담에 대해서 평가하였다.

먼저 데이터를 불러와 보자

data("Jester5k")
Jester5k
cs

Jaster5에는 362106개의 평가 데이터가 있다. 평균적으로 한 사용자당 72개의 농담에 대한 평가가 있다. 
5000명의 모든 사용자에서 단위 집합을 샘플링한다. 
1000명의 사용자를 무작위로 샘플링하여 평가 매트릭스를 재 구성한다. ( 난수 활용 )



set.seed(1234)
= sample(Jester5k, 1000)
r
cs



무작위 샘플링 하여 대략 73000개의 평가 샘플링되었다.
(난수로 인해 샘플링 되어 1000명의 사용자가 매번 다를수 있어 샘플링한 개수는 매번 다를수 있다.)
샘플링된 데이터셋에서 각 사용자가 매긴 농담의 평점을 확인할수 있다.
ex) 데이터셋트 내 첫번째 사용자가 매긴 농담 데이터 

> rowCounts(r[1,])
u5092
70
 
> as(r[1,], "list")
   j1    j2    j3    j4    j5    j6    j7    j8 
-3.40 -3.40 -1.99  1.31 -4.03 -0.15 -4.22 -4.56 
   j9   j10   j11   j12   j13   j14   j15   j16 
-4.37 -0.34  0.53 -5.87 -2.57 -5.39  0.44 -3.98 
  j17   j18   j19   j20   j21   j22   j23   j24 
-3.35 -4.03 -4.03 -0.29 -3.79 -3.59  0.05 -6.94 
  j25   j26   j27   j28   j29   j30   j31   j32 
-0.53 -2.57  1.80 -5.87  2.14 -4.42 -1.70  0.68 
  j33   j34   j35   j36   j37   j38   j39   j40 
-7.82 -0.49 -0.92  2.38 -7.96 -5.15 -5.87 -7.23 
  j41   j42   j43   j44   j45   j46   j47   j48 
-4.37 -2.33 -5.15  0.34  3.40 -1.60 -2.04 -3.11 
  j49   j50   j51   j52   j53   j54   j55   j56 
 2.82  2.96 -3.35  1.07  0.10 -6.99  0.78 -2.57 
  j57   j58   j59   j60   j61   j62   j63   j64 
-6.75 -6.60 -4.51  1.46 -1.55  1.12 -7.48 -7.96 
  j65   j66   j67   j68   j69   j70 
 2.52  0.49 -3.25 -1.21  2.18 -5.87 
cs



1번째 사용자는 총 70개의 농담에 대해 평점을 매겼고 각 평점은 list로 자료구조를 변환하여
확인할수 있다.

> rowMeans(r[1,])
    u5092 
-2.413429
cs

1번째 사용자의 70개 평점에 대한 평균을 구해볼수도 있다.


데이터를 더 잘 이해하기 위해 여러 배포판을 살펴보겠다.
getRatings() 함수를 통해 매트릭스내 모든 등급을 살펴 볼수 있다.

샘플링 된 데이터의 모든 등급을 확인하여 히스토그램을 그려보자.


hist(getRatings(r), breaks = 1000)
cs



전체적인 평가들을 본다면 부정적인 평가에 대해서는 일정한 빈도로 발생하는 반면 

긍정적인 평가는 적은 점수가 더 편향적으로 발생하는것을 볼수 있다. 

이 히스토그램은 그저 r 에 대해서 분포를 그린것이므로 평햔성이 강한 사용자 때문에

나오는 결과 일수 있다. 모든 사용자에 대해서 평준화, 정규화 작업을 거쳐 다시 비교해보자

정규화 작업은 일반정규화와  z-score 정규화 를 하여 두 정규화 결과를 비교해 보겠다.



hist(getRatings(normalize(r)), breaks =100)
hist(getRatings(normalize(r, method="Z-score")),breaks =100)
cs







asd












핑백

덧글

댓글 입력 영역


google_adsense