데이터 마이닝 테크닉 - 클러스터링 알고리즘 탐구
클러스터링 알고리즘 탐구

클러스터링 기법은 크게 분할(partitioning) 접근과 계층적(hierarchical) 접근으로 나눌 수 있습니다. 분할 접근은 범주 함수를 최적화시키는 K개의 분할 영역을 결정해 나가는 방법으로 유클리드 거리(euclidean distance) 측정법에 기반합니다. 숫자 속성(numeric attribute) 데이터를 군집화하는데 쓰이는 가장 오래되고 잘 알려진 파티션 알고리즘 중에 K-평균(K-means) 알고리즘이라는 것이 있습니다. 이 알고리즘을 사용하려면 몇 개의 그룹으로 나누기 원하는지 K를 입력해야 합니다. 그러면 알고리즘은 일단 K개의 평균점을 지정하고 모든 데이터를 하나씩 보면서 가장 가까운 평균점에 해당되는 그룹에 할당합니다. 그 후에 다시 평균점들을 조금씩 바꾸어 나가면서 데이터를 가까운 그룹에 재할당합니다. 이 과정은 군집 상태를 나타내는 척도 함수가 더 이상 변하지 않을 때까지 반복되며 더 이상 변하지 않게 되면 그 상태의 그룹들을 군집화의 결과로 정합니다.
계층적 접근은 처음에 각각의 데이터 점을 하나의 클러스터로 설정한 후 이들 쌍 간의 거리를 기반으로 하여 분할, 합병해 나가는 상향식(bottom-up) 방식으로 모든 점들이 하나의 대형 클러스터에 속하게 될 때까지 그 히스토리 정보를 유지해 나가게 됩니다. 이것은 agglomerative hierarchical clustering이라 하며 ‘가까운’ 객체끼리 군집화시키는 방법입니다. 이 알고리즘에서는 우선 모든 n개의 데이터가 n개의 서로 다른 그룹이라 가정한 후에 그룹간의 유사성(similarity)을 보고 가장 유사한 두 개의 그룹을 합병해(merge) 그룹 수를 줄여가는 과정을 전제 그룹 수가 K개가 될 때까지 반복함으로써 K개의 그룹을 찾아냅니다. 또한 군집의 병합 또는 분리되는 과정은 이차원 도면의 Dendrogram을 사용하여 간략히 표현되며 군집화 과정에서 어떤 개체가 일단 다른 군집에 속하면 다시는 다른 군집에 속하지 못합니다.

클러스터링 알고리즘에서 사용하는 기본적인 용어와 전제 조건, 그리고 표기 방법에 대해서 정리해 보겠습니다. 일반적으로 p개의 변수를 서로 다른 두 개체 Xi와 Xj를 각각 다음과 같이 표현할 경우 다음과 같습니다.

Xi = (Xi1, Xi2, …, Xip)
Xj = (Xj 1, Xj 2, …, Xj p)

두 개체 사이의 거리 dij는 dij = d(Xi, Xj )으로 표현하며 다음의 조건을 만족합니다.

dij ≥ 0, dij = 0
dij = dji
dik + djk ≥ dij

예를 들어 데이터가 <표 3>과 같고 클러스터의 수 K=2를 발견하기 위해서 클러스터링 기법을 적용해 보겠습니다. 이때 유사성을 나타내는 함수는 두 점간의 Euclidean 거리로 사용하면 ID 1과 ID 2의 거리는 다음과 같이 계산되며 각 점들의 거리는 <표 4>와 같습니다.


<표 3> 수입과 명품 선호도 데이터

<표 4> 각 개체 사이의 거리

이때 ID 4와 ID 5가 가장 거리가 가깝기 때문에 <그림 3>과 같이 먼저 그룹화됩니다.
생성된 군집과 각 개체간의 거리를 구하기 위해서 첫 번째 군집에 속한 임의의 두 개체와 아직 군집에 속하지 않은 각 개체 사이의 거리 중 최단거리로 군집과 개체간의 유사성을 결정하는 최단 연결법을 적용하여 거리를 구하면 다음과 같습니다.


<그림 3> 첫 번째 군집 생성

d {(C1, C2)} = min { d (x, y)|x ∈ C1, y ∈ C2 }
d {(1), (4, 5)} = min { d14, d15 } = d14 = 61.0
d {(2), (4, 5)} = min { d24, d25 } = d24 = 42.4
d {(3), (4, 5)} = min { d34, d35 } = d34 = 18.6

즉, <표 5>에서 그룹화된 (4, 5)는 ID 3과 거리가 가장 가깝기 때문에 <그림 4>와 같이 (3, 4, 5)로 그룹화됩니다.
생성된 군집과 각 개체간의 거리를 다시 최단 연결법을 적용하여 거리를 구하면 다음과 같습니다.


<표 5> 첫 번째 군집과 개체 사이의 거리

<그림 4> 두 번째 군집 생성

d {(1), (3, 4, 5)} = min { d13, d14, d15 } = d14 = 61.0
d {(2), (3, 4, 5)} = min { d23, d24, d25 } = d24 = 42.4

