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 데이터에서 효과적인 방법으로 생각됩니다.