MLDL
다항 회귀
DEVDAE828
2022. 2. 8. 17:19
선형 회귀를 사용해서 찾은 직선은 입력 변수와 목표 변수의 관계를 잘 나타내지 못하고 있다.
곡선을 사용해서 더 나은 함수를 찾았다.
곡선은 1차 함수인 직선과 다르게 2차 함수이다. 아래는 2차 함수 식이다.
함수가 높아질수록 굴곡이 많은 곡선이 되고 이런식으로 데이터에 잘 맞는 일차 함수나 직선이 아닌 다항식이나 곡선을 수하는걸 다항 회귀 영어로는 polynomial regression이라고 한다.
다항 회귀는 다중 선형 회귀와 매우 비슷하다. 다음 식은 위에는 다항 회귀 밑은 다중 선형 회귀이다.
이 테이블에 가상의 열 두개를 추가한다. 크기를 제곱한 열과 세제곱한 열이다.
그러면 이 데이터를 입력 변수가 3개인 것처럼 취급해 다중 선형 회귀를 하면 된다.
이것은 입력변수가 하나일때 하는 방법이다.
이번에는 입력변수가 여려개 있을때 하는방법을 보겠다.
이차 함수라는 가정하에 크기 방 수 지하철까지의 거리 이 3개의 변수로 가능한 모든 이차항을 만든다.
그러면 이 문제를 입력 변수가 9개인 다중 선형 회귀라고 생각하고 문제를 풀면 된다.
속성들을 서로 곱해서 차항을 높여주면, 그러니까 선형 회귀 문제를 다항 회귀 문제로 만들어주면 속성들 사이에 있을 수 있는 복잡한 관계들을 프로그램에 학습시킬 수 있다.
다항 회귀로 당뇨병 예측하기 (코드)
# 필요한 라이브러리 import
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_featurenames = polynomial_transformer.get_feature_names(diabetes_dataset.feature_names)
X = pd.DataFrame(polynomial_data, columns=polynomial_featurenames)
X.head()
# 목표 변수
y = pd.DataFrame(diabetes_dataset.target, columns=['diabetes'])
model = LinearRegression()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=5)
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