Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MachineLearning스터디/LinearRegressionWithOneVariable: Difference between revisions

From ZeroWiki
imported>trailblaze
No edit summary
imported>trailblaze
No edit summary
 
(41 intermediate revisions by the same user not shown)
Line 1: Line 1:
__TOC__
__TOC__
* 수식 정리를 어떻게 해야할지 모르겠음.. 첫 장부터 포기해야하는가..
* 수식 정리를 어떻게 해야할지 모르겠음.. 첫 장부터 포기해야하는가..
* 이 문서에 있는 사진이나 예제의 상당수는 [https://www.coursera.org/course/ml Coursera/ML강의]에 남겨져 있음. PPT도 제공하므로 꼭 확인하세요.
=== Linear Regression ===
* 우리나라 말로 선형 회귀
* 변수 하나만 쓰이면 단순 선형 회귀, 둘 이상의 변수가 쓰이면 다중 선형 회귀라고 함.
* 만약 목표가 예측일 경우, 선형 회귀를 통해 y와 x로 이루어진 집합을 만들기 위한 예측 모델을 개발한다. 개발된 모델은 차후 y가 없는 x값이 입력되었을 때, 해당 x에 대한 y를 예측하기 위해 사용한다.
* 여러 x가 존재할 경우, y와 x 간의 관계를 수량화하여 어느 x가 y와 별로 관계가 없는지 알아낸다.
* [[File:LinearRegressionExp.png]]
* [http://ko.wikipedia.org/wiki/%EC%84%A0%ED%98%95_%ED%9A%8C%EA%B7%80 출처]
=== Model Representation ===
=== Model Representation ===
[[File:HousePriceExample.PNG]]
* 예: 집 평수에 따른 가격
[[File:Model_Representation.PNG]]
* Training Set : 위의 기본 데이터 셋과 같음. 머신은 이런 데이터 셋을 기반으로 판단을 하게 됨.
* Learning Algorithm : Hypothesis(추정)를 만들어 냄.
* Hypothesis : 주어진 입력에 대한 출력을 추정해내는 함수를 말한다. h라고 많이 씀. 데이터 모델이 h와 같다고 추정하게 되면, 우리는 Training Set에 존재하지 않는 데이터에 대해서도 h를 통해서 값을 추정해낼 수 있다.
* 위의 예제는 변수가 하나만 쓰인 단순 선형 회귀임.
[[File:hypothesis_house_price.png]]
* θ를 Hypothesis의 Parameter라고 함.
* 중요한 것 : θ를 어떻게 결정할 것인가? -> Cost Function을 통해서 결정함.
=== Cost Function ===
=== Cost Function ===
* 구해낸 Hypothesis가 데이터 모델을 잘 표현하고 있는지 평가하는 함수.
[[File:Cost_Function.PNG]]
* Cost Function에 의해서 가장 데이터 모델을 잘 표현하고 있다고 평가받는 Hypothesis를 구하는게 목표.
[[File:Goal_.PNG]]
* Cost Function을 시각화 했을 경우.
[[File:CostFunctionGraph1.PNG]]
* 가장 아래에 있는 지점이 데이터 모델을 잘 표현하는 Parameter임.(Cost가 가장 작음)
[[File:ContourPlot.PNG]]
* 같은 색으로 연결된 선은 같은 Cost를 가지고 있다는 의미임.
=== Gradient descent ===
=== Gradient descent ===
* 경사 하강법(gradient descent)은 최초 근사값(first-order) 발견용 최적화알고리즘이다. 기본 아이디어는 함수의 기울기(경사)를 구하여 기울기가 낮은 쪽으로 계속 이동시켜서 극값에 이를 때까지 반복시키는 것이다.
* 최적화할 함수 [[File:gd1.png]] 에 대하여, 먼저 시작점 [[File:gd2.png]] 를 정한다. 현재 [[File:gd3.png]] 가 주어졌을 때, 그 다음으로 이동할 점인 [[File:gd4.png]] 은 다음과 같이 계산된다.
[[File:gd5.png]]
* 이때 [[File:gd7.png]] 는 이동할 거리를 조절하는 매개변수이다. [[File:gd7.png]] 가 너무 작으면 수렴 속도가 느리다. [[File:gd7.png]] 가 크면 수렴 값을 넘어가버려서 수렴에 실패할 수 있다. 따라서 적절하게 잡아주는 것이 중요.
* 이 알고리즘의 수렴 여부는 '''f의 성질과 [[File:gd7.png]] 의 선택에 따라 달라진다.''' 또한, 이 알고리즘은 '''지역 최적해로 수렴'''한다. 따라서 구한 값이 전역적인 최적해라는 것을 보장하지 않으며 '''시작점 [[File:gd8.png]] 의 선택'''에 따라서 달라진다. 이에 따라 다양한 시작점에 대해 여러 번 경사 하강법을 적용하여 그 중 가장 좋은 결과를 선택할 수도 있다.
* [http://ko.wikipedia.org/wiki/%EA%B2%BD%EC%82%AC_%ED%95%98%EA%B0%95%EB%B2%95 출처]
[[File:GradientDescentGraph1.PNG]]
[[File:GradientDescentGraph2.PNG]]
* Gradient Descent를 이용해서 Parameter를 구해낼 경우, 다음과 같은 모습을 보여준다.
[[File:GradientDescentAlgorithm.PNG]]
* 각 Parameter는 동시에 갱신해야 한다.
* [[File:gd7.png]] 는 매 Parameter 갱신 때마다 수정할 필요가 없다. 기울기에 의해서 수렴하는 정도가 조절되기 때문이다.
=== Octave로 Linear Regression With One Variable 구현 ===
==== computeCost ====
function J = computeCost(X, y, theta)
% Initialize some useful values
m = length(y); % number of training examples
J = 0;
for i=1:m,
J = J + (X(i,:) * theta - y(i)) ^ 2;
end
J = J / (2 * m);
==== gradientDescent ====
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
m2 = length(theta); % number of theta
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
delta = 0;
temp = theta;
for iter2 = 1:m2
for iter1 = 1:m
delta = delta + (X(iter1, :) * theta - y(iter1)) * X(iter1, iter2);
end
delta = delta / m;
temp(iter2, 1) = temp(iter2, 1) - alpha * delta;
end
theta = temp;
    % ====================== YOUR CODE HERE ======================
    % 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.
    %
    % ============================================================
    % Save the cost J in every iteration   
    J_history(iter) = computeCost(X, y, theta);
end
----
[[MachineLearning스터디]]



Latest revision as of 03:12, 18 February 2014

  • 수식 정리를 어떻게 해야할지 모르겠음.. 첫 장부터 포기해야하는가..
  • 이 문서에 있는 사진이나 예제의 상당수는 Coursera/ML강의에 남겨져 있음. PPT도 제공하므로 꼭 확인하세요.

Linear Regression

  • 우리나라 말로 선형 회귀
  • 변수 하나만 쓰이면 단순 선형 회귀, 둘 이상의 변수가 쓰이면 다중 선형 회귀라고 함.
  • 만약 목표가 예측일 경우, 선형 회귀를 통해 y와 x로 이루어진 집합을 만들기 위한 예측 모델을 개발한다. 개발된 모델은 차후 y가 없는 x값이 입력되었을 때, 해당 x에 대한 y를 예측하기 위해 사용한다.
  • 여러 x가 존재할 경우, y와 x 간의 관계를 수량화하여 어느 x가 y와 별로 관계가 없는지 알아낸다.
  • LinearRegressionExp.png
  • 출처

Model Representation

HousePriceExample.PNG
  • 예: 집 평수에 따른 가격
Model Representation.PNG
  • Training Set : 위의 기본 데이터 셋과 같음. 머신은 이런 데이터 셋을 기반으로 판단을 하게 됨.
  • Learning Algorithm : Hypothesis(추정)를 만들어 냄.
  • Hypothesis : 주어진 입력에 대한 출력을 추정해내는 함수를 말한다. h라고 많이 씀. 데이터 모델이 h와 같다고 추정하게 되면, 우리는 Training Set에 존재하지 않는 데이터에 대해서도 h를 통해서 값을 추정해낼 수 있다.
  • 위의 예제는 변수가 하나만 쓰인 단순 선형 회귀임.
Hypothesis house price.png
  • θ를 Hypothesis의 Parameter라고 함.
  • 중요한 것 : θ를 어떻게 결정할 것인가? -> Cost Function을 통해서 결정함.

Cost Function

  • 구해낸 Hypothesis가 데이터 모델을 잘 표현하고 있는지 평가하는 함수.
Cost Function.PNG 
  • Cost Function에 의해서 가장 데이터 모델을 잘 표현하고 있다고 평가받는 Hypothesis를 구하는게 목표.
Goal .PNG 

  • Cost Function을 시각화 했을 경우.
CostFunctionGraph1.PNG
  • 가장 아래에 있는 지점이 데이터 모델을 잘 표현하는 Parameter임.(Cost가 가장 작음)
ContourPlot.PNG
  • 같은 색으로 연결된 선은 같은 Cost를 가지고 있다는 의미임.

Gradient descent

  • 경사 하강법(gradient descent)은 최초 근사값(first-order) 발견용 최적화알고리즘이다. 기본 아이디어는 함수의 기울기(경사)를 구하여 기울기가 낮은 쪽으로 계속 이동시켜서 극값에 이를 때까지 반복시키는 것이다.
  • 최적화할 함수 Gd1.png 에 대하여, 먼저 시작점 Gd2.png 를 정한다. 현재 Gd3.png 가 주어졌을 때, 그 다음으로 이동할 점인 Gd4.png 은 다음과 같이 계산된다.

Gd5.png

  • 이때 Gd7.png 는 이동할 거리를 조절하는 매개변수이다. Gd7.png 가 너무 작으면 수렴 속도가 느리다. Gd7.png 가 크면 수렴 값을 넘어가버려서 수렴에 실패할 수 있다. 따라서 적절하게 잡아주는 것이 중요.
  • 이 알고리즘의 수렴 여부는 f의 성질과 Gd7.png 의 선택에 따라 달라진다. 또한, 이 알고리즘은 지역 최적해로 수렴한다. 따라서 구한 값이 전역적인 최적해라는 것을 보장하지 않으며 시작점 Gd8.png 의 선택에 따라서 달라진다. 이에 따라 다양한 시작점에 대해 여러 번 경사 하강법을 적용하여 그 중 가장 좋은 결과를 선택할 수도 있다.
GradientDescentGraph1.PNG
GradientDescentGraph2.PNG
  • Gradient Descent를 이용해서 Parameter를 구해낼 경우, 다음과 같은 모습을 보여준다.
GradientDescentAlgorithm.PNG
  • 각 Parameter는 동시에 갱신해야 한다.
  • Gd7.png 는 매 Parameter 갱신 때마다 수정할 필요가 없다. 기울기에 의해서 수렴하는 정도가 조절되기 때문이다.

Octave로 Linear Regression With One Variable 구현

computeCost

function J = computeCost(X, y, theta)
% Initialize some useful values
m = length(y); % number of training examples
J = 0;
for i=1:m,
	J = J + (X(i,:) * theta - y(i)) ^ 2;
end
J = J / (2 * m);

gradientDescent

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
m2 = length(theta); % number of theta 
J_history = zeros(num_iters, 1);

for iter = 1:num_iters
	
	delta = 0;
	temp = theta;
	for iter2 = 1:m2
		for iter1 = 1:m
			delta = delta + (X(iter1, :) * theta - y(iter1)) * X(iter1, iter2);
		end
		delta = delta / m;
		temp(iter2, 1) = temp(iter2, 1) - alpha * delta;
	end
	theta = temp;
    % ====================== YOUR CODE HERE ======================
    % 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.
    %
    % ============================================================

    % Save the cost J in every iteration    
    J_history(iter) = computeCost(X, y, theta);
end

MachineLearning스터디