[ML] Basic of Regression

TaeHwi Kang·2022년 12월 21일
0

1. Previous Story

1) 일반적인 문제해결 절차

2) 데이터를 기반 문제해결 절차

3) 모델 스스로 데이터를 기반으로 변화에 대응할 수 있다

4) 머신러닝을 통해 우리가 배울 수도 있다

5) 지도학습

(1) 분류 Classification

(2) 회귀 Regression

6) 비지도학습

- 비지도학습은 레이블이 없다

(1) 군집

(2) 차원 축소

7) ex_주택의 넓이과 가격이라는 데이터가 있고 주택가격을 예측

- 학습데이터 각각에 정답이 주어져 있으므로 지도학습이며, 주택가격을 연속된 값으로 예측하는 것이므로 회귀 문제이다

(1) 머신러닝 모델 만들기

- Hypothesis (가설 = 모델) hh를 어떻게 만들면 좋을까?

- 1차 함수라면

- 선형회귀

  • 입력변수(특징) x 가 하나인 경우, 선형회구 문제는 주어진학습데이터와 가장 잘 맞는 Hypothesis 함수 hh를 찾는 문제이다

(1) 모델을 구성하는 파라미터를 어떻게 찾을까?

  • 주어진 학습데이터 에 대해 정답 yiy^i와 예측값 h(xi)h(x^i)의 차이가 최소가 되게 파라미터를 θ0θ_0θ1θ_1의 값을 결정하면 어떻게 될까?

2. OLS : Ordinary Linear Least Square

  • 아래와 같은 데이터를 하나의 직선으로 만든다면

1) a, b 구하는 방법

  • 데이터를 모두 직선에 대입
    - 찾고 싶은건 a와 b

  • 문제를 벡터와 행렬로 표현

  • 행렬로 정리

  • xx를 찾을 수 있다

2) a,ba, b 구하기

3) 모델 성능 평가

  • 𝐸=[𝑦𝑓(𝑥)]2𝐸=[𝑦−𝑓(𝑥)]^2 의 합
  • 결과

3. OLS 실습

  • X=(ATA)1ATYX = (A^TA)^{-1} A^T Y

  • 모델 평가 : E=[yf(x)]2E = [y - f(x)]^2 의 합

1) 데이터 만들기

import pandas as pd 

data = {'x' : [1,2,3,4,5],'y':[1,3,4,6,5]}
df = pd.DataFrame(data)
df

	x	y
0	1	1
1	2	3
2	3	4
3	4	6
4	5	5

2) 가설 세우기

import statsmodels.formula.api as smf

# "y ~ x" -> y = ax + b
lm_model = smf.ols(formula="y ~ x", data = df).fit()

3) 결과

lm_model.params

# Intercept -> 절편, x -> 기울기
Intercept    0.5
x            1.1
dtype: float64

4) seaborn을 이용해서 plot

import matplotlib.pyplot as plt
import seaborn as sns

sns.lmplot(x='x',y='y',data=df)

plt.show();

4. 잔차평가 residue

  • 구한 그래프 값과 실제값의 차이
  • 잔차는 평균이 0인 정규분포를 따르는 것이여야함
  • 잔차 평가는 잔차의 평균이 0이고 정규분포를 따르는 지 확인하는것
resid = lm_model.resid

# 잔차 확인
0   -0.6
1    0.3
2    0.2
3    1.1
4   -1.0
dtype: float64

5. 결정계수 R-Squared

  • Rsquared:ssR/ssTR-squared : ssR / ssT
  • y_hat은 예측된 값
  • 예측 값과 실제 값(y)이 일치하면 결정계수는 1이 됨 (즉 결정계수가 높을 수록 좋은 모델)
# numpy로 직접 결정계수 계산
import numpy as np

mu = np.mean(df.y)
y = df.y
yhat = lm_model.predict()

np.sum((yhat - mu)**2 / np.sum((y - mu)**2))

# 0.8175675675675671
# 간단하게 구할 수도 있다
lm_model.rsquared

# 0.8175675675675677
profile
스터디 노트

0개의 댓글