Pearson 상관관계는 값이 실제 워드카운트인 블로그 데이터셋에 잘 적용된다. 그러나 이 데이터 세트는 존재 또는 부재에 대한 1초와 0초만 가지고 있으며, 두 항목을 원하는 사람 사이의 겹침 측정치를 정의하는 것이 더 유용할 것이다. 이것에 대해, 유니온 세트(둘 세트에 있는 모든 항목만 해당)에 대한 교차 집합의 비율인 타니모토 계수(Tanimoto 계수)라는 척도가 있다. 이는 다음과 같은 두 벡터에 대해 쉽게 정의된다.


def tanamoto(v1,v2):

 c1,c2,shr=0,0,0

 for i in range(len(v1)):

 if v1[i]!=0: c1+=1 # in v1

 if v2[i]!=0: c2+=1 # in v2

 if v1[i]!=0 and v2[i]!=0: shr+=1 # in both


이렇게 하면 1.0에서 0.0 사이의 값이 반환된다. 값이 1.0이면 첫 번째 품목을 원하는 사람은 아무도 두 번째 품목을 원하지 않는다는 뜻이고, 0.0은 정확히 같은 세트의 사람들이 두 가지 품목을 원한다는 뜻이다.



클러스터링 결과

데이터가 이전과 동일한 형식이기 때문에 계층적 클러스터를 생성하고 그리는 데 동일한 기능을 사용할 수 있다. 이것은 이 기능을 가진 두 벡터에 대해 쉽게 정의된다. 


>> reload(clusters)

>> wants,people,data=clusters.readfile('zebo.txt')

>> clust=clusters.hcluster(data,distance=clusters.tanamoto)

>> clusters.drawdendrogram(clust,wants)


이렇게 하면 원하는 소유물의 군집과 함께 새로운 파일인 Clusters.jpg가 생성된다. 다운로드 가능한 데이터 세트의 결과는 그림 3-6에 나와 있다. 마케팅 정보로 볼 때 이곳에는 지구촌을 뒤흔드는 것은 없다. 같은 사람들이 Xbox, PlayStation 휴대용, PlayStation 3을 원하지만, 매우 야심적인 그룹(보트, 비행기, 섬)과 영혼 탐색자(친구, 사랑, 행복)와 같은 몇 가지 분명한 그룹이 등장한다. "돈"을 원하는 사람들은 단지 "집"을 원하는 반면, "돈 많은"을 원하는 사람들은 "좋은 집"을 선호한다는 것도 흥미롭다.


초기 검색을 변경하거나, 검색된 페이지 수를 변경하거나, "I want" 검색이 아닌 "I own" 검색에서 데이터를 얻음으로써 다른 흥미로운 항목 그룹을 찾을 수 있을 것이다. 또한 매트릭스를 변환하고 사용자를 그룹화하여 볼 수 있는데, 이는 연령대가 어떻게 사람들을 구분하는지 보기 위해 그들의 나이를 수집함으로써 더욱 흥미로울 것이다.



2차원의 데이터 보기

이 장의 클러스터링 알고리즘은 2차원의 데이터 스타일 시각화를 사용하여 입증되었으며, 다양한 항목 간의 차이는 도표에서 얼마나 멀리 떨어져 있는가에 의해 표시한다. 클러스터링하고자 하는 항목의 대부분의 실제 예제에는 두 개 이상의 숫자가 있으므로 데이터를 그대로 가지고 2차원으로 표시할 수는 없다. 그러나 여러 항목 간의 관계를 이해하기 위해서는 유사성을 나타내는 거리가 가까운 페이지에 도표를 찍는 것이 매우 유용할 것이다.


이 절에서는 데이터 세트의 2차원적 표현을 찾는 데 사용되는 다차원적 스케일링이라는 기술을 소개할 것이다. 알고리즘은 모든 항목 쌍의 차이를 취하여 항목 사이의 거리가 이러한 차이와 일치하는 차트를 만들려고 한다. 이를 위해 알고리즘은 먼저 모든 항목 사이의 목표 거리를 계산한다. 블로그 데이터 세트에서는 항목을 비교하는 데 피어슨 상관 관계가 사용되었다. 


모든 항목 쌍에 대해 목표 거리를 현재 거리와 비교하고 오차 항을 계산한다. 모든 항목은 두 항목 사이의 오류에 비례하여 조금씩 더 가까이 또는 더 멀리 이동한다. 그림 3-9는 항목 A에 작용하는 힘을 나타낸다. 도표에서 A와 B의 거리는 0.5이지만 목표 거리는 0.2에 불과해 A를 B에 가깝게 이동시켜야 한다. 동시에 A도 너무 가깝다는 이유로 C와 D에게 밀려나고 있다.


모든 노드는 노드를 밀고 당기는 다른 모든 노드의 조합에 따라 이동한다. 이 일이 발생할 때마다 현재 거리와 목표 거리 간의 차이는 약간 작아진다. 이 절차는 항목을 더 이동시켜 총 오차량을 줄일 수 없을 때까지 여러 번 반복된다.


이를 위한 함수는 데이터 벡터를 가져다가 2차원 차트에 있는 항목의 X와 Y 좌표라는 두 개의 열만으로 하나를 반환한다. 


그림 3-10은 다차원 스케일링 알고리즘의 결과를 보여준다. 그 군집들은 덴드로그램에서처럼 잘 만들어지지는 않지만, 여전히 꼭대기에 위치한 검색엔진 관련 그룹과 같은 주제별 그룹화가 분명히 존재한다. 이것들은 결국 정치와 유명인사의 블로그로부터 매우 멀리 떨어져 있다. 만약 이 표현이 3차원으로 이루어진다면, 군집들은 훨씬 더 나아질 것이다. 하지만 이것은 분명히 종이로 시각화하기 어려울 것이다.



클러스터링할 기타 사항

이 장에서는 두 가지 데이터셋을 살펴보았지만, 그 외에도 할 수 있는 일이 많다. 2장의 del.icio.us 데이터 집합을 클러스터링하여 사용자 그룹이나 북마크 그룹을 찾을 수도 있다. 블로그 피드가 워드 벡터로 변환된 것과 같은 방식으로 다운로드되는 모든 페이지 집합은 단어로 축소될 수 있다.


이러한 아이디어는 단어 사용에 기초한 게시판, 야후의 회사들과 같은 흥미로운 것들을 찾기 위해 다양한 분야로 확장될 수 있다. 다양한 통계에 근거한 재정, 혹은 그들이 좋아하는 것에 따라 아마존의 최고 평론가들. 또한 마이스페이스와 클러스터링 피플과 같은 대규모 소셜 네트워크를 그들의 친구가 누구인지에 따라 보거나, 그들이 자신에 대해 제공하는 다른 정보(가장 좋아하는 밴드, 음식 등)를 사용할 수도 있다는 것도 흥미로울 것이다.


우주에 있는 물건들의 매개변수에 따라 상상하는 개념은 이 책에서 반복되는 주제일 것이다. 다차원적 스케일링을 사용하면 데이터 세트를 효과적으로 활용하여 쉽게 해석할 수 있는 방식으로 볼 수 있는 효과적인 방법이다. 확장 과정에서 일부 정보가 손실된다는 것을 깨닫는 것은 중요하지만, 그 결과는 알고리즘을 더 잘 이해하는 데 도움이 될 것이다.

  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기