코딩하는 오리

[ML] 기본 지도 학습 알고리즘들 - 3. 다항 회귀 (Polynomial Regression) 본문

AI/ML

[ML] 기본 지도 학습 알고리즘들 - 3. 다항 회귀 (Polynomial Regression)

jooeun 2024. 7. 30. 13:14

01. 다항 회귀

 

직선보다는 곡선이 더 가설함수가 정확할 수 있다.

데이터에 잘 맞는 곡선이 이차함수, 삼차함수 등등 다양

차수가 많을 수록 굴곡이 많은 곡선.

 

다항식 등 데이터에 잘 맞는 곡선을 찾는 것을 다항 회귀

 

03. 단일 속성 다항 회귀

 

다항 회귀도 2가지로 나뉨

1. 속성 1개

2. 속성 여러 개 (다중 다항 회귀)

 

 

사실 다중 선형 회귀와 비슷하게 생김

 

 

 

05. 다중 다항 회귀

 

2차 함수일 때 2차항과 가설함수 모양

 

동일하게 다항 회귀 처럼, 입력 변수가 9개인 다중 선형 회귀와 동일하게 취급 가능

 

 

07. 다항 회귀의 힘

 

다항 회귀를 사용하면 단순히 복잡한 고차식에 데이터를 맞추는 거를 넘어서 어떻게 모델의 성능을 극대화할 수 있는지

 

ex) 집 높이, 집 너비의 2가지 데이터 

아무리 너미가 커도 높이가 작거나, 높이만 크고 너비만 작으면 크기가 작고 구조가 효율적이지 X -> 집값 높지 않다이 두 변수들 보다 집값을 예측하는데 더 좋은 수치는 이 둘을 곱한 값, 집의 넓이이다.

 

단순 선형 회귀를 사용하면 이 두 변수가 독립적이기 때문에, 

높이와 너비가 같이 커야지만 집값도 커진다라는 관계를 학습할 수 없다 !

높이, 너비 속성이 미치는 영향을 따로 찾아낸다.

 

추가적으로 집이 아무리 커도 높은 층이 아니거나, 집하철에서 아무리 가까워도 지은지 20년이 넘으면 집 값이 낮을 수 있다. 이런 경우에도 단순 선형회귀를 쓰면 속성 하나하나가 다 독립적이기 때문에 이런 변수들 사이의 관계를 최종 예측 결과에 반영하지 못한다.

 

따라서 속성을 서로 곱해 차항을 높여주면(선형 회귀 문제를 다항 회귀 문제로 만들면) 속성 사이에 있는 복잡한 관계를 프로그램에 학습시킬 수 있다 !

 

 

 

08. scikit-learn으로 다항 회귀 문제 만들기

 

boston_dataset.data.shape  : (506,13)

boston_dataset.feature_names 

 

이번에는 다항 회귀를 하므로 바로 데이터를 판다스 데이터프레임에 넣지 않고, 가상 열을 추가 후 넣자

 

import sklearn.preprocessing import PolynomialFeatures (다항 속성을 만들어주는 툴)

 

polynomial_transformer = PolynomialFeatures(2)

polynomial_data = polynomial_transformer.fit_transform(boston_dataset.data)

 

polynomial_data.shape : (506, 105)

polynomial_feature_names = polynomail_transformer.get_feature_names(boston_dataset.feature_names) 

가능한 모든 2차 조합의 열들이 추가된 형태

 

X = pd.DataFrame(polynomial_data, column = polynomial_feature_names)

 

 

09. scikit-learn으로 다항 회귀 하기

나머지 동일

 

mean_squared_error(y_test, y_test_prediction) ** 0.5

오차 약 3200 달러 (다중 선형 회귀 4600 보다 더 낫다)