본문 바로가기
ML & DL/혼자 공부하는 머신러닝+딥러닝

특성 공학(Feature engineering)

by Glory_Choi 2022. 7. 28.
반응형

다중 회귀

여러 개의 특성을 사용한 선형 회귀를 다중 회귀(Multiple regression)라고 부릅니다. 1개의 특성을 사용한 선형 회귀 모델이 학습하는것은 직선입니다. 2개의 특성을 사용한 선형 회귀는 평면을 학습하게 됩니다.

 

특성 공학이란?

특성 공학이란 훈련에 사용할 좋은 데이터(특성)들을 찾는 것이다. 에러, 이상치, 잡음으로 가득하면 결과가 좋지 않게 나오기 때문에 특성공학이 필요하다. 기존의 특성을 사용해서 새로운 특성을 뽑아내는 작업을 특성 공학이라 부릅니다.

  • 특성 선택(Feature selection): 가지고 있는 특성 중에서 훈련에 가장 유용한 특성을 선택합니다.
  • 특성 추출(Feature extraction): 특성을 결합하여 더 유용한 특성을 만듭니다.

 

판다스 데이터프레임

판다스는 유명한 데이터 분석 라이브러리입니다. 데이터프레임은 판다스의 핵심 데이터 구조입니다. 넘파이 배열과 비슷하게 다차원 배열을 다룰 수 있지만 훨씬 더 많은 기능을 제공하고 넘파이 배열로 쉽게 바꿀 수 있어 유용합니다.

판다스 데이터프레임을 만들기 위해 많이 사용하는 파일은 CSV파일입니다. CSV파일은 아래 그림과 같이 ,로 이루어져 있는 텍스트 파일입니다.

CSV 파일을 판다스에서 읽는 방법은 아주 간단합니다. 판다스의 read_csv() 함수에 주소를 놓어주면 데이터 프레임을 만든다음 to_numpy() 함수를 사용해 넘파이 배열로 바꿉니다.

 

사이킷런의 변환기

사이킷런은 특성을 만들거나 전처리하기 위한 다양한 클래스를 제공합니다.

사이킷런에서는 이런 클래스를 변환기라고 부릅니다.

사이킷런의 모델 클래스에 일관된 fit(), score(), predict() 메서드가 있는 것처럼 변환기 클래스는 모두 fit(), transform()메서드는 제공합니다.

 

규제

규제는 머신러닝 모델이 훈련 세트를 너무 과도하게 학습하지 못하도록 훼방하는 것을 말합니다. 즉 모델이 훈련 세트에 과대 적합하지 않도록 만드는것이라고 생각하지면 됩니다. 선형 회귀 모델의 경우 특성에 곱해지는 계수(또는 기울기)의 크기를 작게 만드는 일입니다.

 

소스 코드

판다스를 이용하여 농어의 데이터를 데이터프레임에 저장한 후 넘파이 배열로 변환하였습니다.

타깃 데이터는 이전과 동일한 방식으로 넘파이 배열에 준비하였습니다.

 

사이킷런의 변환기 클래스인 PolynomialFeatures 클래스를 사용해 보겠습니다. 이 클래스는 sklearn.preprocessing 패키지에 포함되어 있습니다.

PolynomialFeatures 클래스는 기본적으로 각 특성을 제곱한 항을 추가하고 특성끼리 서로 곱한 항을 추가합니다. 2와 3을 제곱한 4와 9가 추가되었고, 2와 3을 곱한 6이 추가 되었습니다. 1은 항상 특성과 곱해지는 계수이므로 자동으로 추가 되기 때문에 1을 쓰지 않으려면 include_bias=False를 사용하면 됩니다. 이 방식으로  train_input에 적용하겠습니다.

9개의 특성이 만들어진 것을 확인할 수 있습니다. get_feature_names() 메서드를 사용하면 특성이 각각 어떤 입력의 조합으로 만들어졌는지 알려줍니다. 확인 해보겠습니다.

테스트 세트를 변환하겠습니다.

훈련 세트의 점수는 매우 높아졌고 테스트 세트의 점수는 높아지지 않았습니다. 농어의 길이만  사용했을 때 있던 과소적합 문제는 더이상 나타나지 않았습니다.

특성을 더 많이 추가해보면 테스트 세트에 대한 점수는 음수가 나오는데 이 문제의 이유는 특성의 개수를 크게 늘리면 선형 모델은 아주 강력해집니다. 훈련세트에 대해 거의 완벽하게 학습할 수 있습니다. 하지만 이런 모델은 훈련 세트에 너무 과대적합되므로 테스트 세트에서는 형편 없는 점수를 만듭니다.

반응형