즉, <표 6>에서 보면 ID 1과 ID 3이 거리가 가장 가깝기 때문에 <그림 5>와 같이 그룹화되며 이런 방식으로 남아 있는 그룹의 개수가 K일 때까지 반복합니다. 여기서는 초기 설정한 군집의 수 K=2를 만족하므로 클러스터링 분석을 마칩니다. 이것은 <그림 6>과 같이 Dendrogram으로 표현됩니다.


<표 6> 두 번째 군집과 개체 사이의 거리

<그림 5> 세 번째 군집 생성

<그림 6> 군집 생성 Dendrogram

이 알고리즘의 장점 중 하나는 군집화를 마칠 때까지의 과정이 트리 구조를 가지고 있어 drill down하거나 drill up하면서 어느 단계에서 군집화를 멈추는 것이 가장 잘 된 군집화인지를 사용자가 모두 확인해 보고 가장 좋다고 생각되는 것을 선택할 수 있다는 것입니다. 일반적으로 다차원 데이터를 군집화하기 위해 유사성을 계산할 때 여러 가지 함수를 쓸 수 있습니다. Euclidean 거리, Mahalanobis 거리, Manhattan 거리, Minkowski 거리 등 여러 가지가 있는데 그 중에 어떤 것을 사용해 군집화를 하느냐에 따라 다른 특성을 갖는 군집화가 이뤄집니다.
지금까지는 주로 숫자 속성을 가진 데이터의 군집화 알고리즘을 설명했는데 범주형 속성의 경우 거리라는 개념의 적용이 쉽지 않습니다. 즉 범주형 속성의 경우 X ≠ Y는 알 수 있으나 X > Y 혹은 X < Y는 알 수 없습니다. 그래서 일반적으로 범주형 변수로 측정되는 두 개체 사이의 거리는 두 개체가 서로 다른 범주에 속한 횟수를 이용합니다. 예를 들면 <표 7>과 같이 성별(sex), 직업(job), 거주지역(address) 같은 범주형 데이터가 있다고 가정합니다. 이 경우 ID 1과 ID 2 사이의 거리는 2(불일치수=2), ID 1과 ID 3 사이의 거리는 1(불일치수=1), ID 2과 ID 3 사이의 거리는 3(불일치수=3)이 됩니다. 그러나 속성이 연속형과 범주형이 혼합되어 있을 때는 이와 같은 방법은 더 이상 유용하지 않습니다. 따라서 일반적인 클러스터링 알고리즘에서는 최소한 순서형 범주를 갖는 이산형 변수까지를 분석대상으로 포함하는 경우가 많습니다. 클러스터링 알고리즘은 이렇게 다양한 다차원 데이터의 분포 상태나 패턴 등을 효율적으로 찾아내기 위한 방안과 데이터베이스 지향적인 제약 사항들(제한된 메모리 양, I/O 시간 최소화 등)을 해결하기 위해서 계속 연구되고 있습니다.


<표 7> 범주형 변수 데이터

계층적 클러스터링의 군집간 거리 계산법
◆ 최단 연결법(Single Linkage Method)
군집 U와 군집 V 사이의 거리 dUV를 각 군집에 속하는 임의의 두 개체들 사이의 거리 중 최단거리로 정의하여 가장 유사성이 큰 군집을 묶어 나가는 방법

◆ 최장 연결법(Complete Linkage Method)
군집 U와 군집 V 사이의 거리 dUV를 각 군집에 속하는 임의의 두 개체들 사이의 거리 중 최장거리로 정의하여 가장 유사성이 큰 군집을 묶어 나가는 방법

◆ 평균 연결법(Average Linkage Method)
군집 U와 군집 V 사이의 거리 dUV를 각 군집에 속하는 모든 개체들의 평균거리로 정의하여 가장 유사성이 큰 군집을 묶어 나가는 방법

◆ 중심 연결법(Centroid Linkage Method)
군집 U의 중심점과 군집 V의 중심점 사이의 거리를 두 군집 사이의 거리로 정의하여 가장 유사성이 큰 군집을 묶어 나가는 방법

◆ 중위수 연결법(Median Linkage Method)
군집 U와 군집 V 사이의 거리 dUV를 각 군집에 속하는 임의의 두 개체들 평균을 합하여 2로 나눈 값(군집의 크기를 고려하지 않은 단순평균)을 근간으로 정의하여 가장 유사성이 큰 군집을 묶어 나가는 방법

◆ Ward의 방법
군집 U와 군집 V를 묶을 때 생기는 새로운 군집 i에 속해 있는 객체들의 오차 제곱합을 ESSi라고 하고 전체 군집의 오차 제곱합을 ESS = ∑ESSi 라고 할 때 새로운 군집으로 인하여 파생되는 ESS의 증가량을 두 군집 사이의 거리로 정의하여 가장 유사성이 큰 군집을 묶어 나가는 방법


<그림 7> 군집간 거리 계산 도해

