지난번 포스팅에서는

 

 - Python sklearn.preprocessing.Binarizer()를 이용한 연속형 변수의 이항변수화(binarization)

 

 - Python sklearn.preprocessing.OneHotEncoder()를 이용한 범주형 변수의 이항변수화

 

 - Python np.digitize(), np.where() 를 이용한 연속형 변수의 이산형화(discretization)

 

 

에 대해서 알아보겠습니다.

 

 

이번 포스팅에서는 sklearn.preprocessing.PolynomialFeatures() 를 이용한 다항차수 변환, 교호작용 변수 생성에 대해서 소개하겠습니다.

 

회귀분석할 때 다항 차수를 이용해서 비선형 패턴, 관계(non-linear relation)를 나타내거나, 변수 간 곱을 사용해서 교호작용 효과(interaction effects)을 나타낼 수 있는 변수를 만듭니다.

 

 

 

 

 

 

먼저 필요한 모듈을 불러오고, 예제 Arrary Dataset을 만들어보겠습니다.

 

 

 

In [1]: import numpy as np


In [2]: import pandas as pd


In [3]: from sklearn.preprocessing import PolynomialFeatures


In [4]: X = np.arange(6).reshape(3, 2)


In [5]: X

Out[5]:

array([[0, 1],
       [2, 3],
       [4, 5]])

 

 

 

 

 

  (1) sklearn.preprocessing.PolynomialFeatures()를 사용해 2차항 변수 만들기

 

 

 

# making 2-order polynomial features

 

In [6]: poly = PolynomialFeatures(degree=2)

 

 

# transform from (x1, x2) to (1, x1, x2, x1^2, x1*x2, x2^2)

In [7]: poly.fit_transform(X)

Out[7]:

array([[  1.,   0.,   1.,   0.,   0.,   1.],
       [  1.,   2.,   3.,   4.,   6.,   9.],
       [  1.,   4.,   5.,  16.,  20.,  25.]])

 

 

 

 

변수가 3개인 경우에는 다차항 변수와 교호작용 변수의 조합이 더 많아집니다(아래 예는 degree=2 로서 2차항 변수 & 교호작용 변수 생성 예시)변수가 추가 될 때마다 조합의 경우의 수가 기하급수적으로 늘어나게 되므로 유의할 필요가 있습니다.

 

 

In [8]: X2 = np.arange(9).reshape(3, 3)


In [9]: X2

Out[9]:

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

 

 

# transform from (x1, x2, x3) to (1, x1, x2, x3, x1^2, x1*x2, x1*x3, x2^2, x2*x3, x3^2)

In [10]: poly.fit_transform(X2)

Out[10]:

array([[  1.,   0.,   1.,   2.,   0.,   0.,   0.,   1.,   2.,   4.],
       [  1.,   3.,   4.,   5.,   9.,  12.,  15.,  16.,  20.,  25.],
       [  1.,   6.,   7.,   8.,  36.,  42.,  48.,  49.,  56.,  64.]])

 

 

 

 

 

  (2) 교호작용 변수만을 만들기 : interaction_only=True

 

다항차수는 적용하지 않고, 오직 호작용 효과만을 분석하려면 interaction_only=True 옵션을 설정해주면 됩니다. degree를 가지고 교호작용을 몇 개 수준까지 볼 지 설정해줄 수 있습니다.

 

 

In [11]: X2

Out[11]:

array([[0, 1, 2],

[3, 4, 5],

[6, 7, 8]])

 

 

# transform from (x1, x2, x3) to (1, x1, x2, x3, x1*x2, x1*x3, x2*x3)

 

In [12]: poly_d2 = PolynomialFeatures(degree=2, interaction_only=True)


In [13]: poly_d2.fit_transform(X2)

Out[13]:

array([[  1.,   0.,   1.,   2.,   0.,   0.,   2.],
       [  1.,   3.,   4.,   5.,  12.,  15.,  20.],
       [  1.,   6.,   7.,   8.,  42.,  48.,  56.]])

 

 

# transform from (x1, x2, x3) to (1, x1, x2, x3, x1*x2, x1*x3, x2*x3, x1*x2*x3)

 

In [14]: poly_d3 = PolynomialFeatures(degree=3, interaction_only=True)

 

In [15]: poly_d3.fit_transform(X2)

Out[15]:

array([[   1.,    0.,    1.,    2.,    0.,    0.,    2.,    0.],
       [   1.,    3.,    4.,    5.,   12.,   15.,   20.,   60.],
       [   1.,    6.,    7.,    8.,   42.,   48.,   56.,  336.]])

 

 

 

 

이상으로 sklearn.preprocessing.PolynomialFeatures()를 이용한 다항차수 변환, 교호작용 변수 생성 방법 소개를 마치겠습니다.

 

 

다음번 포스팅에서는 데이터셋 재구조화(pivot, reshape)에 대해서 알아보겠습니다.

 

 

많은 도움 되었기를 바랍니다.

 

 

 

728x90
반응형
Posted by Rfriend
,