More actions
imported>trailblaze No edit summary |
imported>trailblaze No edit summary |
||
| (43 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
__TOC__ | __TOC__ | ||
=== Model | * 수식 정리를 어떻게 해야할지 모르겠음.. 첫 장부터 포기해야하는가.. | ||
* 이 문서에 있는 사진이나 예제의 상당수는 [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 === | |||
[[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와 별로 관계가 없는지 알아낸다.

- 출처
Model Representation
- 예: 집 평수에 따른 가격
- Training Set : 위의 기본 데이터 셋과 같음. 머신은 이런 데이터 셋을 기반으로 판단을 하게 됨.
- Learning Algorithm : Hypothesis(추정)를 만들어 냄.
- Hypothesis : 주어진 입력에 대한 출력을 추정해내는 함수를 말한다. h라고 많이 씀. 데이터 모델이 h와 같다고 추정하게 되면, 우리는 Training Set에 존재하지 않는 데이터에 대해서도 h를 통해서 값을 추정해낼 수 있다.
- 위의 예제는 변수가 하나만 쓰인 단순 선형 회귀임.
- θ를 Hypothesis의 Parameter라고 함.
- 중요한 것 : θ를 어떻게 결정할 것인가? -> Cost Function을 통해서 결정함.
Cost Function
- 구해낸 Hypothesis가 데이터 모델을 잘 표현하고 있는지 평가하는 함수.
- Cost Function에 의해서 가장 데이터 모델을 잘 표현하고 있다고 평가받는 Hypothesis를 구하는게 목표.
- Cost Function을 시각화 했을 경우.
- 가장 아래에 있는 지점이 데이터 모델을 잘 표현하는 Parameter임.(Cost가 가장 작음)
- 같은 색으로 연결된 선은 같은 Cost를 가지고 있다는 의미임.
Gradient descent
- 경사 하강법(gradient descent)은 최초 근사값(first-order) 발견용 최적화알고리즘이다. 기본 아이디어는 함수의 기울기(경사)를 구하여 기울기가 낮은 쪽으로 계속 이동시켜서 극값에 이를 때까지 반복시키는 것이다.
- 이 알고리즘의 수렴 여부는 f의 성질과
의 선택에 따라 달라진다. 또한, 이 알고리즘은 지역 최적해로 수렴한다. 따라서 구한 값이 전역적인 최적해라는 것을 보장하지 않으며 시작점
의 선택에 따라서 달라진다. 이에 따라 다양한 시작점에 대해 여러 번 경사 하강법을 적용하여 그 중 가장 좋은 결과를 선택할 수도 있다.
- Gradient Descent를 이용해서 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