Ebook

1장:

데이터 탐색


이 eBook에서는 머신러닝 알고리즘에 사용되는 데이터를 MATLAB®에서 전처리할 때 수반되는 작업에 대해 다룹니다.

머신러닝으로 작업해 본 적이 있다면 데이터에 전처리가 필요하다는 사실을 알고 계실 것입니다. 전처리를 수동으로 처리하면 시간이 오래 걸리는 지루한 작업이 될 수 있다는 사실도 아실 것입니다. 변경 사항이 머신러닝 모델의 정확도에 미치는 영향을 빠르게 평가할 수 있도록 프레임워크 내에서 전처리 스크립트를 업데이트할 수 있어야 합니다.

기초 수학 수업에서 배운 내용을 떠올려 보면, 괄호, 지수, 곱셈, 나눗셈, 덧셈, 뺄셈 연산에는 확고한 우선순위가 있다는 사실을 기억하실 것입니다. 사과 개수를 세는 문제든, 주택 담보 대출 금리 계산 문제든, 2 * (6+4)2 = 200이라는 사실에는 변함이 없습니다.

그러나 데이터 전처리 작업에서의 우선순위는 이처럼 단순하지 않습니다. 작업을 어떤 순서로 진행해야 할지에 관한 정해진 몇 가지 규칙이 있긴 하나, 문제마다 어떤 작업이 선행해야 하는지에 영향을 주는 저마다의 요인이 있습니다.

데이터를 전처리하려면 먼저 어떤 전처리 작업이 필요한지 알아야 합니다. 데이터를 조회하고 시각화하고 그 밖의 데이터 탐색 방법을 사용하여 전처리 작업을 어떤 부분에 집중해야 하는지 알 수 있으며, 이를 통해 향후에도 탐색을 통해 전처리할 부분을 찾아내는 반복적인 워크플로를 구성할 수 있습니다. 탐색을 통해 더 이상 해결해야 할 문제가 보이지 않을 때까지 이 과정을 반복합니다.

Workflow diagram

이 워크플로 내에서의 반복을 파악하려면 스크립트로 전처리 연산을 관리하는 것이 도움이 됩니다. 전처리 결과로 나오는 데이터는 적용된 전처리 순서에 따라 달라질 수 있으므로 스크립트로 관리하면 전처리 단계의 순서를 보다 용이하게 조정할 수도 있습니다.

데이터 전처리에 사용하는 MATLAB 스크립트의 한 예를 살펴보겠습니다.

section

전처리가 필요한 데이터 만들기

% 잡음이 있는 사인파를
% 만들고 일부 값을 제거해
% 누락값을 발생시킵니다.

rng default;
t = 0:0.01:5;
y = sin(t) + randn(size(t));
missingIdx = randi([1 length(y)],100,1);
y(missingIdx) = NaN;

% 데이터를 플로팅합니다.
% 플롯을 보면 누락된
% 데이터를 나타내는 공백을 볼 수 있습니다.

figure;
plot(t,y)
Graph data with gaps
section

누락된 값 전처리하기

% fillmissing 함수에 선형
% 보간을 사용하여 데이터의
% 공백을 채웁니다.

y_filled = fillmissing(y, "linear");

% 채워진 데이터를
% 플롯에 추가합니다.
% 이제 공백이 채워진 것을 볼 수 있습니다.

hold on;
plot(t, y_filled, ':r')
Graph data with filled gaps
section

라이브 편집기 작업으로 누락된 데이터 정리하기

또는 라이브 편집기 작업을 사용하여 동일한 전처리 작업을 수행할 수도 있습니다. 라이브 편집기 작업은 MATLAB 도구 모음의 라이브 편집기 > 작업 드롭다운에서 찾을 수 있습니다. 누락된 데이터 정리 라이브 편집기 작업은 정리된 데이터와 채워진 누락된 값의 플롯을 보여줍니다. 또한 데이터를 정리하는 데 사용할 수 있는 여러 가지 방법도 제공합니다.

section

데이터 평활화하기

이제 데이터 평활화 라이브 편집기 작업을 사용하여 잡음을 평활화할 수 있습니다. 너비가 1인 이동 윈도우를 갖는 가우스 필터를 적용해 보겠습니다.

이 스크립트에서는 누락된 데이터를 정리한 후에 평활화를 적용했습니다. 그러나 이런 방법이 항상 최상의 선택은 아닐 수 있습니다. 스크립트에는 전체 단계가 기록되어 있으므로 각 섹션의 위치를 변경하여 전처리 순서를 바꾸면 결과에 어떤 영향을 미치는지 손쉽게 살펴볼 수 있다는 장점이 있습니다.