Clustering

FrontPage|FindPage|TitleIndex|RecentChanges| UserPreferences P RSS

FrontPage쇼핑지도 Clustering

군집분석: 군집화. 데이타의 물리적 혹은 추상적 객체를 비슷한 객체군으로 묶는 과정

대량의 데이타들로 부터 쉽게 드러나지 않는 유용한 정보를 추출하는 과정을 통계학 용어로 DataMining이라고 한다. 이 DataMining에는 여러가지 기법들이 있는데 Clustering도 그 중 하나이다.

실제 최근의 급격한 정보량의 증가는 이를 효과적으로 분류해야하는 과제를 낳는데, 이 분류과정, 군집과정을 통해서 데이타들의 성격 및 유용정보발굴을 해낼 수 있고, 이는 경영학, 정보공학, 생물정보학등의 분야에서 많이 활용된다.

특히도, 생물정보학분야에서는 최근의 HTS(High Throughput Screening, 대용량실험)실험기법의 발달로 방대한 데이타를 얻는일이 용이해졌으며, 이에 따라 이 방대한 데이타를 효과적으로 분석할 수 있는 다양한 방법들이 시도되고 있으며 Clustering은 그 한 방법으로, 많은 유용정보들을 제공한다.



1. 접근방법

실제, N개의 객체들을 p개의 변수 각각에 대해 얻은 관찰결과가 크기 (N × p) 자료행렬로 주어졌다고 할 때, 각 객체의 관찰값에 대응되는 한 행벡터(row vector)는 p-차원 공간에서 한 개의 점으로 생각될 수 있다. 이때 이 P-차원 공간에 N개의 점(또는 N개의 관찰값)들이 전체 공간에 걸쳐 랜덤하게(randomly) 흐트러져 있는지, 혹은 어떤 의미의 조밀성을 가지고 군집(cluster)을 이루고 있는지에 관한 정보를 가진다는 것은 다변량자료에 대한 구조적 단순화 내지 요약이라는 측면에서 매우 중요한 의미를 갖게된다.

이러한 군집분석을 사용한 예들로는

  • 전산학 - 문헌분류, 정보검색, Recommendation System, (Web) Personalization, ...
  • 생물분류 - 생물을 특성에 따른 생물분류 혹은 진화적연관관계 규명을 위한 생물분류
  • Gene Expression pattern - 유전적발현정도에 따른 유사유전자분류
  • 의학-증세에 따라 분류된 환자에 대한 처방의 결정
  • 심리학-성격유형에 따른 개인들의 분류
  • 인류학-석기(stone tools)나 화석등에 근거한 문화발찰과정
  • 경영학- CustomerRelationshipManagement, ...

위와 같은 군집분석의 이용은 같은 군집에 속한 객체들끼리는 어떤 종류의 밀접한 상사성이, 그리고 서로 다른 군집에 속한 객체 사이에는 상대적 비상사성이 존재하는 것을 원칙으로 한다. 따라서, 각 객체가 군집의 갯수, 내용, 구조 등이 사전에 정의되지 않은 상황하에서 군집의 구성원이 됨을 객체 사이의 '상사성'(또는 비상사성)에 근거하여 식별함으로써 전체 다변량자료의 구조를 파악하고, 군집의 형성과정과 그 특성, 그리고 식별된 군집간의 관계등을 체계적으로 연구, 분석하는 과정의 총체를 군집분석의 목적이라 할 수 있겠다. 이와 같이 군집분석은 군집들의 갯수나 구조에 관한 아무런 가정없이 객체들 사이의 상사성 또는 거리(비상사성)에 근거하여 '자연스러운' 군집을 찾고 나아가 자료의 요약을 꾀하는 원시적이고 탐색적인 통계방법이다. 이러한 군집분석과정은 요약해서 다음 4단계로 말할 수 있다.

  1. N개의 객체에 대해 P개의 변수를 관찰하여 크기 (N × p)인 자료행렬을 구한다.
  2. N개의 객체 사이의 크기 (N × N)인 상사(또는 비상사)행렬을 계산한다.
  3. 상사(또는 비상사)행렬에 근거하여 서로 배반적이거나, 계보적인 군집들을 형성한다.
  4. 각 군집의 성격이나 상호관계를 파악한다.