by 쿠리다쿠리 2010. 4. 19. 02:53
1. 유사도 정의
군집 분석에서 상사성이 높은 개체(유전자 혹은 환자)들은 같은 군집(발현 양상이 비슷한 유전자들 혹은 같은 종류의 암 환자)에 포함시키고, 상대적 상사성이 낮은 개체(발현 양상이 다르거나 다른 종류의 암 환자)들은 서로 다른 군집에 포함시킬 수 있도록 해주는 상사성이나 비상사성을 측정하는 유사도 정의가 필요 한다. 이러한 유사도 정의에 주로 사용되는 것은 거리인데 대표적으로 사용되는 거리 척도에는 Euclidean 거리이다.

Euclidean distance

한편 Euclidean 거리는 사용된 척도에 따라서 거리 순위에 상당한 영향을 미치게 된다. 이러한 문제를 극복하기 위하여 일반적으로 각 변수를 표준 편차로 나눈 표준화 변수를 사용하게 된다. 그러나 변수들 사이의 상관관계가 존재 할 때 거리는 척도의 불변성과 상관관계를 고려한 통계적 거리로 측정되어야 한다. 이러한 통계적 거리를 Mahalanobis 거리라고 한다.
한편 Euclidean 거리 이외에 개체들 간의 유사도 평가 기준으로는 pearson correlation coefficient, spearman correlation coefficient나 mutual information이 사용되기도 한다. 유사도에 대한 정의를 어떻게 했느냐가 군집의 질에 영향을 미치게 된다.

2. 계보적 군집 방법
계보적 군집 방법에는 상사성이 밀접한 개체(유전자나 암 환자)들을 단계적으로 발현 양상이 비슷한 유전자들이나 같은 종류의 암 환자들로 이루어진 군집을 형성해 나가는 병합적 방법 (agglomerative method)이 많이 사용 된다. 병합적 방법에서는 각 개체가 별개 군집을 형성하기 때문에 n개 군집에서 출발한다. 연속되는 각 단계 마다 가까운 두 개 군집들을 병합하면, 각 단계 마다 군집의 수가 하나씩 줄어든다. 따라서 마지막 단계에서는 모든 개체들이 하나의 군집을 형성하게 된다. 이러한 계보적 방법에 의한 군집 형성 결과는 이차원상의 도면에 나타낸 dendrogram 형식으로 표시될 수 있다 (그림 1).

