[ML] Linear Regression
Linear Regression (One Variable)
집크기와 집가격에 대한 데이터셋이 있다고 하자.

../../assets/images/posts/2020-09-28-LinearRegression/table.png
- i=1일때 집사이즈(x1)는 2104. 집가격(y1)은 460이다.
- 이러한 값들을 그래프에 찍어보면 아래와같은 추세로 나타난다.
- 집사이즈가 커질수록 집크기가 커지고있으니 이를 나타낼수있는 선을 그어보면 핑크색 선처럼 보일것이다.
- 이 직선은 집사이즈와 집가격에대한 상관관계를 잘 나타내주는 그래프이면서 일차방정식으로 표현이 될수있다.

../../assets/images/posts/2020-09-28-LinearRegression/Untitled.png
- 이 직선은 우리가 아는 일차방정식이자 일차함수와 같이 나타낼수있으며, 이를 우리는 중학교 수학과정에서 이렇게 배워왔다. (a는 직선의 기울기 b는 y절편. )
- 이 직선의 기울기와 y절편을 구해서 식을 도출할수있으면, x만 주어지면(즉 집사이즈만 주어지면) y를(즉 집가격을) 구할수 있게된다.
- 즉 예측이 가능해진다. 이 직선을 어떻게 도출하는걸까?
- 이 직선을 도출하는것을 우리가 계산해서 하는게 아니라, 알고리즘을 통해 컴퓨터가 학습하여 찾아내게 하는것이 머신러닝의 출발점이다.
- 앤드류 응 교수의 머신러닝 강의에서는 우리가 알고있는 이 일차함수, 일차방정식을 다음과 같이 나타내고있다. (표기방식만 다를 뿐 같은이야기다.)
- h는 Hypothesis. 즉 가설을 의미하고, a,b를 theta로 나타내고있다. 즉 우리는 컴퓨터가 이 theta를 찾게하는것이 목표이다.
⇒어떻게 theta를 찾을수있을까. ( How To Choose theta?)
Cost Function
- 우리는 이미 결과값을 알고있기때문에 실제결과 값과 알고리즘이 수행한 예측값을 비교해서 그 차이를 구할수있다. 그 차이(Cost)가 가장 작을수있는 theta값을 구하는것이 목적이된다.
- 실제결과값과 알고리즘이 수행한 예측값의 차이. 즉 Cost는 다음과 같이 나타낼수있다.
- 쉽게생각해서 i가 1일때 Cost는 다음과같다. (x1은 2104, y1은 460)
- 이렇게 구하는 cost를 모든 데이터셋의 상황에 대해 cost를 구하고 이를 다 더하면 총 cost를 구할수있다.
- 즉 이러한 식으로 나타낼수있다.
- m은 데이터셋의 갯수를 의미하며, 기존 cost식을 제곱한 이유는 cost 값이 음수(마이너스)가 될수있기때문에 이를 제곱하여 항상 양수가 되게 해준것이다. 이 총 cost의 합을 2m으로 나눠주면 평균값이 되는데, 머신러닝에서는 이 평균값을 최소화하는게 목표가 된다.
- 즉 이 모든것들을 종합해서 식으로 나타내면 다음과 같다.
- 식은 도출했는데, 그래서 저걸 어떻게 최소화해야하는걸까?
- 최소화방법을 소개하기전에 이 종합적인 Cost함수가 무엇을 의미하는지 알아보자.
- 지금까지 나온식들을 정리해보면 다음과같은데 theta 0 (즉 y절편)을 0이라고 생각하면 식이 좀 간단해진다. (Simplified). 이렇게되면 원점을 통과하는 직선의 방정식이 된다.
- 즉, y=AX가 되는것이다. (오른쪽)

../../assets/images/posts/2020-09-28-LinearRegression/Untitled%201.png
- 이때 이 기울기인 theta1이 1이라고 가정해보자. 즉 y=x가 된다.
- 우리가 예측한 함수가 y=x일때 실제 데이터셋도 (1,1),(2,2),(3,3)이었다고 가정해보자.
- (즉 완벽하게 실제값을 예측)

