[머신러닝]Feature Selection

2022. 8. 8. 17:35·공부정리/Deep learnig & Machine learning
728x90
반응형

Feature Selection

  • Feature Selection은 ML에 있어서 매우 중요한 기술입니다.
  • Feature Selection의 기본적인 아이디어는,
  • 모델링 시 raw data의 모든 feature를 사용하는 것은 computing power와 memory 측면에서 매우 비효율적이기 때문에,
  • 일부 필요한 feature만 선택해서 사용하자는 것입니다.
  • 어떻게 보면, Feature Selection은 여러분의 모델 성능을 높이기 위해서 반드시 필요한 기술 중 하나입니다.
  • Feature Selection은 Feature Engineering, Feature Extraction과 유사하지만,
  • 표현 자체는 구분되며, 간단하게 정리하면 아래와 같습니다.
    • Feature Engineering : 도메인 지식을 사용하여 데이터에서 피쳐를 변형/생성
    • Feature Extraction : 차원축소 등 새로운 중요 피쳐를 추출
    • Feature Selection : 기존 피쳐에서 원하는 피쳐만 (변경하지 않고) 선택
  • 즉, FE는 "데이터의 피쳐를 어떻게 유용하게 만들 것인가"의 문제이며,
  • FS는 "데이터에서 유용한 피처를 어떻게 선택할 것인가"의 문제입니다.
    • Feature Selection은 아래와 같은 장점이 있습니다.
      • 사용자가 해석하기 쉽게 모델을 단순화
      • 훈련 시간의 축소
      • 차원의 저주 방지
      • 일반화
  • 더 구체적으로 알아보겠습니다.

어떤 방법론을 사용할 것인가?

  • Feature Selection을 한다는 것은, feature subset을 만드는 과정이기 때문에
  • 시간과 자원이 충분하다면, 모든 방법을 테스트하여 구하고자하는 score가 높은 subset을 사용하면 됩니다.
  • 하지만, 이 방법은 현실적으로 무리가 있기 때문에, 평가 메트릭에 따라 적합한 방법을 사용하는 것이 좋습니다.
  • Feature Selection의 방법론은 크게 3가지로 분류됩니다.
    • Filter Method : Feature 간 관련성을 측정하는 방법
    • Wrapper Method : Feature Subset의 유용성을 측정하는 방법
    • Embedded Method : Feature Subset의 유용성을 측정하지만, 내장 metric을 사용하는 방법

Filter Method

  • Filter Method는 통계적 측정 방법을 사용하여 피처간의 상관관계를 알아낸 뒤,
  • 높은 상관계수(영향력)를 가지는지 피처를 사용하는 방법입니다.
  • 하지만, 상관계수가 높은 피처가 반드시 모델에 적합한 피처라고 할 수는 없습니다.
  • Filter Method는 아래와 같은 방법이 존재합니다.
    • information gain
    • chi-square test (카이제곱)
    • fisher score
    • correlation coefficient
      • 흔히 correlation을 heatmap으로 표현하여 시각화합니다.
    • variance threshold

Wrapper Method

  • Wrapper method는 예측 정확도 측면에서 가장 좋은 성능을 보이는 Feature subset(피처 집합)을 뽑아내는 방법입니다.
  • 이 경우, 기존 데이터에서 테스트를 진행할 hold-out set을 따로 두어야하며,
  • 여러번 Machine Learning을 진행하기 때문에 시간과 비용이 매우 높게 발생하지만
  • 최종적으로 Best Feature Subset을 찾기 때문에, 모델의 성능을 위해서는 매우 바람직한 방법입니다.
  • 물론, 해당 모델의 파라미터와 알고리즘 자체의 완성도가 높아야 제대로 된 Best Feature Subset을 찾을 수 있습니다.
  • Wrapper Method는 아래와 같은 방법이 존재합니다.
    • Forward Selection(전진 선택)
      • 변수가 없는 상태로 시작하며, 반복할 때마다 가장 중요한 변수를 추가하여 더 이상 성능의 향상이 없을 때까지 변수를 추가한다.
    • Backward Elimination(후방 제거)
      • 모든 변수를 가지고 시작하며, 가장 덜 중요한 변수를 하나씩 제거하면서 모델의 성능을 향상시킨다.
      • 더 이상 성능의 향상이 없을 때까지 반복한다.
    • Stepwise Selection(단계별 선택)
      • Foward Selection 과 Backward Elimination 을 결합하여 사용하는 방식으로,
      • 모든 변수를 가지고 시작하여 가장 도움이 되지 않는 변수를 삭제하거나,
      • 모델에서 빠져있는 변수 중에서 가장 중요한 변수를 추가하는 방법이다.
      • 이와 같이 변수를 추가 또는 삭제를 반복한다.
      • 반대로 아무것도 없는 모델에서 출발해 변수를 추가, 삭제를 반복할 수도 있다.

Embedded Method

  • Embedded method는 Filtering과 Wrapper의 장점을 결함한 방법으로,
  • 각각의 Feature를 직접 학습하며, 모델의 정확도에 기여하는 Feature를 선택합니다.
  • 계수가 0이 아닌 Feature가 선택되어, 더 낮은 복잡성으로 모델을 훈련하며, 학습 절차를 최적화합니다.
  • Embedded Method는 아래와 같은 방법이 존재합니다.
    • LASSO : L1-norm을 통해 제약을 주는 방법
    • Ridge : L2-norm을 통해 제약을 주는 방법
    • Elastic Net : 위 둘을 선형결합한 방법
    • SelectFromModel
      • decision tree 기반 알고리즘에서 피처를 뽑아오는 방법입니다.
        • RandomForest나 LightGBM 등
      • scikit-learn에 함수가 있습니다.

 

참고

  • https://subinium.github.io/feature-selection/
  • https://firework-ham.tistory.com/48
728x90
반응형

'공부정리 > Deep learnig & Machine learning' 카테고리의 다른 글

[핵심 머신러닝] 의사결정나무모델 2 (분류나무, Information Gain)  (0) 2022.08.11
[핵심 머신러닝] 의사결정나무모델 1 (모델개요, 예측나무) - 강의 정리  (0) 2022.08.11
[핵심 머신러닝] 정규화모델 2 - LASSO, Elastic Net  (0) 2022.08.08
[머신 러닝] 서포트 벡터 머신 (SVM) 보충 - 라그랑즈 승주법  (0) 2022.08.06
[머신러닝] 서포트 벡터 머신 (SVM) 개념 & 구현 / 파이썬 Python  (0) 2022.08.05
'공부정리/Deep learnig & Machine learning' 카테고리의 다른 글
  • [핵심 머신러닝] 의사결정나무모델 2 (분류나무, Information Gain)
  • [핵심 머신러닝] 의사결정나무모델 1 (모델개요, 예측나무) - 강의 정리
  • [핵심 머신러닝] 정규화모델 2 - LASSO, Elastic Net
  • [머신 러닝] 서포트 벡터 머신 (SVM) 보충 - 라그랑즈 승주법
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Python
    백준
    programmers
    소수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
[머신러닝]Feature Selection
상단으로

티스토리툴바