병합적 방법으로는 두 군집 사이의 거리에 대한 정의 방법에 따라 군집 연결 방법이 달라지는데 최단 연결법, 최장 연결법, 평균 연결법, 중심 연결법 등이 있다. 최단 연결법은 우선 (NxN) 거리 행렬 D에서 우선 거리가 가장 가까운 개체가 U, V라면 두 개체를 묶어서 군집 (U V)를 형성한다. 다음 단계는 군집 (U V)와 나머지 (N-2)개의 다른 개체 중 임의의 개체 W와의 최소 거리를 다음과 같이 계산한 후
()min{,}UVWuwvwdd d =
거리 행렬에서 거리가 가장 가까운 개체와 다시 군집을 형성한다. 이러한 과정을 반복 하면 모든 개체를 포함하는 하나의 군집을 형성하게 된다.
최장 연결법은 우선 (NxN) 거리 행렬 D에서 우선 거리가 가장 가까운 개체가 U, V라면 두 개체를 묶어서 군집 (U V)를 형성한다. 다음 단계는 군집 (U V)와 나머지 (N-2)개의 다른 개체 중 임의의 개체 W와의 최대 거리를 다음과 같이 계산한 후
()max{,}UVWuwvwdd d =
거리 행렬에서 거리가 가장 가까운 개체와 다시 군집을 형성한다. 이러한 과정을 반복 하면 모든 개체를 포함하는 하나의 군집을 형성하게 된다.
평균 연결법은 우선 (NxN) 거리 행렬 D에서 우선 거리가 가장 가까운 개체가 U, V라면 두 개체를 묶어서 군집 (U V)를 형성한다. 다음 단계는 군집 (U V)와 나머지 (N-2)개의 다른 개체 중 임의의 개체 W와의 평균 거리를 다음과 같이 계산한 후 ()()ijijUVWuvwddnn=ΣΣ
거리 행렬에서 거리가 가장 가까운 개체와 다시 군집을 형성한다. 이러한 과정을 반복 하면 모든 개체를 포함하는 하나의 군집을 형성하게 된다.
중심 연결법은 두 군집 사이의 거리는 두 군집의 중심간의 거리로 계산 된다. 만약 군집 C1에 속하는 개체의 수가 N1 일 때 군집 C1의 중심은 11iiicXXn∈=Σ
이 된다. 군집 C2에 속하는 N2개체의 중심을 2X라고 하면 두 군집 사이의 거리는 122()()1212(,)CCdPXXX==−X
이 된다. 여기서 P는 근접 척도로 Euclidean 거리의 자승이 사용된다. 만약 두 군집이 결합되면 새로운 군집의 중심은 가중 평균을 이용하여 구하고 각 군집 사이의 거리를 구한후 중심 거리가 가장 가까운 개체와 다시 새로운 군집을 형성한다. 이러한 과정을 반복하면 모든 개체를 포함하는 하나의 군집을 형성하게 된다.
평균을 이용하여 구하고 각 군집 사이의 거리를 구한후 중심 거리가 가장 가까운 개체와 다시 새로운 군집을 형성한다. 이러한 과정을 반복하면 모든 개체를 포함하는 하나의 군집을 형성하게 된다.
3. 분리 군집 방법
계보적 군집 방법에서는 일단 어떤 개체가 특정한 군집에 할당되면 다른 군집에 다시 할당 될 수 없는 단점을 가지고 있다. 반면에 분리 군집 방법은 어떤 개체가 초기 할당에서 잘못 되었다 하더라도 다시 할당할 수 있는 방법이다. 이 분리 군집 방법은 미리 설정된 기준의 최적화에 근거해서 자료를 분리하게 된다. 또한 이 방법을 사용할 때에는 최종 군집의 수가 알려져 있고 또한 미리 설정될 수 있다고 가정한다.
분리군집 방법으로 가장 대표적인 k-평균 군집 방법은 다음과 같다. n개 개체(유전자나 암 환자)가 p차원 다변량 개체라고 했을 때 각 개체는 초기에 설정된 k개의 발현 양상이 비슷한 유전자들이나 같은 종류의 암 환자들로 이루어진 군집중 어느 한 군집에 할당된다고 가정하자. 이때 i번째 개체의 j번째 변수를 X(i,j)로 표시하고, c번째 군집에 속한 nc개 개체들의 j번째 변수에 대한 평균을 X(c,j)로 표시했을 때 i번째 개체와 c번째 군집 사이의 Euclidean 거리는 다음과 같이 표시 할 수 있다. 0.521(,)(,)(,)pjDicXijXcj==−Σ
또한 각 개체를 c번째 군집에 재 할당할 때 오차 자승 합 E는
[]21(,())niEDici==Σ
이 된다. 위 식에서 c(i)는 군집 c는 i번째 개체를 포함하고 있다는 것이고, D(i,c(i))는 i번째 개체와 그 개체를 포함하고 있는 군집 사이의 Euclidean 거리를 표시한다. 따라서 분리 군집 방법은 각 개체를 어느 한 군집으로부터 다른 군집으로 움직일 때 오차 자승 합을 계산하여 비교하면서 더 이상 움직일 개체가 없을 때인 오차 자승 합이 최소화 하는 곳까지 반복한다.
4. 최근 제안 되는 군집화 방법
최근 들어 많은 전산학자와 통계 학자, 생물학자들이 개인 별로 또는 팀을 형성하여 군집화 방법을 개발하고 있으며 논문들이 발표되고 있다. 대표적인 논문들에 대해서 아래의 표에 설명 했다.
논문
발표 년도  사용 기법
실험 데이터
소프트 웨어
비고
Eisen et al
1998
계층적 군집화 분석
budding yeast cell cycle
공개
Cluster와 TreeView 프로그램
Tamayo et al
1999
SOM(self organizing map)
Budding yeast cell cycle
공개
Tavazoie et al
1999
K 평균 군집화 분석
budding yeast cell cycle
공개
Ben-Dor et al
1999
CAST
공개
Biocluster 프로그램
Sharan et al
2000
CLICK
Budding yeast cell cycle
라이센스 등록후 제공
계층적 군집화 분석과 비교 결과 제시
표 1 연구 동향
Eisen등은 통계학에서 널리 쓰이는 계층적 군집화를 DNA microarray에 적용하여 좋은 연구 업적을 남겼고, 이 연구의 산출물인 Cluster 와 TreeView라는 소프트웨어는 많은 사람에 의해 사용되고 있다. 이외에도 Hartuv는 그래프 이론을 바탕으로 군집화 방법을 제안하였고. Ben-Dor와 Shamir등도 역시 그래프를 응용하여 CAST라는 방법을 제안하고 프로그램으로 구현하였다. Tamayo등은 SOM(self –organizing maps)라는 방법을 적용하였으며 이외의 다수가 현재 군집화 방법의 개발 또는 평가 논문을 제시하고 있다.
5. 군집 분석시 유의 사항
군집을 형성하는 방법에는 여러 방법이 있지만 최적 방법에 대한 기준은 명확하지 않다. 따라서 군집 분석을 할 때 유의해야 할 사항을 정리하면 다음과 같다.
하나. 만약 집단들 사이에 상당한 차이가 없다면 현실적으로 군집 분석에서 매우 명확한 결과를 기대할 수 없을 것이다. 특히 만약 개체들이 비선형 형태로 분포되어 있다면 명확한 군집들을 찾아내는 것은 어려울 것이다.
둘. 군집 분석은 이상치에 대하여 상당히 민감한 결과를 보인다. 따라서 군집 분석을 시행하기 전에 자료에 대하여 이상치 존재 여부를 살펴야 한다고 판단된다.
셋, 군집 분석에 사용될 변수들의 측정 척도가 서로 다른 경우에는 분석 전에 표준화하여야 한다.
넷, 군집의 타당성을 검토하기 위하여 두 가지 방법이 사용된다. 첫 번째 방법은 자료에 대하여 여러 가지 군집 방법을 적용한 후 그 결과들이 유사한가를 검토하는 방법이다. 두 번째 방법은 자료를 랜덤 하게 이등분하고 각각에 대하여 여러 가지 군집 방법을 실시한 후 두 개의 결과가 유사한지 여부를 검토하여 일치도가 높은 군집 방법을 선택하는 방법이다.
3. 요약 및 연구 전망
DNA microarray 실험의 일반화와 유전자를 이용한 연구의 발전으로 인하여 데이터들은 급속히 증가되고 있다. 이러한 방대한 양의 정보들을 바탕으로 의미 있는 정보를 획득하는
데 있어서는 군집화 분석이 중요한 위치를 차지하고 있다. 그래프 이론에서의 접근, 신경망을 이용한 학습 기법에서의 접근, 확률 통계학적인 접근 방식으로 여러 군집화 분석이 연구되어 왔다. 특히 계층적 군집화와 분리 군집화 분석의 경우는 단순하면서도 어느 정도 의미 있는 결과를 도출하는 알고리즘으로써 많이 활용되고 있으며 CLICK과 CLIFF는 군집화의 정확성을 더욱 높이는 결과를 가져왔다.
이 분야에 있어서 연구는 지속적인 발전이 있으리라고 본다. 생물학이라는 특수 영역에 의존된 데이터라는 특색과 유전 자수에 비해 실험 횟수는 매우 적은 특수한 환경 제약이 있기 때문에 이를 극복하기 위한 여러 가지 heuristic한 방법들이 계속해서 연구되리라고 전망된다.
by 쿠리다쿠리 2010. 4. 19. 02:50
마할라노비스 거리는 군집분석에서 가장 많이 사용되는 거리개념으로서, 두 지점의 단순한 거리뿐만이 아니라, 변수의 특성을 나타내는 표준편차와 상관계수가 함께 고려된다는 특징을 가지고 있다.

