본문 바로가기

머신러닝

# 비슷한 correlation을 갖는 feature 제거하기 by df.triu(), df.where()

 모델을 훈련시키기 전에 data featurescorrelation이 매우 큰 feature들이 존재할 수 있습니다. 이렇게 비슷한 feature들을 사용하여 모델을 훈련시키는 것은 비효율적입니다. 따라서 featurescorrelation을 계산하여 비슷한 feature를 하나만 남기고 나머지 feature들을 제거하는 작업이 필요합니다.

 

 여기서는 kaggle의 한 노트북( A Complete Introduction and Walkthroughm)에서 소개한 feature 선택 방법에 대하여 알아보겠습니다.

 

1: 우선 DataFrame에서 corr()을 실행하여 각 feature들사이의 correlation를 계산하고 corr_matrix에 저장합니다.

2: corr_matrix에서 대각행렬을 포함하여 lower triangular matrix를 모두 0으로 치환합니다.

(여기서 사용된 triu(), where()함수에 대해서는 아래에서 다시 다루도록 하겠습니다.)

    1) 모두 1로 채워진 corr_matrix크기의 numpy_array를 생성합니다.  

    2) 만들어진 numpy_array에서 대각행렬을 포함하지 않는(k = 1의 의미) upper  triangular matrix행렬 부분은 그대로 두고, 나머지는 모두 0으로 치환합니다.

    3) 0과 1로 구성된 numpy_array를 True와 False로 구성된 boolean 타입의 numpy_array로 타입을 변경합니다.

    4) 만들어진 matrix속에 True자리만 corr_matrix에서 그대로 두고 나머지는 0으로 치홥니다.

3. upper속에 절댓값이 0.95보다 큰 값이 존재한다면 해당 feature의 이름을 to_drop에 저장합니다.

4. df에서 to_drop에 있는 feature들을 제거합니다.

 

이 노트북에서는 to_drop에 있는 feature들을 모두 제거하였지만, dataseat를 참고하거나, 다른 feature들 사이의 관계를 고려하여 어떤 feature를 제거하고, 어떤 feature를 사용할 지 정한다면 더 높은 성능의 결과를 얻을 수 있습니다.

 

 

 

# df.triu()

DataFrame에서 upper triangular matrix를 구하는 함수입니다. k 값을 통해 기준이 되는 대각행렬을 정할 수 있습니다.

 

# df.where(df와 동일한 크기의 boolean matrix)

DataFrame에서 True 자리는 살리고, False자리는 NaN으로 치환하는 함수입니다.  df에 조건 연산을 하면 boolean matrix를 쉽게 구할 수 있습니다. 또한 지정 값을 입력하지 않는 경우, True자리에는 원래 값이 그대로 남지만, 지정 값을 입력하면 True자리는 지정 값으로 치환됩니다.