일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 정리
- 영상분석
- tensorflow
- keras
- 안드로이드
- 가상환경
- FLASK
- RapidCheck
- 고급C
- Object Detection
- MySQL
- Linux
- IMAGE
- 라즈베리파이
- Video
- sw
- C언어
- 지능형
- Deep Learning
- Machine Learning
- 디버그모드
- tracking
- 머신러닝
- detection
- Raspberry
- Android
- 데이터
- 서버
- php
- Python
- Today
- Total
건프의 소소한 개발이야기
[ML - Matlab/Octave] Linear Regression with Single Variable 본문
[ML - Matlab/Octave] Linear Regression with Single Variable
건강한프로그래머 2016. 4. 17. 14:52안녕하세요, 건프입니다.
이번엔 데이터처리를 간단하게 도와주는 Octave 라는 프로그램으로 Linear 한 예측함수와 그래프를 만드는 것을 해보려고 합니다.
1. 우선 데이터를 메모리 상으로 로드해야합니다.
Octave에서는 공백기준으로 나누어져있는 데이터를 행렬데이터로 다음과 같이 쉽게 로드할 수 있습니다.
위 데이터에서 첫번째 열(column) 은 데이터 값(지금은 Single variable 이므로 고려해야할 데이터값이 하나입니다) 이고,
두번째 열은 실제 도출된 결과값 에 대한 정보입니다.
2, 우리는 이 데이터를 X(input data) 와 y(real output data) 로 나눠야 합니다.
나누는 방법은 다음과 같습니다.
첫번째 인자의 : 는 모든 행의 값을 모두 가져와달라는 의미이고
두번째 인자의 1 또는 2 는 1열 또는 2열의 값만 가져오라는 의미입니다.
3. 이렇게 우리는 X 와 y를 분리했으니, 이 정보를 그래프로 그릴 수 있습니다.
figure; % 새로운 창을 띄어서 작업해달라는 명령어
plot(x, y, 'rx', 'MarkerSize', 3); %x 축 데이터, y축 데이터, 빨간색 x모양 표시로 찍어라, 마커사이즈는 3으로 해달라의 의미
ylabel('Profit in $10,000s'); %y 축 라벨
xlabel('Population of City in 10,000s');
이렇게 하면
위와 같은 데이터를 눈으로 확인할 수 있습니다.
4. 데이터를 확인했으니, 예측함수를 그려봐야 합니다.
하지만 예측함수를 구하기 위해서는 다음 두 단계를 거쳐야 합니다.
- computeCost 함수를 정의해서, 예측값과 실제값의 차이를 보여주는 함수를 만들고,
- gredientDescent 함수를 만들어서, theta(세타) 값을 일정 반복과정을 통해 cost함수의 결과값이 가장 작게 나오는 theta를 찾아야 합니다.
computeCost 는 다음과 같이 정의 할 수 있습니다.
function J = computeCost(X, y, theta)
% COMPUTECOST Compute cost for linear regression
% J = COMPUTECOST(X, y, theta) computes the cost of using theta as the
% parameter for linear regression to fit the data points in X and y
% Initialize some useful values
m = length(y); % number of training examples
% You need to return the following variables correctly
J = 0;
% Instructions: Compute the cost of a particular choice of theta
% You should set J to the cost.
h = X * theta;
J = (1/(2*m))*sum((h-y).^2);
end
Octave 에서는 function 을 정의할때 위와 같은 형식으로 정의합니다.
함수나 for 문같은 반복문이 끝날때는 뒤에 end를 붙여줘야 합니다
gredientDescent 함수도 다음과 같이 정의할 수 있습니다.
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
% GRADIENTDESCENT Performs gradient descent to learn theta
% theta = GRADIENTDESENT(X, y, theta, alpha, num_iters) updates theta by
% taking num_iters gradient steps with learning rate alpha
% Initialize some useful values
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
% Instructions: Perform a single gradient step on the parameter vector
% theta.
%
% Hint: While debugging, it can be useful to print out the values
% of the cost function (computeCost) and gradient here.
%
h = X * theta;
theta = theta - (alpha/m) * (X' * (h-y));
% Save the cost J in every iteration
J_history(iter) = computeCost(X, y, theta);
% fprintf('iter : %f , J_history : %f\n', iter, J_history(iter));
end
end
여기서 num_iter = 1500 으로 설정하였고,
alpha = 0.01 로 설정하였습니다.
X' 는 transposition(x) 입니다.
이렇게 구한 theta 를 가지고 표를 다시 그린다면
% Plot the linear fit
hold on; % keep previous plot visible
plot(X(:,2), X*theta, '-') % y축에는 예측함수의 값이 들어갑니다
legend('Training data', 'Linear regression')
hold off % don't overlay any more plots on this figure
이렇게 Linear 한 예측함수를 만들 수 있습니다.
참고
plot(X(:,2), X*theta, '-') 여기 부분을 plot(X(:,2), X*theta, '*') 이렇게 바꾼다면
선모양이 아니라, * 표모양으로 변해요!
' 개발 이야기 > Machine Learning 이야기' 카테고리의 다른 글
[Jupyter - Notebook] ipynb 파일을 python 파일로 변환하기 (4) | 2016.07.27 |
---|---|
[Python - Tensorflow] Tensorflow 시작하기 (2) (2) | 2016.06.06 |
[Python - Tensorflow] Tensorflow 시작하기(1) (1) | 2016.06.04 |
[ML - Matlab/Octave] Logistic Regression (5) | 2016.04.27 |
[ML - Matlab/Octave] Linear Regression with Multiple Variables (1) | 2016.04.23 |