가지고 있는 데이터가 단순한 직선보다 복잡한 형태라면 어떨까? 비선형 데이터를 학습하는 데 선형 모델을 사용할 수 있다. 이렇게 하는 간단한 방법은 각 특성의 거듭제곱을 새로운 특성으로 추가하고, 이 확장된 특성을 포함한 데이터셋에 선형 모델을 훈련시키는 것이다. 이런 기법을 다항 회귀(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_
'Machine Learning > Advanced (hands on machine learning)' 카테고리의 다른 글
10. 모델훈련 - 규제가 있는 선형 모델 (0) | 2021.05.19 |
---|---|
9. 모델 훈련 - 학습 곡선 (0) | 2021.05.18 |
7. 모델훈련 - 경사하강법 (0) | 2021.05.18 |
6. 모델훈련 - 선형 회귀 (0) | 2021.05.18 |
5. 머신러닝 프로젝트 - 머신러닝 알고리즘을 위한 데이터 준비 (0) | 2021.05.17 |