본문 바로가기

소스코드가있는글21

에지(edge) 객체 구현해 보기 노드와 노드를 잇는 선분(edge)를 표현하는 객체를 나타내기 위한 class 를 작성해 본다. edge를 STL의 set이나 map 에 넣기 위하여 operator< 를 정의하며, 또한 operator== 역시 정의해 본다. class edge 의 attribute으로는 std::string 으로 표현하는 두 개의 노드만을 갖는다. operation 으로는 생성자류, 파괴자, operator 2010. 5. 8.
정규화(normalization) 많은 양의 데이터를 처리함에 있어 여러 이유로 정규화, 즉 데이터의 범위를 일치시키거나 분포를 유사하게 만들어 주는 등의 작업은 꼭 필요한 일이다. 평균값을 이용한 정규화 중간값을 이용한 정규화 Quantile 정규화 평균값을 이용한 정규화 데이터의 평균값을 0 으로 놓는 정규화는 일반적으로 원래의 데이터의 값의 분포가 '정규분포'임을 가정할 때가 많은데, 꼭 그렇지는 않아도 이와 같은 방법을 이용할 때가 있다. 이 때의 기본적인 아이디어는 '평균'에 해당하는 값은 0 으로, 그리고 평균에서 멀어질수록 값을 크게 주자, 는 것이다. 분산으로 나눈다는 의미는, 값의 분포가 고만고만한 상황에서 1이 차이나는 것과, 값의 분포가 매우 큰 경우에 1 차이나는 것은 분명 다른 경우이므로 분산으로 나눔으로써 원래 .. 2010. 4. 19.
Savitzky-Golay smoothing 스무딩은 자료를 매끄럽게 하는 것이라 할 수 있다. 이러한 작업은 데이터를 다루는 것에 있어 거의 필수적이다. 왜냐 하면, 관측되는 거의 모든 데이터는 여러 요인으로 인해 '오차'를 포함하고 있기 때문이다. 그래서 그와 같은 오차를 없애기 위해 여러 통계적 기법을 사용하는데, 스무딩은 통계적이진 않지만 오차를 없애고 원래의 데이터를 추정해 내기 위한 단순한 기법이면서도 효과적인 방법이다. 가장 쉽게 생각할 수 있는 방법은 이동평균(moving average)로, 주어진 데이터 전/후의 일정 개수의 데이터의 평균을 그 데이터의 값으로 추정하는 방법이다. 만약 주어진 데이터에서 멀어지는 점일수록 중요도가 떨어진다면 중요도를 낮추어 주면 된다. 즉, 이동평균은 주어진 데이터와의 거리에 상관없이 모두 동일한 가.. 2010. 1. 16.
monotone cubic Hermite interpolation 이전 글에서 설명한 cubic spline interpolation 은 원 데이터의 monotonicity를 보장해 주지 않는다. 말로 설명하는 것보다 그림으로 보면 쉽게 알 수 있다. 위의 그림에서 보면, 파란 열린 원이 원래의 데이터이다. 앞쪽 열에 있는 그림에서 보면 가장 뒤의 두 점을 보면 두 점은 증가하고 있음에도 cubic spline 으로 연결한 것은 아래로 갑자기 내려 갔다 올라가는 것을 볼 수 있다. 오른쪽 열에 있는 그림은, 앞쪽 두 데이터는 올라가고 있는데, cubic spline으로 연결한 곡선은 올라갔다 내려 오는 것을 볼 수 있다. 만약 이와 같이, 원래 데이터가 올라가는 구간이면 interpolation으로 한 것도 올라가고(최소한 내려오는 곳이 있지는 않고), 원래 데이터가 .. 2010. 1. 12.