마할라노비스 거리란 각각의 케이스가 여러가지 변인(variables) 중심값 (평균값, mean) 들로 이루어진 중심 (centroid) 에 대해서 갖는 거리를 말한다. 개념적으로 살펴보면, 여러변인을 동시에 이용하여 살펴보는 테스트 (multivariate) 경우에 각각의 중심값을 중앙에 교차시켜 케이스 값들을 나열해보면 일종의 군집을 이루게 되는데, Mahalanobis distance는 특정 케이스의 값이 여기서 심하게 벗어났는가를 보기 위한 거리값이다.

이렇게 얻은 각 case의 값을 데이터로 $\chi^2$ distribution 을 이용하여 극한 값을 가려낼 수 있는데, 데이터의 극한 값을 찾는데 쓰이기도 한다. 그 판단의 기준은 $\chi^2$ 값의 p 가치가 .001보다 작을 때 (즉, standard deviation 거리의 약 3-4배가 넘을 때) 이다.

군집분석을 실시하는 경우 대부분 군집분석을 실시하기 전 모들 변수들을 평균 0, 분산 1의 변환된 변수로 표준화 시킨다.


아래 그림과 같은 점 A,B,C 가 있다고 하자.

사용자 삽입 이미지

공분산 행렬(Covariance Matrix)은 아래와 같다라고 하자.

LaTeX equation

A, B, C 각각의 위치는 다음과 같다.
A(0.5, 0.5)
B(0, 1)
C(1.5, 1.5)


마할라노비스 거리 구하는 공식은 아래와 같다.

LaTeX equation

LaTeX equation은 공분산 행렬의 역행렬이고, LaTeX equation는 변환행렬이다.



먼저, 공분산 행렬의 역행렬을 구하자. 2차 정방행렬의 역행렬 구하는 공식은 다음과 같다.

LaTeX equation 일 때, A의 역행렬 LaTeX equation 이다.

위식에 의해 공분산 행렬의 역행렬을 구하면

LaTeX equation 이다.

마할라노비스 거리 공식에 의해 A,B의 거리와 A,C의 거리를 구해보자.

LaTeX equation

LaTeX equation


유클리안 거리와 비교해서 결과가 반대로 나왔음을 알 수 있다. 즉, 상관에 따른 거리가 변할 수 있음을 나타낸다
by 쿠리다쿠리 2010. 4. 19. 02:33
출처 : 한양대학교 경영대학 Intelligent Business Information System 연구실 홈페이지
http://ibis.tistory.com/

데이터마이닝에서 주로 사용하는 기법 중에 기계학습(Machine Learning)이 있습니다. 기계학습은 과거의 데이터를 활용한 학습(Learning) 과정을 거쳐서, 미래의 사례에 대하여 분류, 추청, 예측 등을 하는 방법을 의미합니다. 이러한 기계학습에서 종종 발생하는 문제 중에 하나가 과적합(Overfitting) 입니다. 이 글에서는 이 과적합에 대해서 몇 자 적어봅니다.

기계학습에서 학습 시에 사용하는 데이터 집합을 훈련 데이터 집합(Training Data Set)이라고 합니다. 기계학습 알고리즘에서는 이 훈련 데이터 집합이 세상의 전부인 꼴입니다. 기계학습 알고리즘은 자신에서 주어진 훈련 데이터 집합에 담겨진 패턴이나 관계를 찾아내기 위해서 최대한 노력을 합니다. 그래서, 이 데이터 집합에 담겨진 패턴을 찾아냅니다. 그러면, 이러한 패턴들을 추후에 발생하는 데이터 집합에 적용했을 때도 잘 맞을까요?

