1. 선형회귀 사례
- 몸무게와 키 상관관계를 찾아내기
weights = [87,81,82,92,90,61,86,66,69,69]
heights = [187,174,179,192,188,160,179,168,168,174]
2. 선형회귀 이론
- 공통
- Y는 종속 변수, 결과 변수
- X는 독립 변수, 원인 변수, 설명 변수
- 통계학에서 사용하는 선형회귀 식 : $$ Y = \beta_0 + \beta_1X + \varepsilon $$
- β0 : 편향(Bias)
- β1 : 회귀 계수
- ε : 오차(에러), 모델이 설명하지 못하는 Y의 변동성
- 머신러닝/딥러닝에서 사용하는 선형회귀 식 : $$ Y = wX+b $$
- w: 가중치
- b: 편향(Bias)
두 수식이 전달하려고 하는 의미는 같아요. 회귀 계수 혹은 가중치를 값을 알면 X가 주어졌을 때 Y를 알 수 있다는 것이죠! 우리는 편의를 위해 X의 계수는 가중치라고 지칭할게요!
⁉️ 질문
Q1) β0는 1차 방정식의 Y절편에 해당하는 걸 알겠어요. 그런데 ε은 왜 따로 있는건가요?
- 우리가 몸무게와 키에 대한 선형회귀식을 만들었지만, 해당 식이 모든 데이터를 완벽하게 설명할 수 없어요. 이때 완벽한 설명이란 실제 데이터값 = 예측 데이터 이라고 할 수 있어요. 다시 말해 에러의 값을 표현하기 위해서 있는 것 입니다.
Q2) 가중치(w)를 알게 되면 X값에 대하여 Y값을 예측할 수 있다는 것은 이해가 되는데, 그럼 가중치는 어떻게 구하죠?
- 이런 물음이 들었다면 머신러닝을 관통하는 질문입니다. 데이터가 충분히 있다면 가중치를 “추정”할 수 있습니다. 이는 심화 내용에서 다루도록 할게요! 이 부분은 현재는 그래프를 수도 없이 그려서 에러를 “최소화”하는 직선을 구한다고 생각하시면 됩니다.
3. 회귀분석 평가 지표
1) 회귀평가지표 MSE
- 에러 정의방법
- 방법1) 에러 = 실제 데이터 - 예측 데이터 로 정의하기 : $$\varepsilon = y_i - \hat{y_i}$$
- 방법2) 에러를 제곱하여 모두 양수로 만들기, 다 합치기 : $$\sum\limits_{i=1}^n (y_i - \hat{y_i})^2$$
- 방법3) 데이터만큼 나누기 : $$\frac{\sum\limits_{i=1}^n (y_i - \hat{y_i})^2}{n}$$
2) 선형회귀만의 평가지표- R Square
- `R Square` : 전체 모형에서 회귀선으로 설명할 수 있는 정도
- 기초 용어
- $y_{i}$: 특정 데이터의 실제 값
- $\bar{y}$: 평균 값
- $\hat{y}$: 예측, 추정한 값
- R Square의 정의 : $$R^2 = \frac{SSR}{SST} = \frac{SSR}{SSR+SSE}$$
- 위에서 3번의 데이터 값은 $$ SST = 174^2, SSR = 169^2 $$
- 해당 값에 대한 설명력 = 94%
- 단, 모든 데이터에 대해서 위 계산을 수행
4. 선형회귀 적용
1) 라이브러리 설치하기
- 데이터 사이언스 파이썬 라이브러리
- `scikit-learn`: Python 머신러닝 라이브러리
- `numpy`: Python 고성능 수치 계산을 위한 라이브러리
- `pandas`: 테이블 형 데이터를 다룰 수 있는 라이브러리
- `matplotlib`: 대표적인 시각화 라이브러리, 그래프가 단순하고 설정 작업 많음
- `seaborn`: matplot기반의 고급 시각화 라이브러리, 상위 수준의 인터페이스를 제공
- 자주 쓰는 함수
- `sklearn.linear_model.LinearRegression` : 선형회귀 모델 클래스
- `coef_`: 회귀 계수
- `intercept`: 편향(bias)
- `fit`: 데이터 학습
- `predict`: 데이터 예측
- `sklearn.linear_model.LinearRegression` : 선형회귀 모델 클래스
5. 선형회귀 심화
1) 다중선형회귀
실제의 데이터들은 비선형적 관계를 가지는 경우가 많습니다. 이를 위해서 X변수를 추가 할 수도, 변형할 수 도 있습니다.
2) 범주형 데이터 사용하기
3) 선형회귀 정리
- 장점
- 직관적이며 이해하기 쉽다. X-Y관계를 정량화 할 수 있다.
- 모델이 빠르게 학습된다(가중치 계산이 빠르다)
- 단점
- X-Y간의 선형성 가정이 필요하다.
- 평가지표가 평균(mean)포함 하기에 이상치에 민감하다.
- 범주형 변수를 인코딩시 정보 손실이 일어난다.
- Python 패키지
- `sklearn.linear_model.LinearRegression`