본문 바로가기

데이터마이닝

[데이터마이닝] 9.추천 시스템(recommendation system) 9.2절 연습문제 (Exercise 9.2)

디스크 사이즈가 너무 커서 processor speed와 main-Memory Size가 뭍히는 경우. 

row로 나누냐 column으로 나누냐. 

평균정도 되는 것을 평균에 비해서 얼마나 몇프로나 크냐 작으냐 이런식으로 해서 scaling을 하자. column을 해서 해버리면 processor speed와 main-Memory Size는 Disk Size에 비해 너무 적어진다. 

일반적인 스케일링 할때 평균에 대해서 얼마나 크냐 작냐.  평균을 빼고 분산으로 나누고..  분산의 몇배냐? 

평균에 해당하는 애는 1로 만들고 작은애는 1.얼얼마

Maxima를 이용하여 풀이하였다.

a)

b)

c)

계산이 이상하게 나왔다.  --> 계산 제대로 했다. 

 

 

d) 조정인수를 전택하는 타당한 방법 중 하나는 각 인수를 성분의 평균으로 나누는 것이다. 알파와 베타 값은 얼마가 되는가? 두 벡터의 사이 각은 얼마가 되는가? One fair way of selecting scale factors is to make each inversely proportional
to the average value in its component. What would be the values
of α and β, and what would be the angles between the vectors?

A에 대한 알파와 베타는 mean(A)가 되고 

B에 대한 알파와 베타는 mean(B)가 되고 

C에 대한 알파와 베타는 mean(C)가 된다.

A = c(3.06,500,6)
B = c(2.68,320,4)
C = c(2.92,640,6)
S_mean = (A+B+C) / 3

x = 1/S_mean[1]
alpha =  1/S_mean[2]
beta = 1/S_mean[3]

w = c(x, alpha, beta)
# 세 대의 컴퓨터에 대한 각 벡터 쌍 사이의 코사인 각을 alpha와 beta에 대하여 계산하여라. 

A = w*A
B = w*B
C = w*C

cos = function(A,B){
  return( sum(A*B) / ( sqrt(sum(A^2)) * sqrt(sum(B^2)) ) )
}

cos(A,B)
cos(B,C)
cos(C,A)

 

알파는 :  1/((500+320+640)/3) = 0.0009677419

베타는 :  1/((6+4+6)/3) = 0.08333333

거의 0도라고 봐야한다...


a)연습문제 9.2.1에서 설명한 세 대에 컴퓨터에 해당하는 벡터를 정규화하여라 

잘못구한 결과

 

맞게 구한 결과

b)이 질문에서는 어려운 계산이 필요하지 않으나, 두 벡터 사이의 각이 무엇을 의미하는지 깊이 생각해봐야한다. 연습문제 9.2.1의 데이터처럼 모든 성분이 음수가 아닐 때는 어떤 벡터들의 각도 90도를 넘지 않는다. 그러나 벡터를 정규화하면, 음수 성분들이 생기고, 따라서 그 각은 0부터 180도까지 어느 각이든 될 수 있다. 게다가 이제 모든 성분에서 평균이 0이 되므로 , 성분들을 평균값으로 나누어야 한다는 연습문제 9.2.1(d)의 주장은 타당하지 않다. 정규화된 벡터의 각 성분을 대상으로 적절한 조정 값을 찾는 방법을 제시하라. 정규화된 벡터들 사이의 작은 혹은 큰 각을 어떻게 해석해야 하는가? 연습문제 9.2.1의 데이터로부터 유추되는 정규화된 벡터에 대하여 각은 얼마가 되어야 하는가?

...

왜 계속 이렇게 나오냐.. 

잘못구한 결과

어떻게 해야 적절한 조정 값을 찾을 수 있을까. 생각생각생각.

평균을 뺐으니 
표준편차로 나눠주자. 
분산= 편차^2의 평균 
#Exercise9.2.2 b)
A = c(3.06,500,6)
B = c(2.68,320,4)
C = c(2.92,640,6)
S_mean = (A+B+C) / 3
#분산은 편차 제곱의 평균
S_v = ( (A-S_mean)^2 + (B-S_mean)^2 + (C-S_mean)^2 ) / 3
S_sd = sqrt(S_v) #표준편차
A=(A-S_mean) / S_sd
B=(B-S_mean) / S_sd
C=(C-S_mean) / S_sd
cos(A,B)
cos(B,C)
cos(C,A)

이것이 적절하게 조정 후 나온 결과.


a)각 사용자별 순위를 정규화하라. 

b)연습문제 9.2.1의 데이터를 기반으로 해당 사용자에 대한 사용자 프로파일을 프로세서 속도, 디스크 용량, 메인 메모리 용량에 해당하는 성분으로 구성하라.

 

별점을 3명이 다 똑같이 주었다고 생각을 해보자. 

A,B,C가 component 3개짜리 벡터 

dimension별로 평균을 내준다. 

A,B,C를 다 똑같이 좋아한다고 하니 이 사람의 취향은 3개의 평균 쯤 일 것 아니냐. 

user profile이 item profile의 평균쯤 되겠다. 

 

별점이 4,2,5이므로 

4:2:5로 weight를 주어서 평균을 내면 된다.

A = c(3.06,500,6)
B = c(2.68,320,4)
C = c(2.92,640,6)
(A*4 + B*2 + C*5 ) / 11