91일차 시작.... (다항 회귀)

조동현·2022년 11월 17일
0

[교육] Python ML

목록 보기
5/17
post-thumbnail

📊 다항 회귀모델


📌 다항 회귀란?

  • 정의
    - 데이터의 분포가 선형 패턴을 그리는 것이 아닌 비선형 패턴을 그리는 상황에서 사용
    - 기존 1차항 형태를 띈 데이터를 2차항 이상의 다항 형태로 띄게 만들어 학습시키는 방법


📌 단순 선형회귀 전개

  • 1. 라이브러리 Import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

  • 2. 데이터 준비
x = np.array([1,2,3,4,5])
y = np.array([4,2,1,3,7])

  • 3. 상관관계 분석
print(np.corrcoef(x, y))
# [[1.         0.48076197]
#  [0.48076197 1.        ]]

  • 4. 상관관계 그래프 그리기
plt.scatter(x, y)
plt.show()
# -> 데이터가 비선형 패턴을 그린다.


  • 5. 단순 선형회귀 모델 생성
model = LinearRegression()
model.fit(x.reshape(-1, 1), y)

  • 6. 예측값, 실제값 비교
y_pred = model.predict(x.reshape(-1, 1))
print(y_pred.round(0).astype(int))
print(y)
# [2 3 3 4 5]
# [4 2 1 3 7]
# -> 예측 성능이 좋지 않음

  • 7. 상관 그래프에 1차식 회귀선 그리기
plt.scatter(x, y)
plt.plot(x, y_pred)
plt.show()
# -> 표준오차가 너무 크다.
# -> 결정계수가 너무 작아진다.



📌 다항 회귀 전개

  • 1. 필요 라이브러리
# 1. 필요 라이브러리
from sklearn.preprocessing import PolynomialFeatures

  • 2. 특징행렬 생성 : 1차항 feature를 다항 feature로 만들기
# degree = 열 개수
poly = PolynomialFeatures(degree=2, include_bias=False)
x2 = poly.fit_transform(x.reshape(-1, 1))   # sklearn 모델이므로 2차원 Matrix로 준다.
print(x2)
# [[ 1.  1.]
#  [ 2.  4.]
#  [ 3.  9.]
#  [ 4. 16.]
#  [ 5. 25.]]

  • 3. 모델 생성
model = LinearRegression()
model.fit(x2, y)

  • 4. 예측값, 실제값 비교
y_pred = model.predict(x2)
print(y_pred.round(0).astype(int))
print(y)
# [4 2 1 3 7]
# [4 2 1 3 7]

  • 5. 상관 그래프에 다항 회귀선 그리기
plt.scatter(x, y)
plt.plot(x, y_pred, c='g')
plt.show()



profile
데이터 사이언티스트를 목표로 하는 개발자

0개의 댓글