[집단지성 프로그래밍] 82page 표 3.6 계산 방법

올해 마지막 번역서 질문이 와서 아예 블로그에 정리하고자 한다. 물론 내일 또 올수도 있겠지만 빈도를 볼때 마지막 일듯 하다. ^^;

 

일단 글과 태그간의 행렬(표3.2)이 계산되어 있고, 사람과 태그간의 행렬이 (표 3.5)에 계산되어 있다. 이들을 가지고 사람과 글간의 유사도 행렬을 계산한게 표3.6이다.

간단히 유사도는 벡터 유사도 방법으로 책에서 진행을 했고, 유사도 행렬을 계산을 간단히 하기 위해 단순히 내적만으로 구할 수 있게끔 정규화까지 시켜놓은 상태이다. 이 상태에서 사람과 글간의 유사도 행렬을 구하기 위한 식은 아래와 같다.

(표 3.5) %*% t(표 3.2)

%*%는 행렬 곱을 의미하고 t는 전치행렬을 의미한다.

이 행렬식의 의미는 사람의 속성을 태그로 표현한게 (표 3.5)이고 (표 3.2)는 글을 태그로 표현했다고 하는 이해가 필요하며, 결과적으로 태그로 표현된 사람과 태그로 표현된 글간의 유사도를 계산하는 식이라고 생각하면 된다. 결국 사람과 글의 직접적인 유사도 비교가 불가능하기 때문에 중간 매개체인 태그를 활용한거라 이해하면 된다.

이를 R코드로 풀어서 보여주면 아래와 같다.

> namebytag <- matrix(data=c(.3536, .7071,.3536,.3536,.3536,0,0,.5773,0,.5773,0,.5773), byrow=T, ncol=6)
> namebytag
       [,1]   [,2]   [,3]   [,4]   [,5]   [,6]
[1,] 0.3536 0.7071 0.3536 0.3536 0.3536 0.0000
[2,] 0.0000 0.5773 0.0000 0.5773 0.0000 0.5773
> articlebytag <- matrix(data=c(.3578, .7156, .5367, .2683, 0, 0, 0,.4682,0,.7491,.4682,0,.0891,.3563,0,.2673,0,.891), byrow=T, ncol=6)
> articlebytag
       [,1]   [,2]   [,3]   [,4]   [,5]  [,6]
[1,] 0.3578 0.7156 0.5367 0.2683 0.0000 0.000
[2,] 0.0000 0.4682 0.0000 0.7491 0.4682 0.000
[3,] 0.0891 0.3563 0.0000 0.2673 0.0000 0.891
> t(articlebytag)
       [,1]   [,2]   [,3]
[1,] 0.3578 0.0000 0.0891
[2,] 0.7156 0.4682 0.3563
[3,] 0.5367 0.0000 0.0000
[4,] 0.2683 0.7491 0.2673
[5,] 0.0000 0.4682 0.0000
[6,] 0.0000 0.0000 0.8910
> tagbyarticle <- t(articlebytag)
> namebytag %*% tagbyarticle
          [,1]      [,2]      [,3]
[1,] 0.9171668 0.7615015 0.3779628
[2,] 0.5680055 0.7027473 0.8743786

namebytag 행렬이 (표 3.5)이며, articlebytag가 (표 3.2)이다.

아래와 같이 (표 3.2)의 전치 행렬을 구하고

tagbyarticle <- t(articlebytag)

행렬곱을 수행할 결과가

namebytag %*% tagbyarticle

(표 3.6)과 같음을 알 수 있다.

CC BY-NC 4.0 [집단지성 프로그래밍] 82page 표 3.6 계산 방법 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.