Machine Learning/Advanced (hands on machine learning)

8. 모델훈련 - 다항 회귀

jwjwvison 2021. 5. 18. 21:35

 가지고 있는 데이터가 단순한 직선보다 복잡한 형태라면 어떨까? 비선형 데이터를 학습하는 데 선형 모델을 사용할 수 있다. 이렇게 하는 간단한 방법은 각 특성의 거듭제곱을 새로운 특성으로 추가하고, 이 확장된 특성을 포함한 데이터셋에 선형 모델을 훈련시키는 것이다. 이런 기법을 다항 회귀(polynominal regression)이라고 한다.

 

 먼저 간단한 2차방정식으로 비선형 데이터를 생성해보자.

m=100
X=6*np.random.rand(m,1) - 3
y=0.5 * X**2 + X + 2 + np.random.randn(m,1)

 

 직선은 이 데이터에 잘 맞지 않을 것이다. 그러므로 사이킷런의 PolynomialFeatures를 사용해 훈련 데이터를 변환해보자. 훈련 세트에 있는 각 특성을 제곱(2차 다항)하여 새로운 특성으로 추가한다. (여기서는 특성 하나가 추가된다)

from sklearn.preprocessing import PolynomialFeatures,StandardScaler
poly_features=PolynomialFeatures(degree=2,include_bias=False)
X_poly=poly_features.fit_transform(X)
X[0]

X_poly[0]

 X_poly는 이제 원래 특성 X와 이 특성의 제곱을 포함한다. 이 확장된 훈련 데이터에 LinearRegression을 적용해 보자.

lin_reg=LinearRegression()
lin_reg.fit(X_poly,y)
lin_reg.intercept_,lin_reg.coef_