답은 잘 맞을 수도, 그렇지 않을 수도 있다는 것입니다. 그 이유는 과연 훈련 데이터 집합이 우리가 관심있는 전체 모집단을 대표할 수 있느냐와 밀접한 관계가 있습니다.
훈련 데이터 집합에는 전체 모집단이 가지고 있는 패턴들을 가지고 있을 수 있습니다. 또, 일부 누락할 수도 있겠지요. 하지만 다른 문제는 전체 모집단은 가지고 있지 않고, 훈련 데이터 집합만 가지고 있는 특징까지도 기계학습 알고리즘이 학습을 한다는 것 입니다. 즉, 너무 열심히 학습을 해서, 불필요한 것까지 배워버린 것이지요. 이러한 현상을 과적합(Overfitting)이라고 부릅니다.

자, 관련된 비유를 하나 들어보지요.
비유의 제목은 "갈라파고스 제도의 가마우지" 입니다.
참고로 갈라파고스 제도는 에콰도르 서쪽 1000 Km 지점에 위치한 "생태계의 보고"라고 합니다.

 
갈라파고스 제도에 사는 가마우지는 "다윈의 진화론"에 영감을 주었다고 전해집니다.

가마우지는 아래 그림과 같이 생겼는데, 물고기 사냥의 명수라고 합니다. 실제로 중국 계림 리강에서는 가마우지를 이용한 낚시를 하기도 한다고 합니다.
가마우지의 사냥법은 '그림자 사냥'이라고 부릅니다. 즉, 수면에 가만히 떠서 날개를 활짝 펼치는 동작으로 사냥을 시작합니다. 그러면 물 속에 그림자가 생기고, 물고기들은 그늘진 곳을 좋아하는 성질을 가지고 있어서, 그 그림자 속에 몰려듭니다. 가마우지는 바로 그 순간을 노려 잠수해서 물고기를 잡습니다.
그럼 갈라파고스 제도의 가마우지가 어떻게 다윈의 진화론에 영감을 주었고, 과적합
(Overfitting)과 무슨 상관이 있을까요?

1882년 당시 24세의 젊은 다윈은 영국 해군성이 세계 탐험을 위해 파견한 탐험대의 일원으로 남아메리카 대륙의 내륙과 해안 일대를 누비게 됩니다. 찰스 다윈이 "모든 종은 변하지 않으며, 개개의 종은 하나 하나 신이 창조한 것"이라는 창조론에 의문을 품게 한 것이 이 갈라파고스 제도의 가마우지라고 합니다.

아마존강 하구에서 강줄기를 따라 멋진 비행 솜씨를 자랑하던 가마우지들을 관찰하던 다윈에게 내륙으로부터 불과 600마일 떨어진 갈라파고스에 날개가 작아지고 깃털이 자라지 않아 나는 능력을 아주 잃어버린 가마우지의 변종의 만난 것은 일종의 충격이었던 것이지요. 이러한 통찰력을 바탕으로 25년간에 걸친 대륙의 가마우지와 갈라파고지 제도의 가마우지 사이에 생긴 변화의 과정을 역추적한 끝에 진화론을 담은 "종의 기원"을 발표하여 세계를 충격에 빠뜨리게 되지요.


<갈라파고스 밀물 가마우지>

그러면 갈라파고스 군도의 가마우지는 왜 날 수 없게 되었을까요? 갈라파고스 군도는 사시 사철 먹이가 풍부하고, 적이 없는 풍요한 환경으로 날아다닐 필요가 없었던 것이지요. 이러한 환경에 빠르게 적응한 갈라파고스 군도의 가마우지는 어떻게 되었을까요? 찰스 다윈의 비글호가 갈라파고스 군도에 도착한 이래 인간의 출입이 잦아지면서 야생 쥐, 고양이 등의 출현으로 파국에 직면했다고 합니다.

주어진 환경에 너무 잘 적응하며, 조금만 환경 변화도 감담할 수 없는 현상을 과적합(Overfitting)이라고 부르면 될 것 같습니다.
우리도 지금 환경에 너무 잘 적응해서, 조금만 환경 변화도 감당할 수 없게 되어버린 과적합(Overfitting)의 우를 범하고 있지는 않는지 항상 성찰해보는 것이 필요할 것 같습니다.
by 쿠리다쿠리 2010. 4. 19. 01:41

-] a. 응집하는, 집괴성(集塊性)의.
by 쿠리다쿠리 2010. 4. 19. 01:22

