Programing/Python programming
Sklearn - PolynomialFeatures
sosal
2023. 5. 1. 16:58
반응형
Feature Engineering은 데이터의 전처리를 통해 머신러닝 모델의 성능을 향상시키는 방법입니다.
PolynomialFeatures 는 주어진 입력값을 기반으로, 고차항들을 추가하는 방법입니다.
scikit-learn의 패키지에서 이 기능을 제공하며, 단순한 선형모델을 활용한다는 가정 하에 보다 복잡한 다항식 모델로 변환시킬 수 있기 때문에, 입력값이 적고 비선형 데이터에 대한 모델링을 수행할 때 효과적입니다.
- 기본 사용 방법
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2, include_bias=False)
poly.fit_transform(pd.DataFrame([3, 6, 9]))
array([[ 3., 9.],
[ 6., 36.],
[ 9., 81.]])
말그대로 PolynomialFeatures 함수는 degree에 따른 새로운 차원의 데이터를 만들어 줍니다.
변수 하나가 3, 6 ,9 가 있다면, 그대로 2제곱 하여 9, 36, 81을 만들어 냅니다.
이처럼 매우 단순한 feature engineering 방법입니다.
- 임의의 변수 X, Y 생성 (Y는 X의 다항식으로 표현되는)
import numpy as np
import pandas as pd
np.random.seed(0)
X = np.random.rand(50, 1)
y = 3 + 2 * X + np.random.randn(50, 1)
df = pd.DataFrame(np.hstack([X, y]), columns=['X', 'y'])
df.plot.scatter(x='X', y='y')
from sklearn.preprocessing import PolynomialFeatures
import matplotlib.pyplot as plt
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(X)
df = pd.DataFrame(np.hstack([X_poly, y]), columns=['X', 'X^2', 'y'])
fig, axs = plt.subplots(1, 2, figsize=(15, 5))
df.plot.scatter(x='X', y='y', ax=axs[0], color='red')
df.plot.scatter(x='X^2', y='y', ax=axs[1], color='blue')
plt.show()
우측 그림은 0~1 사이의 값으로 구성된 X의 2차항으로 나타내지기에, 0에 가까운 숫자들의 간격이 좁아진 것을 확인할 수 있습니다.
Tabular 데이터에서 효과적인 방법으로 생각됩니다.