본문 바로가기

컴퓨터/수학이랑

(25)
주성분 분석으로 알아 보는 도시 통계 이 글은 주성분 분석의 예제를 위한 글이다. 주성분 분석이 무엇인지 설명하기 위해 도시에 관한 통계를 이용하여 도시의 특성을 살펴 본 글이다. 주성분 분석의 수학적 원리 및 그것을 C++로 구현한 것은 전의 글을 참고한다. 주성분 분석은 분석하는 대상의 차이점을 가장 잘 드러내 주는 변수 조합을 찾는 방법이다. 예를 들면, 한국의 각 도시 간의 차이를 가장 잘 나타내 주는 통계는 무엇일까? 인구, 교원 1인당 학생 수, 도시 면적, 사망자 수, 상수도 보급률 등등의 통계 중에서 도시 간의 차이를 가장 잘 나타내어 줄 수 있는 변수의 조합을 찾을 수 있고, 혹은 각 변수가 도시 간의 차이에 대해 어느 정도의 기여를 하는지 등을 찾는 방법이 주성분 분석이다. 우선 이 글은 통계청 누리집에서 받은 한국의 도시..
주성분 분석(PCA, Principal Component Analysis)의 개념 및 구현 주성분 분석(Principal Component Analysis, PCA) 은 데이터 집합 내에 존재하는 각 데이터의 차이를 가장 잘 나타내 주는 요소를 찾아 내는 방법이다. 그 구체적인 의미 및 원리, 그리고 이를 C++로 구현해 본다. 주성분 분석에 대한 개념을 위하여 그 의미를 알 수 있는 간단한 몇 가지 예제에 이어 수학적인 원리를 간략히 살펴 본 후, 그것에 대한 C++을 이용한 구현을 다룬다. 실제 C++ 코드는 후반부에 있으므로 그 부분만 필요할 경우 바로 건너 뛰어도 된다. 하지만 될 수 있으면 이 글 전체를 반복해서 읽기를 제안한다. 또한, 독자가 대학 1, 2학년 정도의 기본적인 선형 대수 내용은 알고 있다고 가정한다. '주성분'에 대한 개념에 대한 감을 잡기 위하여 다음과 같은 상황을..
상관계수2 상관계수는 두 변수가 관계(association)을 갖고 있는지를 알 수 있는 하나의 수치이다. 일반적으로 피어슨 상관 계수(Pearson's correlation coefficient 또는 product-moment correlation coefficient)라고 하는 상관계수를 많이 사용하는데, non-parameteric correlation coefficient 인 Spearman Rank-order 상관 계수나 Kendall's Tau 역시 두 변수의 관계를 나타내는 수로 사용될 수 있다. 이 글에선 일단 Pearson's correlation coefficient (PCC) 에 관해 살펴 보고, 구해진 PCC에 대한 통계적 유의성(p-value)를 계산하는 원리를 살펴 보자. (실제로 구현하는..
Fisher's linear discriminant 구현 지난 번에 알아 본 Fisher's Linear Discriminant 의 원리를 이제 C++로 구현해 보자. 또한 지난 번 글에서 matlab 으로 테스트 해 보았던 m 코드의 일부를 약간 설명한다. Matlab 에서의 matrix 를 다루는 방식이 FLD 원리 편에서 본 matrix 와 조금은 다르기 때문에 약간의 설명이 필요하다. 또한 matrix inverse 를 구하는 것을 직접 구현하기에는 무리가 따르므로 다른 사람이 구현해 놓은 것을 사용한다. 우리가 직접적으로 계산해야 하는 것은 다음의 수식이다. w는 벡터이고, 우리는 이 벡터의 '방향'만이 필요하므로 위에서 r 은 1로 둔다. Sw 와 m1, m2 는 다음과 같다. 우선 m1 과 m2 부터 구해 보자. 실제로 우리가 다룰 data 는 위..
Fisher's linear discriminant 원리 Fisher's linear discriminant (FLD) 는 데이터를 여러 변수들의 선형결합으로 표현하였을 때 서로 다른 그룹을 잘 구분할 수 있게 해 주는 coefficient 를 찾는 방법이다. 그림으로 보자면 다음과 같다. 위는 그림으로 그려서 보이기 편하라고 2개의 변수만을 사용하여 나타낸 것인데, 저렇게 두 그룹을 잘 구분할 수 있는 직선의 방정식을 찾는 방법이 Fisher's linear discriminant 를 이용한 방법이다. 위 직선의 방정식에 필요한 상수는 closed-form 으로 정확히 구해진다. 원리를 알아 보고, matlab 으로 테스트도 해보고, C++로 구현해서 써먹어 보자. (오늘은 원리와 matlab 으로의 테스트까지만. 구현은 내일 해보자) 직관적으로 생각할 수 ..
통계 분석 - 평균 비교에 대하여 통계 분석이란 한 집단에 대한 수치에 대하여, 그 수치에 대한 특정 가설을 설정한 후, 그 가설에 기반했을 때 예상되는 수치의 분포와 실제로 관측된 수치를 비교하여 가설을 채택하거나 채택하지 않는 절차를 의미한다. 수치로 표현되는 특성에 대하여, 한 집단의 특징을 대표하는 수치 중 가장 널리 사용되는 것은 '평균'으로, 평균은 수학적으로 적절한 많은 특징을 갖고 있다. 따라서 일반적으로 두 집단이 동일한 것인지 아닌지를 비교할 때 주로 평균이 얼마나 비슷한 것인가를 검사하게 된다. 또한 생물학 실험을 예로 들자면, 특정한 처리 A를 한 것이 효과가 없다는 것은 처리를 한 집단과 하지 않은 집단이 '평균'으로 대표되는 수치가 다르다고 할 수 없다면 A는 효과가 없다는 결론을 낸다는 의미이다. 이 때, 흔히..
엑셀에서 z-score로 p-value 계산하기 데이터를 정규화한 값인 z-score 를 이용하여 p-value를 계산해 보자. 이 때, erf 함수를 사용하게 되는데 ms-excel 에서 erf 함수를 제공해 준다, 따라서 이 값을 엑셀에서 계산해 보자. 많은 경우 모분포의 정규분포를 가정하게 된다. 그런데 모분포가 정규분포가 아닐지라도 그러한 모분포에서 추출한 평균의 분포는 중심극한정리에 따라서 정규분포를 따르게 된다. z-score는 그러한 정규분포에 사용될 수 있게끔 변수를 변환한 것으로 생각할 수 있는데, 다음과 같이 계산한다. 즉, 데이터의 값에서 평균을 뺀 이후, 그것을 표준편차로 나누어 준다. 만약 X 가 이항분포 b(n, p) 를 따른다면, z는 다음과 같이 계산할 수 있다. 이 때 저렇게 계산한 z 역시 표준정규분포 N(0,1) 을 ..
알고리즘 관련 글의 병목 현상에 대하여 이 곳에 작성하는 알고리즘 관련 글들은 다소 더딘 업데이트 속도를 보인다. 새로운 글의 작성이 드문 것과, 이론적 배경의 설명 이후 실제 코드에 관련한 글이 매우 늦게 올라오는 등. 일단 그 어느 글이든 내가 실제 코드로 작성을 한 이후 그것을 사용하고 있을 때만 관련 글을 작성한다. 그럼에도 불구하고 그것에 관련한 글이 늦게 올라오는 이유는 다음과 같다. 첫 번째로는 연구를 하면서 틈틈이 작성하는 글들이기 때문에, 연구를 하느라 바쁘면 굳이 이 곳에 글을 올리기 위하여 시간을 내지는 않는다. 주로 매우 오래 걸리는 작업을 실행시킨 후 시간이 남을 때 내용 정리를 하는데, 요즘(2010년 8월 말경)에는 그런 것이 별로 없기 때문에 데이터 정리하고, 새로운 방법 생각하고 논문 찾아 읽는 등의 연구를 하고..