U ① 분산; 산란(散亂), 이산.
② 〖물리·화학〗 분산; 〖광학〗 분산, 분광; 〖전자공학〗 산란, 산포[분산]도; 〖통계학〗 (평균값 따위와의) 편차; 〖군사〗 (폭탄 등의) 탄착 산포 패턴; 〖항공〗 디스퍼전(미사일 등의 예정로(路)에서의 편차); 〖의학〗 (염증 따위의) 소산(消散).
③ (the C-) 유대인의 이산(Diaspora).
by 쿠리다쿠리 2010. 4. 19. 01:12
① (수수께끼를 푸는) 실마리, (십자말풀이의) 열쇠, (조사·연구의) 단서.
② 이야기의 줄거리, 사색의 실마리.
③ (미궁에의) 길잡이.
④ (미국속어) 정보, 개인적인 의견. [cf.] clew.
♣get a ∼ (1) 실마리를 얻다; (미국구어) 실정을 잘 보다, 깨닫다, 꾀발라지다. (2) (미국속어) 이해되다, 알다.
♣not have a ∼ (구어) 어림이 안 잡히다, (구어) 무지[무능]하다.
 
†clue [kluː] vt. 
암시로 보여주다, (구어) ┅에게 단서를 주다, (미국속어) 털어놓다; =CLEW.
♣∼ a person in [up] (속어) 아무에게 단서를 주다, 알리다, 설명하다.
㉺∼less [-lis] ―a. 단서 없는; (구어) 어리석은, 무지한.
by 쿠리다쿠리 2010. 4. 19. 01:03

U,C (의견 따위의) 강요; 방해(한 일), (장소에의) 침입(into; to); 주제넘게 나섬, 〖법률〗 (무권리자의) 침입에 의한 토지 점유, (교회 소유지의) 점유횡령; 〖지질〗 (마그마의) 관입(貫入), 관입암(岩).
㉺∼al ―a. 
㉺∼ist ―n.
[관련어] intrude ―v.
by 쿠리다쿠리 2010. 4. 19. 01:00

직각적(直覺的)[직관적]인(능력); 직관적으로 얻은(지식·확신); 직관력이 있는(사람).
㉺∼ly ―ad.  
㉺∼ness ―n.
by 쿠리다쿠리 2010. 4. 18. 09:41

Origianl From : Wikipedia CORDIC

CORDIC은 "
for COordinate Rotation DIgital Computer"의 약자로 1959년 Jack E. Volder에 의해 처음 개발 되었고 HP의 John Stephen Walther가 일반화 하였다.
CORDIC은 hyperbolic, trigonometric function, Exponential, Logarithms, Multiplication, Division, Square Root 등 다양한 연산을 Bit-Shift, Addition의 단순한 구조로 구현 가능하도록 하는(멀티플라이어가 필요 없는) 하드웨어에 최적화 된 알고리즘 이다.
(단 반복적인 Iteration이 요구되어 Polynomial 연산법 등에 비해 속도는 저하 될 수 있다.)

원래 CORDIC은 이진수 체계를 가지는 시스템에서 적용하기 위해 개발되었으나 1970년대에는 10진(decimal) CORDIC이 포켓 계산기에서 광범위하게 사용되기 시작하였다.(대부분  BCD코드 사용)

동작방식

CORDIC can be used to calculate a number of different functions. This explanation shows how to use CORDIC in rotation mode to calculate sine and cosine of an angle, and assumes the desired angle is given in radians and represented in a fixed point format. To determine the sine or cosine for an angle β, the y or x coordinate of a point on the unit circle corresponding to the desired angle must be found. Using CORDIC, we would start with the vector v0:

 v_0 = \begin{pmatrix} 1 \\ 0 \end{pmatrix}

In the first iteration, this vector would be rotated 45° counterclockwise to get the vector v1. Successive iterations will rotate the vector in one or the other direction by size decreasing steps, until the desired angle has been achieved. Step i size is Artg(1/(2(i-1))) where i 1,2,3,….

An illustration of the CORDIC algorithm in progress.

More formally, every iteration calculates a rotation, which is performed by multiplying the vector vi − 1 with the rotation matrix Ri:

 v_{i} = R_{i}v_{i-1}\

The rotation matrix R is given by:

 R_{i} = \left( \begin{array}{rr} \cos \gamma_{i} & -\sin \gamma_{i} \\ \sin \gamma_{i} & \cos \gamma _{i}\end{array} \right)

Using the following two trigonometric identities

\begin{align} \cos \alpha & = & {1 \over \sqrt{1 + \tan^2 \alpha}} \\ \sin \alpha & = & {{\tan \alpha} \over \sqrt{1 + \tan^2 \alpha}} \end{align}

the rotation matrix becomes:

 R_{i} = {1 \over \sqrt{1 + \tan^2 \gamma_{i}}} \begin{pmatrix} 1 & -\tan \gamma_{i} \\ \tan \gamma_{i} & 1 \end{pmatrix}

The expression for the rotated vector vi = Rivi − 1 then becomes:

 v_{i} = {1 \over \sqrt{1 + \tan^2 \gamma_{i}}} \begin{pmatrix} x_{i-1} &-& y_{i-1} \tan \gamma_{i} \\ x_{i-1} \tan \gamma_{i} &+& y_{i-1} \end{pmatrix}

