🙄 다항 회귀
➡ 다항 회귀 (Polynomial Regression)
- 일차 함수나 직선을 구하는 게 아니라 다항식이나 곡선을 구해서 학습하는 것
- 함수의 차수가 더 높을수록 굴곡이 많은 곡선
- 데이터를 보고 적합할 것 같은 모양을 골라야 함
- 목표는 선형 회귀랑 마찬가지로, 학습 데이터에 가장 잘 맞는 θ값을 찾아내는 것
- 2차항 회귀 가설 함수 : hθ(x)=θ0+θ1x+θ2x2
- 3차항 회귀 가설 함수 : hθ(x)=θ0+θ1x+θ2x2+θ3x3
➡ 단일 속성 다항 회귀
- 속성이 하나인 다항 회귀
- 3차항 회귀의 경우 단일 속성2, 단일 속성3 데이터로 다중 선형 회귀를 하는 것과 같음
➡ 다중 다항 회귀
- 입력 변수가 x1,x2,x3 총 3개, 가설 함수가 이차 함수일 때 3개의 변수로 가능한 모든 이차항은
x1x2, x2x3, x3x1, (x1)2, (x2)2, (x3)2 으로 총 6개
- 가설 함수는 아래와 같음
hθ(x)=θ0+θ1x1+θ2x2+θ3x3+θ4x1x2+θ5x1x3+θ6x2x3+θ7(x1)2+θ8(x2)2+θ9(x3)2
- 다항 회귀가 아닌 다중 선형 회귀 취급하고 문제 해결
➡ 다항 회귀의 힘
- 다항 회귀를 사용하면 복잡한 고차식에 데이터를 맞추는 것을 넘어 모델 성능을 극대화할 수 있음
- 속성들을 곱해서 차항을 높여주면, 선형 회귀 문제를 다항 회귀 문제로 만들어주면
속성들 사이에 있을 수 있는 복잡한 관계들을 프로그램에 학습시킬 수 있음
- 단순 선형 회귀를 쓰면 속성 하나하나가 다 독립적이기 때문에 이런 변수들 사이의 관계를 최종 예측 결과에 반영하지 못함
➡ scikit-learn으로 다항 회귀
from sklearn import datasets
from sklearn.preprocessing import PolynomialFeatures
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import pandas as pd
diabetes_dataset = datasets.load_diabetes()
polynomial_transformer = PolynomialFeatures(2)
polynomial_data = polynomial_transformer.fit_transform(diabetes_dataset.data)
polynomial_feature_names = polynomial_transformer.get_feature_names(diabetes_dataset.feature_names)
X = pd.DataFrame(polynomial_data, columns = polynomial_feature_names)
y = pd.DataFrame(diabetes_dataset.target, columns=['diabetes'])
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 5)
model = LinearRegression()
model.fit(x_train, y_train)
y_test_predict = model.predict(x_test)
mse = mean_squared_error(y_test, y_test_predict)
mse ** 0.5