군집의 유형은 대체로 다음과 같이 나눠 생각할 수 있다.

  • 상호배반적(disjoint) 군집 - 각 객체가 상호배반적인 여러 군집중 어느 하나에 만 속함.
  • 계보적(hierarchical) 군집 - 한 군집이 다른 군집의 내부에 포함되나 군집간의 중복이 허용되지 않고 가계보 혹은 나무모양의 형식을 취함.
  • 중복(overlapping) 군집 - 두 개 이상의 군집에 한 객체가 동시에 소속됨 을 허 용함.
  • Fuzzy 군집 - 각 객체가 각 군집에 속할 확률이나 자격을 어떤 지표로 규정하는데, 이는 상호배반적, 계보적, 중복 등의 어느 형태를 취할 수 있음.

2. Clustering 기법들

3. 예제

4. 일상 생활

AmazonDotCom에서 책을 여러권 구입한 사람이라면, "이 책을 산 다른 사람들은 이런 책도 샀다"고 하면서 책 리스트를 보여주거나, "아마 당신은 이 책들에 관심이 있을 것이다"고 하며 또 추천 리스트를 보여주는 것을 경험했을 것이다. 모두 기본적으로 일종의 Clustering으로 볼 수 있다. 즉, 철수가 A라는 책, B라는 책, C라는 책을 샀고, 영희가 A, B, D, E를 산 경우, Clustering을 통해 철수와 영희는 같은 그룹에 속할 수 있다. (A와 B라는 책을 공동으로 샀기 때문)

이 경우, 철수에게는 영희가 샀던 D나 E를 추천하고, 영희에게는 C를 추천하게 된다.

5. 질의 응답

Q1: SPSS를 이용해서 이런 Cluster Analysis나 Dyadic Analysis를 할 수 있는 방법이 무엇인가 하는 건데요, 혹시 아시나요? 즉 케이스들을 묶는 방법이요, 묶어서 분석하는 방법에 대해 자세히 알려주실 수 있으신지...

A1: SPSS 에서 k-means cluster는 간단하게 구현됩니다. Analyze - Classfy - K-Means Cluster 선택하고 Number of Clusters 에 원하는 클러스터의 갯수를 적습니다. 그 다음 Save 라는 옵션에서 Cluster Membership 과 Distance from cluster center 를 check 해 줍니다. 그 다음 OK!


Q2: 명목형(nominal) 변수로도 Clustering이 가능한가요? 위의 유전자 발현 시간의 예에서처럼 일반적으로 EuclideanDistance를 사용하기 때문에 명목형 변수를 가지고 Clustering을 하려면 전혀 다른 로직이 필요할 것 같은데, 위의 책 구입 추천 리스트의 예에서 보면 가능하다는 이야기네요. 어떤 로직이 사용되는지 궁금합니다.

Examples, examples, examples! -- AlbertEinstein With the risk of wrong answer, I might say you could do Clustering with nominal level of measurement if the variables are given as vectors among many other possibilities, using rule-based hierarchies for example. --AnonymousDonor

A2: 군집분석은 특성들의 유사성, 즉 특성 변인이 얼마나 비슷한 값을 갖는지를 "거리"로 환산하여 거리가 가까운 대상들을 동일한 집단으로 편입시킴으로써 분류합니다; 즉 군집분석에서의 유사성 척도는 대상들간의 상대적 거리의 개념으로 나타냅니다. 군집분석에서 사용되는 유사성 척도는 크게 (1) distance-type measure와 (2) matching-type measure의 두 가지로 나뉘는데, (1)번이 지칭하는 것이 바로 위의 EuclideanDistance이고 이것은 변인들의 값이 서열(ordinal) 혹은 등간(interval) 수준에서 측정된 경우에 쓰입니다. (참고로 각 변인들 값의 측정단위가 다른 경우에는 측정된 유사성을 z-score같은 표준화점수로 변환한 후 일반식을 적용하여 거리를 구하죠.) 질문하신 것처럼 변인이 명목(nominal)척도로 측정된 경우에 사용되는 방식을 (2)번이라고 하는데, 이 경우에는 비교대상물이 특정 속성을 가지고 있는지("1") 아닌지("0")의 두 가지 값을 갖는 경우가 가능하니까 그에 따라 명목변인의 값을 "1"과 "0"으로 변환시켜 측정합니다. 이 경우 즉 명목척도로 측정된 대상 간의 유사성을 비교하는 방법은 전체 속성 가운데에 어느 두 대상들이 "공통으로 가지고 있는 속성(1,1)"이나 "공통으로 없는 속성(0,0)"의 수가 얼마나 되는가를 세어서 유사성의 지수를 구하는 것입니다.




"; if (isset($options[timer])) print $menu.$banner."
".$options[timer]->Write()."
"; else print $menu.$banner."
".$timer; ?> # # ?>