5. Octabe / Matlab Tutorial
실제 알고리즘 구현을 위한 프로그래밍 언어를 소개한다. 하지만 본인은 Octabe가 아닌 파이썬을 통해 소스코드를 구현했다. Octabe를 사용하시는 분들을 위한 게시물이다.
5.1. Basic Operation
- 논리연산
- 1 == 1 % ans 0
- 1 ~= 1 % ans 1
- 1 && 0 % ans 0
- 1 || 0 % ans 1
- xor(1, 0) % ans 1
- 프로롬프트 모양바꾸기
- PS1(' >>')
- 변수 지정
- a = 3 % ans 3
- a = 3; % 출력없음
- a % a = 3
- b = ‘hi’ % hi
- c = (3 >= 1) % 1
-
- a = pi % a= 3.1416
- disp(a); % 3.1416
- format long % : 변수의 소수점 뒷자리를 길게 표시
- format shot % : 변수의 소수점 뒷자리를 짧게 표시
- sprinfs(‘2 decimals : %0.2f, a’) % 2 decimals : 3.14
- disp(sprinfs(‘2 decimals : %0.2f, a’)) % 6 decimals : 3.141593변수 출력
- 행렬 생성
- A = [1 2; 3 4; 5 6] : 3 x 2 행렬 A 생성
- v = [1; 2; 3] : 3 x 1 벡터 v 생성
- v = [1, 2, 3] : 1 x 3 벡터 v 생성
- v = 1: 0.1 :2 : 1 ~ 2 까지 0.1씩 증가하는 성분 벡터 v 생성
- v = 1:6 : 1 ~ 6 까지 1씩 증가하는 성분 벡터 v 생성
- A = ones(2,3) : 행렬 성분이 모두 1 인 2 x 3 행렬 A 생성
- A = 3*ones(2,3) : 행렬 성분이 모두 3 인 2 x 3 행렬 A 생성
- w = rand(1,3) : 행렬 성분이 0~1사이의 랜덤 값인 1 x 3 벡터w 생성
- w = randn(1,3) : 행렬 성분이 가우시안 분포 값인 1 x 3 벡터w 생성
- I = eye(4) : 4 x 4 항등행렬I 생성
- 그래프 그리기
- w = -6 + sqrt(10) * randn(1, 10000) : 행령성분이 랜덤숫자 1 x 10, 000로 행렬 생성
- hist(w) : 막대그래프 생성
- hist(w, 50) : 50개의 막대그래프 생성
5.2. Moving Data Around
- 행렬관리
- size(A) % ans 3 2 : 행렬 A의 차원을 ‘행 열’로 표현
- size(A, 1) % ans A = 2 : 행렬 A의 행의 크기
- size(A, 2) % ans A = 3 : 행렬 A의 열의 크기
- length(A) % ans 6 : 행렬 A의 차원중 가장 긴 값
- 행렬 성분 관리
- A(3, 2) % ans 6
- A(2,:) % ans 3 4 : 2행의 모든 성분 값 반환
- A(:,1) % ans 1 3 5 : 1열의 모든 성분 값 반환
- A([1 3], :) % ans 1 2 ; 5 6 : 1,3 행의 성분 값 반환
- A(:, 2) = [10;11;12] % ans : 2열의 성분 값을 [10; 11; 12]로 대체
- A = [A, [13; 14; 15]] % ans : A값 맨 오른쪽 열에 [13 14 15] 추가
- A(:) % ans 1 2 3 4 5 6 : 열 벡터로 변환
- C = [A B] % ans : 좌 우로 연결
- C = [A; B] % ans : 상 하로 연결
- 데이터 관리
- load featuresX.txt % : 파일을 현재 디렉토리로 업로드
- save hello.mat v % : 변수v의 값을 .mat파일로 저장
- save hello.txt v -ascii % : 변수v의 값을 아스키형식으로 저장
- 변수 및 함수 관리
- who % : 현재 사용 중인 변수를 나열
- whos % : 현재 사용 중인 변수를 상세나열
- clear v % : v 변수제거
- clear % : 모든변수 제거
5.3. Computing on Data
- 행렬계산
- A . * B : 같은 위치의 성분끼리 곱셈 (행렬 크기 같아야함)
- A .^ 2 : 각 성분 값에 제곱
- 1 . / v : 각 성분을 역수로 만듬
- log(v) : 값에 밑이 자연로그 적용
- log10(v) : 값에 밑이 상용로그 적용
- abs(v) : 절대값
- 행렬관리
- max(A) : 행렬 성분 중 최대값
- max(A,[],1) : 행렬 각 열의 최대값
- max(A,[],2) : 행렬 각 행의 최대값
- A’ : 전치행렬
- find(A > 5) : 행렬A 성분 중 5 보다 큰 값의 위치
- magic(4) : 4x4 마방진 행렬
- [r,c] = find(A > 5) : 행렬A 모든 성분중 5 보다큰 값 성분 위치
- sum(A, 1) : 행렬A 열의 모든 합
- prod(v) : 벡터 v 모든 값 곱
- floor(v) : 내림
- ceil(v) : 올림
- flipud(A) : 행 뒤집기
- pinv(A) : 역행렬
5.4. Plotting Data
- 도식화
- plot(t, y1) : 수평축t, 수직축y1 도식화
- hold on : 기존 그래프에 새로운 그래프 추가
- plot(t, y2, ‘r’) : 수평축t, 수직축y2 빨간색 그래프 도식화
- xlabel(time‘) : x축 라벨
- ylabel(‘value’) : y축 라벨
- legned(‘sin’, ‘cos’) : 그래프 별 범례
- title(‘my plot’) : 중앙에 제목 표시
- 그래프관리
- print -dpng ‘myplot.png’ : .png파일로 저장
- close : 그래프 창 닫음
- clf : 그래프 창에서 그래프 지움
- figure(1); plot(t, y1) : figure1 이름으로 첫번쨰 그래프창
- figure(2); plot(t, y1) : figure1 이름으로 두번쨰 그래프창
- subplot(1,2,1) : 1x2로 분할 후 왼쪽에 삽입 (subplot 실행 후 plot 적용)
- subplot(1,2,2) : 1x2로 분할 후 오른쪽에 삽입 (subplot 실행 후 plot 적용)
- axis([0 5 -1 1]) : startX endX startY endY 범위 설정
- imagesc(t) : 색넣기
5.5. Control Statements : for, while, if
- for
v = zeros(10,1) : 10x1 벡터v 생성
for i = 1:10, : 1 ~ 10 반복
v(i) = 2^i; : 벡터v 성분에 값을 2^i 승으로 입력
end; : 루프종료
index = 1:10 : 1~10 벡터v 생성
for i = index, : 1~10 반복
disp(i); : i 값 표시
end;
- while
i=1
while i <=5 : i 가 5보다 크면 종료
v(i) = 100; : 벡터v에 성분 입력
i = i+1; : 변수 i를 1증가 시킴
end;
- if
v(1) = 2;
if v(1) == 1,
disp(‘value 1’);
elseif v(2)==2,
disp(‘value 2’);
else,
disp(‘valuse is not 1 or 2’);
end;
5.5. Vectorization
선형대수 및 수치 관련 라이브러리를 활용하면 코드는 줄어들고 빨라진다. 수학 공식을 프로그래밍 할때 일반 프로그래밍과 옥타브에서 지원하는 라이브러리를 사용한 프로그래밍의 소스 차이를 확인해본다
임의의가설 표현 비교
- Hθ(x)
- = θ0x0 + θ1x1 + θ2x2 + θ3x3 + θ4x4 +... + θnxn (일반 함수 식)
- = θ^T* X (행렬 표현)
// 일반프로그래밍
prediction = 0.0;
for j = 1: n+1;
prediction = prediction + theta(j) * x(j)
end;
// 옥타브 라이브러리
prediction = theta' * x
'머신러닝' 카테고리의 다른 글
[머신러닝 이론] 7. Regularization(정규화) - 앤드류응 강의 (0) | 2022.06.02 |
---|---|
[머신러닝 이론] 6. 로지스틱 회귀 - 앤드류응 강의 (0) | 2022.05.29 |
[머신러닝 이론] 4. 다변수 선형회귀 - 앤드류응 강의 (0) | 2022.05.15 |
[머신러닝 이론] 3. 머신러닝에 필요한 선형대수 복습 - 앤드류응 강의 (0) | 2022.05.15 |
[머신러닝 이론] 2. 단변수 선형회귀(2) - 앤드류응 강의 (0) | 2022.05.14 |