MATLAB의 zscore 함수를 설명하기 전에 먼저 zscore 함수가 어떤 상황에 사용될 수 있는가를 먼저 예를 통해서 살펴보려고 한다.
10명의 중학생이 있다. 이들의 수학, 영어, 국어, 과학 시험 점수는 다음과 같다.
나는 이 학생들이 이과 쪽이 적성에 맞을지, 문과 쪽이 적성에 맞을지 한명 한명 판단하고 싶다. 수학과 과학 점수가 좋다면 이과로 진학하는 것이 좋을 것이고, 영어와 국어 점수가 좋다면 문과로 진학하는 것이 좋을 것이다. 하지만 각 과목당 시험의 난이도가 다르기 때문에 단순히 점수만을 봐서는 이 학생이 어느 과목을 더 잘하는지 제대로 판단하기 어렵다. 그래서 수학, 영어, 국어, 과학 점수를 각각 표준화(standardization)해준다. 표준화라는 것은 원래 값에 평균값을 빼준 것을 표준편차로 나눠주는 것을 의미한다. 다음 공식을 참고하자.
$z = \frac{x - \mu}{\sigma}$ ... (공식 1)
결과적으로 표준화된 값들의 평균은 0이고 표준편차는 1이 된다. 이때 사용할 수 있는 매틀랩 함수는 바로 zscore이다. 표준화를 해주면 난이도가 다른 각 과목의 점수들을 상대적으로 평가할 수 있게 된다.
표준화한 점수들을 아래 그래프에 그려보았다.
각 과목당 평균 점수는 0이 되었고, 표준편차는 1이 되었다. 표준화된 z-점수는 각 시험의 난이도를 고려한 점수라고 볼 수 있겠다.
이제 이 그래프를 참고해서 학생들을 진학상담을 해주자.
"학생1아, 너는 과학과 수학을 비교적 잘하는구나. 이과 가는거 어떠니?"
"학생2야, 너는 국어, 과학, 영어, 수학 순으로 잘하는구나. 명확하진 않은데, 그래도 국어와 영어는 평균 이상의 실력이 되니 문과 가는거 어떨까?"
"학생3아, 너는 영어와 국어는 상당히 잘하는 반면에, 수학과 과학은 좀 많이 못하는구나. 문과 가야겠네."
...
"학생10아, 너는 다 평균 이상은 하는구나. 국어를 제일 잘하긴 하다면, 다른 과목 성적들과 큰 차이 없으니 알아서 잘 결정하도록 하거라."
이런 식으로 진학상담을 해줄 수 있을 것이다. 진학상담 문제를 매우 단순화시켰지만, 도움은 될 거라고 생각한다. 왜냐하면 꽤 많은 학생들이 자신이 시험에서 받은 점수만을 보고 자신이 어떤 과목을 더 잘하는지 판단하곤 하기 때문이다.
사용된 MATLAB 코드
clc, clear, close all
X = [89 63 74 95;
76 75 82 90;
72 89 85 79;
95 76 80 88;
66 77 69 81;
80 59 78 94;
85 69 77 85;
78 81 83 87;
92 79 79 91;
86 81 85 92];
Z = zscore(X, 1); % 표준화된 Z-점수 얻기
figure,
plot(Z(:, 1), 'b*');
hold on
plot(Z(:, 2), 'ro');
plot(Z(:, 3), 'g^');
plot(Z(:, 4), 'cs');
title('표준화된 Z-점수')
xlabel('학생')
ylabel('표준화된 점수')
legend('수학', '영어', '국어', '과학')
grid on
여기서 핵심 코드는 Z = zscore(X, 1)이다. 1의 의미는 X를 전체 모집단으로 본다는 것이다. 위의 공식 1에 따라 표준화하겠다는 것이다. 공식 1에서 $\mu$는 모평균(모집단의 평균), $\sigma$는 모표준편차(모집단의 표준편차)를 의미한다. 모표준편차는 다음과 같이 구한다.
$\sigma = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \mu)^2}{n}}$
만약에 Z = zscore(X, 0) 또는 Z = zscore(X)으로 코드를 작성한다면, X를 표본으로 구성된 것으로 보고 $z = \frac{x - \bar{X}}{S}$에 의해 표준화된 z-점수를 산출한다. $\bar{X}$는 표본평균(표본의 평균)을, $S$는 표본표준편차(표본의 표준편차)를 의미한다. 표본표준편차는 다음과 같이 구한다.
$S= \sqrt{\frac{\sum_{i=1}^{n}(x_i - \bar{X})^2}{n-1}}$
분모가 n-1임에 유의하자.
이 글이 도움이 되셨다면, 공감을 남겨주시길 부탁드립니다. 끝까지 읽어 주셔서 감사합니다!
bskyvision의 추천글 ☞
정규화(normalization)와 표준화(standardization), 머신러닝 성능향상을 위한 필수 단계
'Dev > matlab' 카테고리의 다른 글
[MATLAB] 방정식 해 구하기, solve 함수 (6) | 2019.10.17 |
---|---|
[MATLAB] identity matrix 생성하기, eye 함수 (0) | 2019.10.09 |
[MATLAB] 연립방정식 해 구하기, mldivide 함수 (0) | 2019.10.09 |
[MATLAB] 다양한 정도로 압축된 jpeg 이미지 만들기, imwrite 함수 (0) | 2019.07.03 |
[MATLAB] 야구 게임, 0과 9사이 숫자 3개 맞추기 (4) | 2019.04.26 |
[MATLAB] 문자열에서 필요한 데이터만 추출하기, sscanf 함수 (2) | 2019.04.18 |
[MATLAB] 숫자형을 문자형으로, 문자형을 숫자형으로 변환하기, num2str 함수와 str2num 함수 (2) | 2019.04.16 |
matlab에서 문자열 비교하기, strcmp 함수 (0) | 2019.04.12 |