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

  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 5 next


티스토리 툴바