한창 열심히 듣다가 바빠져서 잠시 안들었더니, 계속 우선순위에서 밀려 이제야 다시 시작해보려고 한다.
다른건 읽기 자료로 다 정리되어 있어서 배웠던 부분들이 금방 백업됬는데 튜토리얼부분은 없어서 내가 직접 정리하기로 결심했다. 이번을 토대로, 가능하면 강의 들을 때마다 이렇게 정리해놓으려고 한다. 수동적으로 강의나 읽기자료로 던져주는 걸 받아먹기보다 능동적으로 나도 함께 수업을 들어야 좀 더 기억에 오래 남을 것 같아서! (항상 노트에 정리하면서 공부하는 내 습관 때문이기도 하다)
1. Basic Operations
Octave를 사용하는 이유 : 프로토타입하기에 좋아서. 그리고 Octave는 오픈소스!
1) Variables
기본 연산자 : + - * / ^
% : 주석
논리연산자 : == != && || xor(a,b)
프롬프트 형식 바꾸기 : PS1(바꾸고자 하는 형식); ex. PS1('>>');
; : 결과 출력하지 않도록 함 ex. a = 3; 하면 a = 3 출력 안하고 다음 명령받음
true : 1
'' : String
disp() : 출력함수
ex) disp(sprintf(' 2 decimals: %0.2f', pi)) : C에서 출력하는 방식과 유사 소수점 아래 2자리
cf) pi : pi 자체가 파이값을 담고 있음
format long/short : 출력하는 것의 기본값 설정
2) Vector / Matrix
행렬 만들기 : ; 기준으로 행나눔
A = [ 1 2; 3 4; 5 6 ]
>> A = 1 2
3 4
5 6
row vector : [ 1 2 3 ] / column vector [ 1; 2; 3]
v = 1:0.1:2 : 1부터 0.1씩 증가하면서 2에 도달할 까지 행 벡터 만듦
v = 1:6 : 1씩 증가가 기본
>> v = 1 2 3 4 5 6
ones(a,b) : 모두 1을 값으로 가진 axb 행렬을 생성
2 * ones(a,b) 도 가능 - 모든 값에 2를 곱한 행렬
zeros(a,b) : 모두 0을 값으로 가진 axb 행렬을 생성
rand(a,b) : 랜덤한 값(0~1 사이의 실수)을 값으로 가진 axb 행렬을 생성
randn(a,b) : 평균이 0이고 분산/표준편차가 1인 가우스 분포로부터의 값으로 axb 행렬을 생성
sqrt(a) : a의 루트값
hist(a) : a에 대한 히스토그램 생성
hist(a, 50) : 막대 50개로 히스토그램 그림
eye(a) : axa 단위 행렬 생성
ex) ans = eye(4)
>> ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 0
help 명령어 : 명령어에 대한 설명
2. Moving Data Around
size(a) : a 변수가 담은 1x2 행렬 형태로 크기를 나타냄
size(a,1) / size(a,2) : a의 첫번째 열 / 두번째 열
ex) a = 3x2 행렬
>> ans =
3 2
length(a) : 행과 열의 개수 중 더 차원이 큰 값 반환
ex) 위의 예시 그대로, length(a)
>> ans = 3
- 리눅스 명령어와 동일
pwd : 현재 위치
cd : 위치 이동
ls : 문서 탐색
load 파일명 / load('파일명') : 파일에 있는 데이터 불러오기
who : 현재 Octave 메모리 상에서 정의되어 있는 변수
whos : who의 detail한 정보를 보여줌
clear 변수명 : 변수 지우기
a(1:10) : 처음 10개의 원소 slicing
save 파일명 변수명 : 파일로 저장
.mat : 데이터를 binary 형식으로 저장
.text : 사람이 읽을 수 있는 형식으로 저장, 이 경우 변수명 다음에 -ascii 써야함
- 인덱싱
A(a,b) : a행 b열의 있는 값
A(a, :) : a행에 있는 모든 값
A(:, a) : a열에 있는 모든 값
cf) ":" : 행이나 열에 해당하는 모든 요소
A([a b], :) : a 또는 b 행과 모든 열
ex) A = [ 1 2 ; 3 4; 5 6 ]일 때, A([1 3], :)
>> ans = 1 2
5 6
A(:,a) = [열벡터] : a열에 있는 값을 열벡터 값으로 대체
ex) A(:,2) = [1; 2; 3]
a = [a, [열벡터]] : a행렬에 오른쪽으로 열벡터 append
변수명(:) : 모든 원소를 하나의 벡터로 담음. 즉, 하나의 열로 만듦
c = [a b] / [a, b] : a행렬에 b 행렬을 옆으로 추가
ex) A = [ 1 2; 3 4 ] B = [ 11 12; 13 14 ]일 때, C = [ A B ]
>> C = 1 2 11 12
3 4 13 14
c = [a; b] : a행렬 밑에 b 행렬을 추가
3. Computing on Data
a * b : 행렬의 기본 곱셈
a .* b : 행렬의 원소 단위 곱셈
ex) A = [ 1 2; 3 4 ] B = [ 11 12; 13 14 ]일 때, A .* B
>> ans = 11 24
39 56
+) . : 원소 단위 계산으로 .^ ./ 등으로 활용 가능
log(a) : 원소 단위의 로그값 계산
exp(a) : 오일러(e)의 계승 값
abs(a) : 절대값으로 변환
-a / -1*a : -로 값 변환
a + 1 / a + ones(length(a),1) : 원소 값 1씩 증가
a' : a의 전치행렬 (tranpose). 행과 열을 바꿈
ex) (a')' = a
a = [ 1 2; 3 4; 5 6] -> a' = [ 1 3 5 ; 2 4 6 ]
max(a) / max(a,[],1) : 열 단위로 최대값
max(a,[],2) : 행 단위로 최대값
val = max(a) / max(max(a)) / max(a(:)) : 행렬 내의 최대값
[val, ind] = max(a) : 행렬 내의 최대값, 최대값의 인덱스
max(rand(3),rand(3)) : 랜덤한 3x3 행렬에서 원소 단위의 최대값 반환
비교문 ex) a < 3 : 원소 단위의 연산으로, 비교문이 참이면 1 거짓이면 0으로 원소값 설정
find(비교문) : 비교문에 true인 원소들의 인덱스를 알려줌
ex) a = [1 4 0.5 2]
>> a < 3
ans = 1 0 1 1
>> find(a<3)
ans = 1 3 4
magic(n) : nxn의 마방진 행렬
cf) magic square(마방진) : 모든 행과 열, 대각선의 합계 같음
sum(a) : 모든 원소의 합
sum(a,1) : 열 단위의 합 / sum(a,2) : 행 단위의 합
+) sum(sum(a .* eye(n)) / sum(sum(a .* flipud(eye(n))) : 대각선의 합
cf) flipud : flip-updown. 단위 행렬을 반대 대각선으로 만들 수 있음
prod(a) : 모든 원소의 곱
floor(a) : 소수점 버림
ceil(a) : 소수점 올림
pinv(A) : 역행렬
4. Plotting Data
plot(x,y) : x와 y 축으로 plot 그림
plot(x,y, 'color') : 그래프 색 설정 가능
ex) 'r' : red
cf) sin() / cos() 함수
hold on : 현재 상태 잠시 멈추고 명령어 입력
xlabel('str') / ylabel('str') : x축, y축 라벨
legend('str1','str2') : 그래프의 오른쪽 위에 함수별로 라벨
title('str') : 타이틀 붙이기
print -dpng 'name.png' : 그래프 png 파일로 저장
close : 그래프 창 닫기
- 숫자를 부여해서 여러 그래프 그리기
figure(1); plot(x,y); : 첫번째 그래프
figure(2); plot(x,y); : 두번째 그래프
subplot(a,b,c) : axb grid에 c번째에 위치 시키겠다. 그 위치에 그래프 그리려면 plot(x,y) 그 다음 입력
ex) subplot(1,2,1) : 1x2 grid의 1번째 (왼쪽)
axis([x시작, x끝, y시작, y끝]) : x축과 y축 범위 설정 가능
clf : clear figure
imagesc(a) : 행렬을 색으로 표현, 다른 색으로 다른 값임을 나타냄
imagesc(a), colorbar, colormap gray; : color 흑백으로 표현
cf) ,를 사용해서 여러 명령을 한큐에! ;를 사용한다면 여러 명령을 출력없이 한큐에!
5. Control Statements : for, while, if statement
전반적으로 프로그래밍 언어에서 사용하는 방식과 유사하다!
- for문
ex) for i=1:10,
v(i) = 2^i;
end;
- while문
ex) while true.
v(i) = 999;
i = i+1;
if i == 6,
break;
end;
end;
- if문
ex) if v(1) == 1,
disp('The value is one');
elseif v(1) == 2,
disp('The value is two');
else
disp('The value is two');
end;
exit/quit/q : Octave 종료
addpath('파일이 있는 경로') : 'C:\'로 search path 경로 설정
6. Vectorization
Octave
C++
- Gradient descent (* Simultaneous update이 중요)
지난번에 세운 vectorization 식 : u = 2v + 5w 로 사용
'Dev > Coursera - Machine Learning' 카테고리의 다른 글
[Coursera ML][5주차] Neural Network : Learning (0) | 2020.03.03 |
---|---|
[Coursera ML][4주차] Neural Networks : Representation (0) | 2020.03.01 |
[Coursera ML][3주차] Logistic Regression (로지스틱 회귀) (0) | 2020.02.11 |
댓글