티스토리 뷰
Simple Linear Regression이란 말그대로 간단한 Linear Regression, 즉 어떤 dataset 내에서의 어떤 특성을 Linear로 표현하는 과정을 말한다. 다르게 표현하면 data간의 trend line을 긋는다고 표현하기도 한다. 일반적으로 다음과 같은 수식으로 표현하곤 한다.
간단한 선형 방정식인데 여기서 Linear Regression이라고 하는 것은 y와 x_1간의 관계를 찾는 과정이 된다. 그래서 주어진 dataset에서는 x_1의 변화에 따라 y값이 어떻게 변화하는지를 파악하고, 그 와중에 b_0와 b_1이 끼치는 영향을 찾아야 한다. 그래서 y는 x_1의 변화에 따라 변하는 값이라 하여 Dependent Variable(DV)라고 하고, x_1은 Independent Variable(IV) 이라고 한다. 그리고 b_1은 Coefficient(계수)인데 Dependent Variable과 Independent Variable 사이의 관계를 비율(proportion)로 표현하는 값이 된다. b_0는 Constant(상수)인데 보통 Linear Regression의 Reset Value(초기값)을 말한다. 이 모든 요소가 Linear Regression을 구성하는 요소가 된다. 간단하게
- Dependent Variable(DV)
- Independent Variable(IV)
- Coefficient
- Constant
라는 요소로 보면 좋을 거 같다. 이를 보통 잘 묘사한 하나의 예제를 잠깐 살펴보고자 한다.
위는 근속년수와 연봉과의 상관관계를 나타낸 CSV 파일이다. (물론 요새 세상에 이런식으로 연차에 따라 연봉이 결정되는 케이스는 거의 없겠지만....) 위와 같은 데이터에서는 우선 근속년수만 고려했을때 연봉이 어떻게 변하는지를 Simple Linear Regression으로 푸는 것을 다뤄보고자 한다. 대충 위의 데이터를 어느정도 도식화하면 다음과 같이 된다.
뭔지는 모르겠지만 대충 연봉이 근속년수에 비례하는 것을 감으로나마 알 수 있다. 앞에서 언급한 선형 방정식에 대입해보면,
Salary = b_0 + b_1 * Experience
라는 공식을 얻게 되고 그림상으로는
라는 직선을 구하는게 Linear Regression의 목적이 되겠다.(강의에서는 이런 과정을 fitting the line이라고 소개하고 있다.) 당연히 주어진 결과들이 모두 이 직선에 일치하지는 않겠지만, 그래도 적어도 최소한의 오차가 나오게끔 만들어 임의의 연차가 들어온다고 한들 그 사람의 연봉을 예상할 수 있게끔 하자는 것이다. 참고로 위의 직선을 조금더 보면 b_0는 당연히 근속년수가 0일때의 연봉이 될 것이고, b_1은 Experience가 변하면서 연봉의 변화폭, 기울기 정도로 이해하면 좋을 것 같다.
그러면 어떻게 하면 오차를 최소화한 line을 얻을 수 있을까. 그러면 여기서 어떤 것을 오차라고 봐야 하는지를 살펴봐야 한다.
앞에서 언급한 것과 같이 빨간색 값은 위의 dataset에서 얻어낸 값(observed value: y)이고, 검정색 선상의 값은 line으로부터 추론된 값(modeled value:)이 될텐데, 두 값간의 차이가 결국 오차라고 보면 된다. 단, 지금 보는 것처럼 빨간색 값이 검정 선 위에 있는 것도 있고, 아래 있는 것도 있기 때문에 단순히 y값의 차이로만 오차로 판단하면 오차가 양수가 될수도 있고, 음수가 될수도 있다. 이런 경우를 막기 위해서 오차의 계산을 y값 차이에 대한 제곱((y - )^2)을 이용한다. 결국 오차를 최소화한다는 말은 위의 그림에서 표시된 초록색 선들의 총합이 작아지게끔 한다는 말과 동일한 것이다. (강의에서는 Minimum sum of squared value 라는 말로 표현하고 있다.) 이렇게 오차를 최소화시키는 방법을 통계학적으로는 Ordinary Least Squares (OLS : 최소자승법) 이라고 말한다.
출처 : Machine Learning A-Z : Simple Linear Regression Intuition - Step 1 & 2
'Study > AI' 카테고리의 다른 글
[ML] Simple Linear Regression - Implementation (0) | 2018.01.11 |
---|---|
[ML] Spyder내에서 plot을 new window에 하기 (1) | 2018.01.11 |
[ML] train_test_split 함수 사용시 DeprecationWarning 없애기 (0) | 2018.01.10 |
[ML] Categorical Variable을 수치화시키기 (2) | 2017.12.26 |
[ML] Data내에서 NaN 데이터 처리하기 (0) | 2017.12.25 |
[Python] Cartopy install 및 실행 (0) | 2017.05.30 |
[ML] KNN 구현해보기 - Finding Nearest Neighbors (2) | 2017.05.23 |
- Total
- Today
- Yesterday
- Gan
- processing
- End-To-End
- Expression Blend 4
- Variance
- PowerPoint
- Kinect
- Kinect for windows
- Pipeline
- arduino
- 파이썬
- Policy Gradient
- Offline RL
- Windows Phone 7
- SketchFlow
- ai
- Kinect SDK
- ColorStream
- RL
- windows 8
- 강화학습
- 딥러닝
- DepthStream
- dynamic programming
- Distribution
- Off-policy
- 한빛미디어
- TensorFlow Lite
- reward
- bias
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |