AI/MachineLearning

다항 회귀 모델 구현

향식이 2021. 6. 4. 09:38

다항 회귀란? 

Y를 X에 대한 임의의 다항 함수로 모델링하는 선형 회귀를 의미합니다.

 

다항 회귀는 먼저 입력 데이터 X에 대한 전처리를 진행해준 후 다중 선형 회귀를 적용함으로써 구현됩니다.

사이킷런을 이용하면 입력 데이터에 대한 전처리를 편리하게 진행할 수 있습니다.

 

다항 회귀를 위한 사이킷런 함수/라이브러리

  • PolynomialFeatures(degree, include_bias) : Polynomial 객체를 생성합니다.
  • degree : 만들어줄 다항식의 차수를 의미합니다.
  • include_bias : 편향 변수의 추가 여부를 설정합니다. (True/False) True로 설정하게 되면, 해당 다항식의 모든 거듭제곱이 0일 경우 편향 변수를 추가합니다. 이는 회귀식에서 베타0와 같은 역할을 합니다. 
  • [PolynomialFeatures].fit_transform(X) : 데이터 X와 X의 degree제곱을 추가한 데이터를 반환합니다.
  • fit(X)와 transform(X)을 각각 분리해서 진행하는 것도 가능합니다. 
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

def load_data():
    
    np.random.seed(0)
    
    X = 3*np.random.rand(50, 1) + 1
    y = X**2 + X + 2 +5*np.random.rand(50,1)
    
    return X, y
    
def Polynomial_transform(X):
    
    poly_feat = PolynomialFeatures(degree=2, include_bias=True)
    
    poly_X = poly_feat.fit_transform(X)
    
    print("변환 이후 X 데이터\n",poly_X[:3])
    
    return poly_X
    
def Multi_Regression(poly_x, y):
    
    multilinear = LinearRegression()
    
    multilinear.fit(poly_x, y)
    
    return multilinear
    
    
# 그래프를 시각화하는 함수
def plotting_graph(x,y,predicted):
    fig = plt.figure()
    plt.scatter(x, y)
    
    plt.scatter(x, predicted,c='r')
    plt.savefig("test.png")
    elice_utils.send_image("test.png")
    
def main():
    
    X,y = load_data()
    
    poly_x = Polynomial_transform(X)
    
    linear_model = Multi_Regression(poly_x,y)
    
    # 전체 데이터를 넣어줌
    predicted = linear_model.predict(poly_x)
    
    plotting_graph(X,y,predicted)
    
    return predicted
    
if __name__=="__main__":
    main()

출처: 앨리스 교육

반응형