../../assets/images/posts/2020-09-28-LinearRegression/Untitled%202.png
- 그렇게되면 왼쪽 그래프의 직선(예측함수의 그래프)과 실제데이터(x로 표시된부분)이 일치하게된다.
- 이를 cost함수에 넣어서 오른쪽 그래프처럼 theta 1의 값에 따르는 J(theta1)의 그래프로 나타내면 theta가 1일때의 J(비용)은 0이된다.

../../assets/images/posts/2020-09-28-LinearRegression/Untitled%203.png
- 이를 theta1 값을 달리하면서 찍어보면 이렇게 2차함수 모양이 된다.
- 즉 우리는 이 이차함수에서 y값인 비용을 가장 줄이는 꼭지점의 theta1을 찾아야하는것이다.
- theta0 과 theta1을 동시에 비용함수와 함께 나타내면 3차원그래프가 된다. (아래그래프)

../../assets/images/posts/2020-09-28-LinearRegression/Untitled%204.png
- 이 3차원 그래프를 등고선 형태로 나타내면 다음과 같이 나타낼수있다.

../../assets/images/posts/2020-09-28-LinearRegression/Untitled%205.png
- 위의 그래프와같이(왼쪽) theta 0과 theta1을 가지는 h함수를 발견했다면 등고선의 중점과 먼곳을 알수있다. J의 중앙에서 멀게되는것이 비용이 높게되는것이다.
- 이렇게 우리는 이 비용함수의 최저점. 등고선의 중점이 되는곳을 찾아야한다. (학습을 통해)
Gradient Descent Algorithm
- 번역하면 경사하강알고리즘이라고하는 이 알고리즘은, Cost함수를 minmize하는 대표적인 알고리즘이다.
- 다양한 분야에서 범용적으로 사용되고있는 알고리즘인데, 3차원으로 비용함수를 그려보면, 이 알고리즘을 직관적으로 이해할수있다.

../../assets/images/posts/2020-09-28-LinearRegression/Untitled%206.png
- 이제까지의 배운것을 요약하면 다음과같다. 비용함수를 도출해서 이를 최소화하는 theta값을 구해야하는데, 이를위해 어느 theta값으로 시작해서 theta값을 조금씩 바꿔가면서 비용값을 줄여나간다.
- 이 줄여가는걸 반복해서 최소점에 도달하면되는것이다.

../../assets/images/posts/2020-09-28-LinearRegression/Untitled%207.png
- 3차원 그래프로 이를 나타나면 빨간색의 어느점을 선택해서 경사면을 따라 하강하여 최저점인 파란색점에 도달하는것이다. 이를 위해서 구체적으로 어떻게 해야할까.

../../assets/images/posts/2020-09-28-LinearRegression/Untitled%208.png
- 다시 theta1 과 이에대한 비용함수를 그린 2차함수로 생각해보자.
- 우리가 theta1을 핑크색점으로 일단 시작했다고해보자. 이때의 J(theta1)은 높은편이다.
- 이를 줄이기위해서는 (그래프상으로는) theta1의 값이 줄어들어야한다.
- 이차함수의 최저점은 우리가 알다시피 꼭지점이다. 그 꼭지점과 맞닿는 접선의 기울기는 몇일까?
- 고등학교나 대학교때 배운 미분이나 물리시간에 배운 순간가속도내용을 떠올려보자. 이때의 접선의 기울기는 0인데, 이 접선의 기울기는 해당함수를 미분한값이다.
- 즉 우리는 이 접선의 기울기가 0에 가까운순간으로 theta값을 바꿔가면 된다.
- 이를 위해 기존 theta값에다가 그 theta값의 접선의 기울기, 즉 비용함수를 미분한 값을 빼서 다시 theta값에치환해준다.
- 그런식으로 반복하다보면 핑크색점에서 녹색점으로 빨간점으로 점점 theta값이 감소해가면서 접선의 기울기는 0에가까워져갈것이다.
- 왜 미분한값을 빼주는가에 대한 의문이있을수있다. 이 의문에 대해서는 다음과 같이 설명할수있다.
