[ML/DL] 선형회귀 (Linear Regression)

2022. 1. 18. 18:36·Minding's Programming/Knowledge
728x90
반응형

인프런에서 무료강의 이벤트를 한다고 하여 여러 가지 강의를 들을 수 있게 되었다.

그 중 '머신러닝 처음 시작하기' 라는 강의를 들으면서 예전에 배웠던 내용들을 다시 한 번 복습하고자 한다.

강의내용만을 공부하기 보다는 스스로 찾아보고 학습하며 개념을 확실히 깨우치는 것이 목표이다.

 

[딥 러닝을 이용한 자연어 처리 입문]을 주로 참고했다.

https://wikidocs.net/21670

 

03) 선형 회귀(Linear Regression)

딥 러닝을 이해하기 위해서는 선형 회귀(Linear Regression)와 로지스틱 회귀(Logsitic Regression)를 이해할 필요가 있습니다. 이번 챕터에서는 머 ...

wikidocs.net

 


선형 회귀

출처 : 위키백과 [선형 회귀]

  • 선형회귀는 주어진 데이터로부터 x(독립변수)와 y(종속변수)의 관계를 가장 잘 나타내는 직선을 그리는 것
    • 독립변수 : 다른 변수의 값을 변하게 하는 변수
    • 종속변수 : 다른 변수에 의해서 값이 종속적으로 변하는 변수

 

단순 선형 회귀 (Simple Linear Regression Anlaysis)

단순선형회귀수식

 

  • 독립변수 x가 하나일 때 사용하는 회귀분석
  • w는 가중치(weight), b는 편향(bias)
    • (직선의 방정식에서) 가중치는 직선의 기울기, 편향은 절편을 의미함

 

다중 선형 회귀 (Multiple Linear Regression Anlaysis)

다중선형회귀 수식

 

  • 독립변수 x, 즉 Input이 여러개일 때 사용하는 회귀분석
  • 다중선형회귀에서 변수를 선택하는 방식
    • 전진선택법 : 상수모형으로부터 시작하여 중요순위를 정해 차례대로 모델에 변수를 추가
    • 후진제거법 : 가장 덜 영향을 준다고 생각하는 변수를 전체에서 1개씩 제거

 

 

선형 회귀의 가설(Hypothesis)

일반적인 선형회귀 수식

  • H(Hypothesis) : x와 y의 관계를 유추하기 위한 가설을 세운 것이므로 H로 표기
  • 선형회귀의 목적은 x와 y의 관계를 가장 잘 나타내는 직선을 그리는 일
    • 즉, 적절한 w(기울기)와 b(절편)을 찾아내는 일

 

 

비용함수(Cost function) - 평균제곱오차 (Mean Sqaured Error, MSE)

  • 비용함수 : w와 b를 찾기 위해서 실제값과 가설로부터 얻은 예측값의 오차를 계산하는 식
  • 비용함수 식의 값을 최소화하는 최적의 w와 b를 찾아내는 것이 머신러닝의 목표
  • 회귀 문제의 경우에는 주로 평균제곱오차(MSE)를 사용함
    • 오차는 각 x에서 실제값 y와 직선 상의 H(x)값의 차이를 말함
    • 오차를 단순히 더하면 양수/음수값이 섞여 오차의 절대적인 크기를 알 수 없음
    • 그렇기 때문에, 오차를 제곱하여 더하는 방법을 사용
    • 이를 데이터의 개수인 n으로 나누면 오차의 제곱합에 대한 평균을 구할 수 있음

평균제곱오차를 w와 b에 대한 비용함수로 재정의

  • 모든 점들과 오차가 클수록 MSE는 커지고, 오차가 작을수록 MSE는 작아짐
    • 즉, 비용함수를 최소화시키는 w와 b를 찾으면 데이터 관계를 가장 잘나타내는 직선 표현가능

 

 

옵티마이저(Optimizer) - 경사하강법 (Gradient Descent)

  • 옵티마이저 : 비용함수를 최소화시키는 w와 b를 찾는 알고리즘
  • 옵티마이저를 통해 적절한 w와 b를 찾는 과정을 학습(또는 훈련)이라고 함
  • 경사하강법은 가장 기본적인 옵티마이저

w와 cost(비용함수)의 관계를 그래프로 표현한 그림

  • 머신러닝의 목표는 맨 아래 부분의 w(와 b)값을 찾는 것
  • 경사하강법은 한 점에서의 순간변화율 (접선에서의 기울기) 개념을 사용하여 값을 수정
    • 접선의 기울기가 낮은 방향으로 w의 값을 변경하고, 다시 미분하기를 반복하며 학습
    • 접선의 기울기가 0이 되는 지점이 cost가 최소화 되는 지점

 