where xi − 1 and yi − 1 are the components of vi − 1. Restricting the angles γi so that tanγi takes on the values  \pm 2^{-i} the multiplication with the tangent can be replaced by a division by a power of two, which is efficiently done in digital computer hardware using a bit shift. The expression then becomes:

 v_{i} = K_{i}\begin{pmatrix} x_{i-1} &-& \sigma_{i} 2^{-i} y_{i-1} \\ \sigma_{i} 2^{-i} x_{i-1} &+& y_{i-1} \end{pmatrix}

where

 K_i = {1 \over \sqrt{1 + 2^{-2i}}}

and σi can have the values of −1 or 1 and is used to determine the direction of the rotation: if the angle βi is positive then σi is 1, otherwise it is −1.

We can ignore Ki in the iterative process and then apply it afterward by a scaling factor:

 K(n) = \prod_{i=0}^{n-1} K_i  = \prod_{i=0}^{n-1} 1/\sqrt{1 + 2^{-2i}}

which is calculated in advance and stored in a table, or as a single constant if the number of iterations is fixed. This correction could also be made in advance, by scaling v0 and hence saving a multiplication. Additionally it can be noted that

 K = \lim_{n \to \infty}K(n) \approx 0.6072529350088812561694 [3]

to allow further reduction of the algorithm's complexity. After a sufficient number of iterations, the vector's angle will be close to the wanted angle β. For most ordinary purposes, 40 iterations (n = 40) is sufficient to obtain the correct result to the 10th decimal place.

The only task left is to determine if the rotation should be clockwise or counterclockwise at every iteration (choosing the value of σ). This is done by keeping track of how much we rotated at every iteration and subtracting that from the wanted angle, and then checking if βn + 1 is positive and we need to rotate clockwise or if it is negative we must rotate counterclockwise in order to get closer to the wanted angle β.

 \beta_{i} = \beta_{i-1} - \sigma_i \gamma_i. \quad \gamma_i = \arctan 2^{-i},

The values of γn must also be precomputed and stored. But for small angles, arctan(γn) = γn in fixed point representation, reducing table size.

As can be seen in the illustration above, the sine of the angle β is the y coordinate of the final vector vn, while the x coordinate is the cosine value.

소프트웨어 구현 :
The following is a MATLAB/GNU Octave implementation of CORDIC that does not rely on any transcendental functions except in the precomputation of tables. If the number of iterations n is predetermined, then the second table can be replaced by a single constant. The two-by-two matrix multiplication represents a pair of simple shifts and adds. With MATLAB's standard double-precision arithmetic and "format long" printout, the results increase in accuracy for n up to about 48.

function v = cordic(beta,n)
% This function computes v = [cos(beta), sin(beta)] (beta in radians)
% using n iterations. Increasing n will increase the precision.

if beta < -pi/2 || beta > pi/2
    if beta < 0
        v = cordic(beta + pi, n);
    else
        v = cordic(beta - pi, n);
    end
    v = -v; % flip the sign for second or third quadrant
    return
end

% Initialization of tables of constants used by CORDIC
% need a table of arctangents of negative powers of two, in radians:
% angles = atan(2.^-(0:27));
angles =  [  ...
    0.78539816339745   0.46364760900081   0.24497866312686   0.12435499454676 ...
    0.06241880999596   0.03123983343027   0.01562372862048   0.00781234106010 ...
    0.00390623013197   0.00195312251648   0.00097656218956   0.00048828121119 ...
    0.00024414062015   0.00012207031189   0.00006103515617   0.00003051757812 ...
    0.00001525878906   0.00000762939453   0.00000381469727   0.00000190734863 ...
    0.00000095367432   0.00000047683716   0.00000023841858   0.00000011920929 ...
    0.00000005960464   0.00000002980232   0.00000001490116   0.00000000745058 ];
% and a table of products of reciprocal lengths of vectors [1, 2^-j]:
Kvalues = [ ...
    0.70710678118655   0.63245553203368   0.61357199107790   0.60883391251775 ...
    0.60764825625617   0.60735177014130   0.60727764409353   0.60725911229889 ...
    0.60725447933256   0.60725332108988   0.60725303152913   0.60725295913894 ...
    0.60725294104140   0.60725293651701   0.60725293538591   0.60725293510314 ...
    0.60725293503245   0.60725293501477   0.60725293501035   0.60725293500925 ...
    0.60725293500897   0.60725293500890   0.60725293500889   0.60725293500888 ];
Kn = Kvalues(min(n, length(Kvalues)));

% Initialize loop variables:
v = [1;0]; % start with 2-vector cosine and sine of zero
poweroftwo = 1;
angle = angles(1);

% Iterations
for j = 0:n-1;
    if beta < 0
        sigma = -1;
    else
        sigma = 1;
    end
    factor = sigma * poweroftwo;
    R = [1, -factor; factor, 1];
    v = R * v; % 2-by-2 matrix multiply
    beta = beta - sigma * angle; % update the remaining angle
    poweroftwo = poweroftwo / 2;
    % update the angle from table, or eventually by just dividing by two
    if j+2 > length(angles)
        angle = angle / 2;
    else
        angle = angles(j+2);
    end
end

% Adjust length of output vector to be [cos(beta), sin(beta)]:
v = v * Kn;
return
by 쿠리다쿠리 2010. 3. 24. 21:47
| 1 2 3 4 5 |