새소식

Machine Learning

[ML/데이터 전처리]Feature Selection - Embedded

  • -
728x90
Feature Select(특징 선택): 모델을 구성하기 위한 Feature을 선택하는 과정

고차원, 즉 피처가 많을 수록 데이터 포인트 간의 거리가 기하급수적으로 멀어진다. 이  Curse of Dimensionality(차원의 저주)가 일어나는데 해당 데이터로 학습을 시켰을 때 예측에서 정확도가 떨어진다.

복잡도를 감소시켜 모델의 성능을 향상시키고 처리속도를 증가시키기 위해 하는 방법 중에 하나가 Feature Select이다.

특징 선택 알고리즘은 크게 FilterWrapperEmbedded 3가지로 구분한다.

이미지 출처: https://www.javatpoint.com/feature-selection-techniques-in-machine-learning

이 세가지 방법론을 하나만 선택해서 사용한다기보다는 같이 사용한다. (ex. Wrapper method를 사용하기 전에 Filter method를 사용)

Embedded

filter method와 wrapper method의 특성을 결합했다. 학습 알고리즘 자체에서 변수 선택 프로세스를 진행해 특징 선택과 분류 혹은 회귀를 동시에 수행한다. 학습 알고리즘 자체에서 변형한다는 것에서 눈치챌 수도 있지만 과적합을 줄이기 위해서 내부적으로 penalty를 주는 L1, L2 규제 역시 embedded method의 한 방법이다. feature selection을 진행하기 위해 dimensionality reduction을 사용했다고 볼 수 있다.

Regularization

먼저 regularization이란 규제라고도 하며, 기존 Loss function에 weight의 크기를 포함하여 weight의 크기가 작아지는 방향으로 학습하도록 규제하는 것을 말한다. (각 weight에 penalty 값을 부여하면 그 weight 또한 적은 방향으로 학습하게 된다.) 규제를 사용하게 되면 Data의 주요 변수들을 빼지 않으면서 variance를 줄여서 overfitting을 완화한다. 

Regularization vs Normalization

여기서 알아두면 좋은 것이 있다. 한국어로 하면 Regularization, Normalization 모두 정규화라고 불리는데 둘은 같은 의미가 아니다. 

Normalization: 데이터의 scale을 조정하는 re-scaling 작업
Regularization: predict function의 복잡도를 조정하는 작업

둘 다 overfitting을 방지하기 위해 사용하며 딥러닝에서 사용하는 Batch normalization의 경우 regularization 효과가 나타나기도 한다.

regularization에는 다양한 방법이 있지만 이 포스팅은 feature selection에 대한 내용이므로 L1 regularization ,L2 regularization만 설명하도록 하겠다.

L1 regularization

Cost function에 새로운 규제항을 추가하여 계산하는 방법이다. L1-norm의 penalty를 가지며 regularization하기 때문에 L1 Regularization라고 불린다.

L1 regularization을 사용하는 regression model을 Least Absolute Shrinkage and Selection Operator(Lasso) Regression 이라고 부르기도 한다. 가중치에 절댓값을 씌우기 때문에 vector들이 sparse vector가 되는 경향이 있다.(즉 작은 weight 값은 0이 됨) Weight의 수를 줄이며 small set을 만들고 싶다면 L1 사용한다. weight가 너무 많을 때 좀 더 중요한 weight만 선택하는 방법이며, 미분 불가능한 지점이 있기 때문에 gradient-base learning 에서는 주의가 필요하다.

# gradient desent
num_epoch = 100
errors = []

# 학습률
learning_rate = 0.01
lr = 0.001

# 초기 w,b 랜덤 설정
w = np.random.uniform(low=9.0, high=10.0)
b = np.random.uniform(low=-40.0, high=-10.0)

for epoch in range(num_epoch):
    y_predict = predict(x, w, b)
    error = np.mean(((y_predict - y)**2))
    if error < 0.0005:
        break

    w = w - learning_rate * ((y_predict - y) * x).mean()+ lr * np.sum(np.abs(w))
    b = b - learning_rate * (y_predict - y).mean() 

    errors.append(error)

    if epoch % 5 == 0:
        print("{0:2} w = {1:.5f}, b = {2:.5f} error = {3:.5f}".format(epoch, w, b, error))

print("----" * 15)
print("{0:2} w = {1:.5f}, b = {2:.5f} error = {3:.5f}".format(epoch, w, b, error))

L2 regularization

L2-norm의 penalty를 가지며 regularization하기 때문에 L2 Regularization라고 불린다. L2 regularization을 사용하는 regression model을 Ridge Regression라고 부른다.

모든 가중치를 균등하게 작게 유지하려고 한다. 일반적으로 학습시 더 좋은 결과를 만들기 때문에 일반적으로 L2 모델을 더 자주 사용한다. 변수 간의 상관관계가 높아도 좋은 성능을 보이며, 크기가 큰 변수를 우선적으로 줄인다. 데이터에 많은 feature들이 포함되지만 실제로 중요한 feature의 수는 몇개에 불과할 때 Ridge의 정확도가 떨어질 수 있다.

# gradient desent
num_epoch = 100
errors = []

# 학습률
learning_rate = 0.01
lr = 0.001

# 초기 w,b 랜덤 설정
w = np.random.uniform(low=9.0, high=10.0)
b = np.random.uniform(low=-40.0, high=-10.0)

for epoch in range(num_epoch):
    y_predict = predict(x, w, b)
    error = np.mean(((y_predict - y)**2))
    if error < 0.0005:
        break

    w = w - learning_rate * ((y_predict - y) * x).mean()+ lr * np.sum(np.square(w))
    b = b - learning_rate * (y_predict - y).mean() 

    errors.append(error)

    if epoch % 5 == 0:
        print("{0:2} w = {1:.5f}, b = {2:.5f} error = {3:.5f}".format(epoch, w, b, error))

print("----" * 15)
print("{0:2} w = {1:.5f}, b = {2:.5f} error = {3:.5f}".format(epoch, w, b, error))

Algorithm Based Approach

Decision tree, RandomForest, ExtraTree, XGBoost와 같은 트리 기반 알고리즘에서도 feature selection이 일어난다. 가지를 분할할 때 올바른 변수를 찾으려고 하고 이때 feature selection 기능이 수행된다. 모든 피처에 대해 가능한 모든 분할 방법을 시도하고 데이터를 가장 잘 분할하는 방법을 선택한다. 즉, 가능한 모든 피처 조합을 시도하고 가장 좋은 조합을 선택하기 때문에 기본적으로 wrapper method를 사용한다.

Advantages of Embedded Methods

  • wrapper method처럼 기능의 상호 작용을 고려한다
  • filter method처럼 빠르다
  • filter method보다 정확하다
  • 오버핏이 덜 발생한다.
728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.