경사하강법 수식

  • 현재 w에서의 접선의 기울기와 alpha(학습률)를 곱한 값을 현재 w에서 빼서 새로운 w로 대체한다는 뜻

접선의 기울기가 음수일 때 / 0일 때 / 양수일 때

  • 기울기가 음수일 때, w값은 증가하게 됨 --> 접선의 기울기가 0인 방향으로 w값이 조정
    • 기울기가 음수라면, w-(-기울기) = w + 기울기 이므로
  • 기울기가 양수일 때, w값은 감소하게 됨 --> 접선의 기울기가 0인 방향으로 w값이 조정
  • 경사하강법 수식은 기울기가 양수/음수일 때 모두 접선의 기울기가 0인 방향으로 w를 조정함
  • b(bias)를 구하는 방식도 w를 구하는 방식과 같음 (b에 대해 편미분하여 경사하강법 적용)

 

학습률 (learning rate)

  • 학습률(lr)은 w의 값을 변경할 때 얼마나 크게 변경할지 결정 (0~1 사잇값을 가짐)
  • 학습률이 지나치게 높으면 w의 값이 발산되어 최소값을 찾을 수 없음

학습률을 지나치게 높게 설정했을 때

  • 학습률이 지나치게 낮으면 학습속도가 느려지는 현상이 나타남
  • 적절한 학습률 설정하는 것 또한 중요

 

 

선형회귀 모델 구현 실습

import numpy as np

# input이 하나인 선형회귀
height = np.array([183,150, 180, 190, 167, 177])
height = height.reshape(-1,1) # 2차원 값이 들어가야 하므로 2차원으로 reshape
math = np.array([85, 45, 80, 99, 45, 75])

# scikit learn에 있는 선형회귀모델 사용
from sklearn.linear_model import LinearRegression
line_filter = LinearRegression()

# x, y값 넣어줌
line_filter.fit(height, math)

# height값을 가지고 math를 예측한다는 뜻
score_predict = line_filter.predict(height)

# matplotlib을 이용하여 선형회귀식 나타냄
import matplotlib.pyplot as plt
plt.plot(height, math, 'x')
plt.plot(height, score_predict)
plt.show()

# 기울기와 절편 출력
print(line_filter.coef_)
print(line_filter.intercept_)

>>>
[1.43659871]
-179.18647439085035
# 성능 평가 (MSE 이용)
from sklearn.metrics import mean_squared_error

print("Mean Squared Error : ", mean_squared_error(score_predict, math))


>>>
Mean Squared Error :  58.722194596386494
# RMSE 이용 (Root MSE)
print("RMSE : ", mean_squared_error(score_predict, math)**0.5)

>>>
RMSE :  7.663040819177887
# 스코어 출력 (종속변수와 독립변수의 상관도가 높을수록 높은 점수)
print('score : ', line_filter.score(height, math))

>>>
score :  0.8548576034692816
728x90

'Minding's Programming > Knowledge' 카테고리의 다른 글

[ChatGPT] ChatGPT에게 여행일정을 짜달라고 해보았다.  (0) 2023.02.05
[ML / DL] KNN (K-Nearest-Neighbor, K-최근접 이웃)  (0) 2022.01.25
[ML/DL] 랜덤포레스트(Random Forest) & 앙상블(Ensemble)  (0) 2022.01.23
[ML / DL] 의사결정나무 (Decision Tree)  (0) 2022.01.20
[ML/DL] 로지스틱 회귀 (Logistic Regression)  (0) 2022.01.19
'Minding's Programming/Knowledge' 카테고리의 다른 글
  • [ML / DL] KNN (K-Nearest-Neighbor, K-최근접 이웃)
  • [ML/DL] 랜덤포레스트(Random Forest) & 앙상블(Ensemble)
  • [ML / DL] 의사결정나무 (Decision Tree)
  • [ML/DL] 로지스틱 회귀 (Logistic Regression)
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    칼만필터는어렵지않아파이썬
    pygame
    칼만필터는어렵지않아python
    AWS
    django
    MLB
    파이썬게임개발
    칼만필터는어렵지않아
    mlb stats api
    게임개발
    데이터분석
    파이썬
    에어플로우
    Airflow
    머신러닝
    야구
    데이터 엔지니어
    django python
    KalmanFilter
    Python
    메이저리그
    FastAPI
    질롱코리아
    코딩테스트
    프로그래머스
    파이게임
    넘파이
    딥러닝
    칼만필터
    KBO
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[ML/DL] 선형회귀 (Linear Regression)
상단으로

티스토리툴바