본 글은 코세라 머신러닝(Machine Learning)을 수강하면서 일부 내용을 정리한 것입니다.
강의 사이트: https://www.coursera.org/learn/machine-learning
이번 글에서는 데이터 플로팅에 대해 정리해 보도록 하겠습니다.
일단, 0부터 0.98까지 0.01간격으로 증가시키는 행렬 t를 생성하였습니다.
이 때 y1을 아래와 같이 t에 대한 sin 함수로 설정했을 때 plot(t, y1)은 아래와 같습니다.
>> t = [0:0.01:0.98]; >> y1 = sin(2*pi*4*t); >> plot(t, y1);
이번에는 t에 대한 cos함수를 y2로 선언해 보겠습니다.
>> y2 = cos(2*pi*4*t); >> plot(t, y2);
hold on을 사용하면 두 개의 곡선을 아래와 같이 하나의 플롯으로 표현할 수 있습니다.
여기서 세 번째 줄의 'r'은 이벤트 색상을 지정하는 코드입니다.
>> plot(t, y1); >> hold on; >> plot(t, y2, 'r');
라벨, 범례, 제목도 아래와 같이 별도로 설정해 줄 수 있습니다. 간단하죠?!
>> xlabel('time') >> ylabel('value') >> legend('sin', 'cos') >> title('my plot')
위 플롯을 png와 같은 이미지 파일로 출력할 수도 있는데요, 아래 코드와 같습니다.
close는 현재 열려 있는 플롯 창을 모두 닫아주는 기능을 수행합니다.
>> cd 'C:\myPlot'; print -dpng 'myPlot.png' >> close
참고로, 옥타브에서 기본적인 초기화 함수들은 다음 글을 참조하시기 바랍니다.
옥타브(Octave) 프로그래밍 - 초기화(Initialization) 함수 소개 | http://blog.daum.net/geoscience/851
각 플롯은 figure()와 같이 지정하거나, subplot()을 통해 하나의 창에 여러 개의 플롯을 그릴 수도 있습니다.
subplot(1, 2, 1)이라고 하면, 플롯을 1*2 격자로 분할하고 첫 번째 원소를 이용한다는 의미가 되겠습니다.
여기서는 1*2 격자로 분할된 상태에서 첫 번째 원소는 plot(t, y1)을, 두 번째 원소는 plot(t, y2)를 그렸습니다.
>> figure(1); plot(t, y1); >> figure(2); plot(t, y2); >> subplot(1, 2, 1); % Divides plot a 1*2 grid, access first element >> plot(t, y1); >> subplot(1, 2, 2); >> plot(t, y2);
axis()는 플롯 각 축의 최소, 최대 범위를 지정해 주는데요,
아래 창 우측 플롯의 x축이 0.5 ~ 1 범위로, y축이 -1 ~ 1로 조정되었습니다.
그리고 clf는 현재 열려 있는 창에서 내용만 지워주는 화면 정리 기능을 제공합니다.
>> axis([0.5 1 -1 1]) >> clf;
이번에는 imagesc() 함수에 대해 알아보겠습니다. 먼저, magic(5) 행렬을 선언했는데요,
앞서 배운 것처럼 magic()함수는 지정된 개수만큼 N * N 행렬을 만들어 줍니다.
이 때 행렬은 행, 열, 대각의 합이 모두 일치하는 특성을 가지고 있습니다.
>> A = magic(5) A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
위와 같은 A 행렬을 imagesc()로 선언하면 어떻게 될까요?!
이 함수는 컬러영상으로 행렬의 규모를 표현할 수 있는데요, 결과는 아래와 같습니다.
>> imagesc(A)
보다 상세한 설정도 가능한데요, 아래와 같이 각 원소 색상의 척도는 실제 값의 정도와 일치합니다.
>> imagesc(A), colorbar, colormap gray; >> A(1, 2) ans = 24 >> A(4, 5) ans = 3
이번에는 마방진(magic matrix)을 15로 설정해 봤습니다. 꽤 재밌는 기능이죠?!
>> imagesc(magic(15)), colorbar, colormap gray;