점점 티스토리에 정이 떨어지고 있다..

  1. 글을 쓰고 조금만 조정하다보면 html 코드는 떡칠이 되어 있다. 내 성격에 이걸 다시 정리 안 하고는 못 배긴다.
  2. 스킨 때문일 수도 있지만, 몇몇 html 코드가 안 먹히는 듯.
  3. 그래서 구글 블로그로 다 옮겨버릴까 생각 중인데
    1. 이 과정 역시 html 코드를 다시 정리할 생각을 하면 깝깝하다.
    2. 물론 그럴 필요는 없다. 그냥 강박증이다.
  4. 수식 입력기가 편하기는 하지만 결정적으로 수식의 폰트가 이도저도 아니고 아마추어처럼 보인다.


Trackback : 0 Comment : 0

근황

블로그를 버려두고 있지만 그렇다고 블로그가 버려진 건 아닙니다.

해킹을 당해서 스킨의 skin.html의 맨 위부분에 납치태그가 추가되어 성인사이트로 리다이렉트 되었기에 며칠정도 Daum으로부터 차단을 당했었어요.

비밀번호는 반드시 영문자+숫자+특수문자로 만듭시다.

Trackback : 1 Comment : 0

원소가 더해졌을 때 평균과 분산 구하기

\( N \) 개의 원소들로 이루어진 벡터 \( \mathbf{X} \)가 있다고 하지요.
\[ \mathbf{X}=\left [ x_1 , x_2 , \cdots , x_N \right ] \] the 1st raw moment(평균) : \( \overline{\mathbf{X}} = \frac{1}{N}\sum_{i=1}^{N}{x_i} \)
the 2nd raw moment : \( \overline{\mathbf{X}^2} = \frac{1}{N}\sum_{i=1}^{N}{x^{2}_{i}} \)
the 2nd central moment(분산) : \( \sigma^{2}_{\mathbf{X}}=\overline{\mathbf{X}^2}-\overline{\mathbf{X}}^2 \)

그런데 만약 거기에 새로운 원소 하나가 추가되어 \(  \mathbf{Y}=\left [ x_1 , x_2 , \cdots , x_N , x_{N+1} \right ] \) 라는 새로운 벡터가 된다면, 이것의 평균과 분산은 어떻게 구할 수 있을까요?

위 계산식처럼 원소들을 모두 이용하여 계산하지 않아도, 본디의 '평균'과 '분산', 그리고 '원소의 개수'만 알고 있으면 계산이 매우 간단해집니다.

\begin{eqnarray} \overline{\mathbf{Y}} = \frac{N\cdot \overline{\mathbf{X}}+x_{N+1}}{N+1}\\ \overline{\mathbf{Y}^2} = \frac{N \cdot \overline{\mathbf{X}^2}+x^{2}_{N+1}}{N+1}\\ = \frac{N \cdot \left( \sigma^{2}_{\mathbf{X}}+\overline{\mathbf{X}}^2 \right) +x^{2}_{N+1}}{N+1}\\ \sigma^{2}_{\mathbf{Y}} = \overline{\mathbf{Y}^2}-\overline{\mathbf{Y}}^2.\\ \end{eqnarray}

굳이 모든 데이터를 저장할 필요가 없으니까 편하겠지요?
아래는 MatLab 코드입니다. 정말 두 결과가 동일한지 확인해보세요.

x = 1:5; % 벡터 x
nx = length(x); % x의 원소개수
mx = mean(x); % x의 산술평균
vx = mean(x.^2) - mx^2; % 분산. MatLab 내장함수 var(x,1)의 결과와는 같지만
% default꼴인 var(x,0)과는 다릅니다. degrees of freedom 때문인데, 이것은 따로 찾아보셔요.

new_ = 6;
y = [x new_]; % new_라는 원소가 추가된 벡터 y
my = mean(y);
vy = mean(y.^2) - my^2;
disp(['평균:',num2str(my,'%1.4f')]);
disp(['분산:',num2str(vy,'%1.4f')]);
clear my vy

clear x y % x와 y를 모두 삭제하더라도 여전히 계산은 가능합니다.
whos;
my = (nx * mx + new_)/(nx + 1);
vy = (nx * (vx + mx^2) + new_^2)/(nx + 1) - my^2;
disp(['평균:',num2str(my,'%1.4f')]);
disp(['분산:',num2str(vy,'%1.4f')]);

같은 원리로 '평균'과 '분산', '원소 개수'만 알고 있는 또 다른 벡터가 합쳐진다고 해도 병합된 벡터의 새로운 평균과 분산을 쉽게 구할 수 있을 것입니다.

Trackback : 1 Comment : 0
prev 1 2 3 4 next