일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- deeplearning
- 주피터노트북 커널 목록
- Git
- 데이터분석
- deep learning
- random forest
- 경사하강법
- 모두를 위한 딥러닝
- regression
- MySQL
- ubuntu
- Machine Learning
- Python
- jupytertheme
- overfitting
- 회귀분석
- Linear Regression
- 딥러닝
- 주피터노트북
- feature scaling
- pandas
- 나는리뷰어다2021
- lol api
- 한빛미디어
- 주피터 노트북 테마
- 주피터노트북 커널 제거
- Udacity
- 주피터노트북 커널 추가
- GitHub
- 주피터테마
- Today
- Total
유승훈
Intro to machine learning - (11) Feature Selection 본문
Intro to machine learning - (11) Feature Selection
seunghuni96 2021. 1. 31. 21:51
Feature Selection의 기본은 우리가 가진 데이터의 트렌드와 패턴을 잘 파악할 수 있는 최소한의 변수를 선택하는 것입니다. 우리의 Machine Learning Algorithm은 우리가 넣은 Feature들이 좋은 만큼 좋은 성능을 내기 때문입니다. 좋지 않은 Feature는 오히려 Algorithm의 성능을 떨어뜨릴 수 있습니다. "Garbage in, Gabage out"이라는 말이 있죠.
Feature Selection은 크게 두 개의 Task가 있습니다. 첫번째는 최고의 Feature들을 고르는 것입니다. 이는 도움이 되지 않는 Feature를 제거하는 것이기도 합니다. 두번째는 새로운 Feature를 만드는 것입니다. 우리가 데이터에서 끌어낸 패턴을 새로운 Feature로 추가하는 것입니다.
새로운 Feature를 추가하는 과정에 대해서 먼저 보면, 여기서는 Enron 데이터를 예로 들고 있습니다.
첫번째는 Human Intuition입니다. "일반 사람들보다는 용의자들끼리 메일을 많이 주고 받을 것이다."처럼 사람의 생각에서 나오는 직관적인 판단으로 탐색을 시작할 수 있습니다.
두번째는 Feature를 추가하고, 시각화해서 실제로 Feature가 우리가 풀고자 하는 문제에 도움이 되는지를 판단하는 것입니다.(여기서는 용의자 / 비용의자를 구분합니다.)

Feature를 제거하는 것에 앞서, 우리는 왜 변수를 제거할까요?
잠깐 생각해보면, Noise 때문에, Over-Fitting 문제를 야기해서, 이미 있는 Feature와 강한 관계가 있어서, Train/Test를 지연시키기 때문에 같은 이유를 생각해볼 수 있습니다.
우리의 데이터에 있는 Feature와 Information은 다릅니다. 우리는 데이터로부터 결론을 이끌어내거나 인사이트를 찾고자 합니다. Feature는 Information에 접근하고자 하는 하나의 시도입니다. 따라서 최소한의 Feature로 가능한 많은 Information을 얻어야 합니다. 쓸모없는 Feature가 있다면 여러 문제들을 야기할 수 있기 때문에 제거하는 것입니다.

Feature Selection은 Bias-Variance 문제와도 연결됩니다.
Bias는 데이터를 제대로 반영해서 학습했는가를 의미합니다. Bias가 크다는 것은, 데이터를 제대로 고려하지 않고 학습되었다는 것을 의미합니다. X-Y의 관계가 모델에 정확하게 포함되어있지 않은 것입니다. 이러한 현상을 Underfitting이라고 하고, Training Data에서도 좋은 성능을 보이지 못하는 모델이 됩니다. 모델을 만들때 너무 적은 Feature를 사용하는 것도 High Bias를 야기할 수 있습니다.
Variance는 값이 흩어져 있는 정도를 의미합니다. Variance가 크다는 것은 데이터에 과하게 의존하고 있음을 의미합니다. 일반화되지 않고, 오로지 Train Data만을 바라보고 있는 것입니다. 이때는 Train - Test 사이의 모델 성능 차이가 아주 크게 나타납니다. Train Data는 매우 잘 예측하지만, 새로운 데이터인 Test Data는 잘 예측하지 못하는 모습을 보입니다. 이러한 현상을 Overfitting이라고 합니다. 모델을 만들때 너무 많은 Feature를 쓰거나, 과하게 Train Data에 맞도록 Optimize된 모델은 High Variance를 야기할 수 있습니다.

따라서 Bias와 Variance사이의 적절한 균형을 찾는 것이 중요합니다. 물론 둘 다 낮은 것이 좋지만, 하나를 최소화하는 과정에서 다른 하나가 과하게 증가하는 현상이 나타날 수 있습니다.

Data를 보면, Blue Regression Line을 좋은 모델로 생각할 수 있습니다. 하지만 다론 모델로 Red Line이 만들어졌다고 합시다. 검은색 Train Data만 놓고 보면, Red Line이 더 좋은 예측 성능을 보입니다. 하지만 Green New Data를 예측한다고 하면, Red보다는 Blue Line이 더 좋은 성능을 보입니다. Red Line은 High Variance로 일반화된 예측을 하지 못하고 있습니다.

우리는 모델의 성능과 모델의 복잡도 사이의 균형을 찾아야 합니다. 일반적으로 적은 Feature에서 개수를 늘려갈수록, 모델의 성능은 올라갑니다. 하지만 적절한 개수 이상의 Feature가 넘어가면, 모델의 성능은 다시 떨어집니다. Feature가 많아져서 Train Data만을 바라보는 Overfitting이 발생하는 것입니다. 따라서 변수의 개수(모델의 복잡도)와 모델의 성능 사이의 적절한 균형을 찾는 것이 필요합니다. 이 과정을 "Regularization"이라고 합니다.

선형회귀분석에서 Regularization한 모델은 Lasso Regression입니다.
일반적인 회귀분석이 SSE를 최소화하는 반면, Lasso는 이에 Penalty Parameter와 Coefficient들의 절댓값의 총합을 곱한 값을 더해서 최소화합니다. SSE는 Feature가 많아질수록 작아지고, Coefficient의 총합은 Feature가 많아질수록 커집니다. 때문에 일반적인 회귀분석에 비해 Feature를 많이 쓰는 것에 대해 Penalty를 부여한다고 할 수 있습니다.
Lasso는 모델의 성능에 도움이 되지 않는 변수를 제거합니다.(정확히는 Coefficient를 0으로 만듭니다.)
$Y = m_1x_1 + m_2x_2 + m_3x_3 + m_4x_4 + b$
이러한 일반 회귀식과 다르게,
$Y = m_1x_1 + m_2x_2 + b$
모델의 성능을 향상시키지 않는 변수 X3,X4의 계수인 M3,M4를 0으로 만드는 것입니다. 이렇게 자동으로 Feature Selection을 하는 것이 Lasso Regression의 장점입니다.
'강의정리 > udacity - machine learning' 카테고리의 다른 글
Intro to machine learning - (13) Validation (0) | 2021.02.02 |
---|---|
Intro to machine learning - (12) PCA (0) | 2021.02.01 |
Intro to machine learning - (10) Text Learning (0) | 2021.01.30 |
Intro to machine learning - (9) Feature Scaling (0) | 2021.01.21 |
Intro to machine learning - (8) Clustering (0) | 2021.01.19 |