Polynomial Features와 OOF 뜻

행동하는 개발자·2023년 9월 25일

TimeSeries

목록 보기
1/8

'PolynomialFeatures'는 사이킷런 라이브러리의 클래스로, 기능들 사이의 가능한 모든 다항식 항을 생성하는데 사용된다. 이는 원래 특성의 비선형 관계를 캡처하고 모델의 복잡성을 높이는데 도움이 될 수 있다.

기본원리

  1. 각 특성의 거듭제곱을 추가한다.
  2. 각 특성 쌍의 곱을 추가한다.

만약 입력샘플이 두 개의 특성 a,b를 가지고 있고, PolynomialFeatures(2)를 사용한다면, 출력은 1,a,b,a^2, ab, b^2가 된다.

PolynomialFeatures(3)을 사용한다면, 입력이 a,b일 때 출력은 1,a,b,a^2,ab,b^2,a^3,a^2b,ab^2,b^3이 된다.

그러나 주의할 점은 특성의 수가 많아지면 모델이 과적합(모델이 훈련 데이터에 너무 잘 맞아서 새로운 데이터에 대한 일반화 성능이 떨어지는 현상)이 되기 쉬워진다. 이런 문제를 방지하기 위해 규제를 사용하거나, 다항식의 차수를 줄이는 등의 방법을 사용할 수 있다.

확장

PolynomialFeatures(degree=3)를 사용하여 특성을 확장할 때, 원래 3개의 특성 (a, b, c)에 대해서는 다음과 같이 다항식 특성이 생성됩니다:

1차항: a, b, c (3개)
2차항: a^2, b^2, c^2, ab, ac, bc (6개)
3차항: a^3, b^3, c^3, a^2b, a^2c, ab^2, ac^2, b^2c, bc^2, abc (10개)
상수항: 1 (1개)

OOF(Out-Of-Fold)

k-fold cross validation은 전체 데이터의 k개의 부분집합으로 나누고, 이 중 하나의 fold를 테스트 세트로, 나머지를 학습 세트로 사용하여 모델을 학습 및 평가하는 방법이다. 이 과정을 k번 반복하여 모든 fold가 한 번씩 테스트 세트가 되도록 한다. 이렇게 각 반복에서 얻은 예측값과 실제 값의 차이를 기반으로 모델의 성능을 평가하게 되는데, 이 때 사용되는 예측값들이 바로 OOF 예측값이다.

출처: https://www.inflearn.com/questions/30592/oof-%EC%A7%88%EB%AC%B8-%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4

주의할 점

ValueError: The feature names should match those that were passed during fit.
Feature names must be in the same order as they were in fit.

모델을 학습시킨 데이터의 특성 순서와 예측하려는 특성 순서가 일치하지 않을 때에도 오류가 발생한다. 그러할 때, 위와 같은 오류가 발생한다.

해결방법

val_data = val_data.reindex(columns = X.columns)

다음과 같은 방법으로 X.columns에 명시된 순서대로 'val_data'의 열을 재정렬할 수 있다.

profile
끊임없이 뭔가를 남기는 사람

0개의 댓글