기능 선택 방법의 성능을 비교하는 방법은 무엇입니까?


10

몇 가지 기능 선택 / 변수 선택 접근 방식이 있습니다 (예 : Guyon & Elisseeff, 2003 ; Liu et al., 2010 참조 ).

  • 필터 방법 (예를 들어, 상관 기반, 엔트로피 기반, 랜덤 포레스트 중요도 기반),
  • 래퍼 방법 (예 : 정방향 검색, 언덕 등반 검색) 및
  • 기능 선택이 모델 학습의 일부인 임베디드 방법.

R, Python 등과 같은 기계 학습 도구에서도 많은 게시 된 알고리즘이 구현됩니다.

다른 기능 선택 알고리즘을 비교하고 주어진 문제 / 데이터 집합에 가장 적합한 방법을 선택하는 적절한 방법은 무엇입니까? 또 다른 질문은 기능 선택 알고리즘의 성능을 측정하는 알려진 메트릭이 있는지 여부입니다.

답변:


4

이것은 어려운 문제이며 연구원들은 많은 진전을 보이고 있습니다.

감독 기능 선택을 찾고 있다면 LASSO 와 그 변형을 권장 합니다. 알고리즘 학습은 감독 학습을 통해 매우 간단합니다. 테스트 데이터에서 선택한 메트릭의 성능.

LASSO의 두 가지 주요 경고는 (1) 선택한 기능이 상호 작용을 자동으로 감지하지 않으므로 모든 기능을 우선적으로 (즉, 모델을 통해 실행하기 전에) 제작해야하며 (2) LASSO는 -선형 관계 (예 : 2 차 관계 ).

이 두 가지 경고를 극복하고 극복하는 방법은 자동으로 선택 기능이있는 그라디언트 부스트 머신 을 사용 하는 것입니다. GBM의 통계적 속성은 LASSO의 통계적 속성보다 약간 모호하다는 점에 주목할 가치가 있습니다.

당신이 자율 기능 선택을 찾고 있다면, 사용하는 유사한 정규화 방법있을 것 같습니다 이들 연구진은 그러나이 특정한 경우에 평가는 덜 분명해진다. 사람들은 PCA / SVD 또는 K-Means와 같은 많은 다른 것을 시도하여 궁극적으로 데이터에 대한 선형 근사를 찾습니다.

이 경우 일반적인 성능 측정 값은 클러스터의 재구성 오류 또는 RMSE입니다.

소프트웨어 측면에서 R과 Python에는 GBM, LASSO, K-Means, SVD 및 PCA가 있습니다. Python 용 R 및 Sklearn의 GLMNET 및 XGBoost가 관련 라이브러리입니다.


1

나는 항상 최종 결과의 단계로 기능 선택을 고려합니다.

아래에서는 기능 선택과 차원 축소를 어떻게 든 혼합하여 목표가 있으며 혼란 스러울 수 있습니다.

몇 가지 일반적인 용도 :

  • 머신 러닝의 계산 감소 : 선택의 질은 최종 학습 결과의 요인이며, 또한 학습을 ​​달성하는 속도이기도합니다.

  • 결국 여러 차원을 결합하는 데이터의 시각화 / 이해. 재미있는 것들을 숨기지 않을 때, 그리고 이해할 수있을 때 좋습니다

  • 학습 결과를 단순화하여 이해하기 쉽게 만듭니다 (예 : 근본 원인 분석). 단순하지만 여전히 품질면에서 충분하다면 좋습니다.

  • 이전 답변에서 알 수 있듯이 피팅 제어

  • ...

따라서 ML에는 항상 일반적인 규칙이 있다고 생각하지 않지만 사례 별 문제입니다.

개인적인 신념 ...


0

특정 상황과 해결하려는 문제에 따라 크게 다릅니다. 래퍼 메서드 가 더 유연하고 과적 합되기 쉬운 일반적인 규칙이 있습니다 .

기능 선택 성능은 학습 작업의 전체 성능으로 평가할 수 있습니다. 예를 들어, 다른 방법으로 기능을 선택한 다음 분류를 위해 이러한 다른 기능 세트를 사용하고 획득 한 분류기의 정밀도를 비교할 수 있습니다.

일부 생물학적 응용 프로그램과 같은 일부 시나리오에서 또 다른 중요한 요소는 선택된 기능의 해석 가능성이며, 예를 들어 클러스터링 문제와 같은 결과는 선택된 기능의 의미와 결과 클러스터가 성능을 측정하는 매우 중요한 척도입니다.


0

입력 변수의 하위 집합이 출력 변수에 영향을 미치는 것을 미리 알고 다른 방법을 사용하여 관련 기능을 감지하려고 시도하는 일련의 인공 테스트를 실행해야합니다.

좋은 방법은 분포가 다른 무작위 입력 변수 세트를 유지하고 기능 선택이 실제로 관련성이없는 것으로 태그를 지정하는지 확인하는 것입니다.

또 다른 트릭은 행을 순열 한 후 관련 태그로 태그 지정된 변수가 관련 항목으로 분류되도록하는 것입니다.

위에서 말한 것은 필터와 래퍼 방식 모두에 적용됩니다.

또한 변수를 따로 따로 (하나씩) 가져다 놓으면 대상에 영향을 미치지 않는 경우를 함께 처리해야하지만 함께 사용하면 강한 의존성이 드러납니다. 잘 알려진 XOR 문제는 다음과 같습니다 (Python 코드를 확인하십시오).

import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_selection import f_regression, mutual_info_regression,mutual_info_classif

x=np.random.randn(5000,3)
y=np.where(np.logical_xor(x[:,0]>0,x[:,1]>0),1,0)

plt.scatter(x[y==1,0],x[y==1,1],c='r',marker='x')
plt.scatter(x[y==0,0],x[y==0,1],c='b',marker='o')
plt.show()
print(mutual_info_classif(x, y)) 

산출:

파이썬 3 XOR 일러스트레이션

[0. 0.00429746]

따라서 강력한 (단일 변량) 필터링 방법 (출력 변수와 입력 변수 간의 상호 정보 계산)은 데이터 집합의 관계를 감지 할 수 없었습니다. 우리는 확실히 100 % 의존성이며 X를 알고 100 % 정확도로 Y를 예측할 수 있습니다.

기능 선택 방법에 대한 일종의 벤치 마크를 작성하는 것이 좋습니다. 누구나 참여하고 싶습니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.