교육 데이터 (또는 모든 데이터)에서만 기능 선택을 수행해야합니까?


10

교육 데이터 (또는 모든 데이터)에서만 기능 선택을 수행해야합니까? 나는 Guyon (2003)Singhi and Liu (2006)와 같은 몇 가지 토론과 논문을 겪었 지만 여전히 정답에 대해서는 확실하지 않습니다.

내 실험 설정은 다음과 같습니다.

  • 데이터 세트 : 50 건의 건강 관리 및 50 건의 질병 환자 (질병 예측과 관련이있는 CA 200 기능).
  • 작업은 사용 가능한 기능을 기반으로 질병을 진단하는 것입니다.

내가하는 일은

  1. 전체 데이터 세트를 가져 와서 기능 선택 (FS)을 수행하십시오. 추가 처리를 위해 선택한 기능 만 유지
  2. 열차 데이터와 선택한 기능을 사용하여 열차 분류기를 테스트하고 훈련시키기 위해 분할합니다. 그런 다음 분류기를 적용하여 데이터를 테스트하십시오 (다시 선택된 기능 만 사용). Leave-one-Out 유효성 검사가 사용됩니다.
  3. 분류 정확도 확보
  4. 평균화 : 1) -3) N 번 반복하십시오. (100).=50

전체 데이터 세트에서 FS를 수행하면 약간의 편견이 생길 수 있다는 데 동의하지만 내 의견은 평균화하는 동안 "평균화"된다는 것입니다 (4 단계). 그 맞습니까? (정확도 편차는 )<2%

1 Guyon, I. (2003) "변수 및 기능 선택 소개", The Journal of Machine Learning Research, Vol. 3, pp. 1157-1182
2 Singhi, SK 및 Liu, H. (2006) "분류 학습을위한 기능 하위 집합 선택 바이어스", ICML '06 진행 중

답변:


12

2 단계와 3 단계에서 사용한 테스트 세트의 데이터를 사용하여 1 단계에서 사용 된 기능을 결정하기 때문에 사용중인 절차에 따라 최적화 된 성능 추정치가 산출됩니다. 연습을 반복하면 성능 추정치의 변동이 줄어 듭니다. 편향이 평균화되지 않습니다. 편견없는 성능 추정치를 얻으려면 기능 선택을 포함하여 모델에 대한 선택을하는 데 테스트 데이터를 사용해서는 안됩니다.

더 나은 방법은 중첩 교차 검증을 사용하는 것입니다. 따라서 외부 교차 검증은 모델을 구성하는 방법 (특징 선택 포함)을 사용하여 얻을 수있는 성능 추정치를 제공하고 내부 교차 검증은 피처를 독립적으로 선택하는 데 사용됩니다 외부 교차 검증의 각 접힘에서. 그런 다음 모든 데이터를 사용하여 최종 예측 모델을 작성하십시오.

사례보다 많은 기능이 있으므로 기능 선택만으로 데이터를 과적 합할 가능성이 높습니다. 지형지 물 선택이 예측 성능을 향상시키는 것은 약간의 신화입니다. 따라서 관련 지형지 물 자체를 끝으로 식별하지 않고 관심있는 부분이라면 능선 회귀를 사용하고 지형지 물을 수행하지 않는 것이 좋습니다. 선택. 능선 매개 변수를 신중하게 선택하면 기능 선택보다 예측 성능이 향상 될 수 있습니다 (알렌의 PRESS 통계량 최소화를 사용합니다 (예 : 평균 제곱 오차의 일회성 추정치)).

자세한 내용은 Ambroise 및 McLachlan이 질문에 대한 답변을 참조하십시오 .


답변 주셔서 감사합니다. 사실, 나는 관련 기능을 찾고 예측 성능을 향상시키기 위해 둘 다에 관심이 있습니다. 내 실험 (분류를위한 SVM)에서 기능 선택은 예측 정확도를 크게 향상 시켰습니다 (단, 데이터를 과적 합한 결과 일 수 있음). 나는 능선 회귀에 의해 Tikhonov 정규화라고 알려진 것을 생각한다고 가정합니다.
pedro29

능선 회귀는 가중치의 제곱 규범에 따라 페널티 항이있는 정상적인 선형 회귀입니다. 대부분의 문제는 SVM과 마찬가지로 작동하지만 구현하기가 더 쉽습니다 (기본적으로 무료로 남겨두기 교차 유효성 검사 오류를 해결하여 하이퍼 매개 변수를 조정하는 데 사용할 수 있음).
Dikran Marsupial

그건 그렇고, 능선 정규화와 기능 선택의 차이점은 무엇입니까? 하루 종일, 둘 다 주어진 예측 변수 집합에서 예측 변수의 "최상 부분 집합"을 나타냅니다.
pedro29

능선 회귀는 기능의 하위 집합을 식별하지 못하고 LASSO 또는 LARS 형태의 불이익 회귀를 나타냅니다. 패널티 항이 모델에 들어오고 나가는 피처에 순서를 부과하기 때문에 과적 합에 덜 영향을 받기 때문에 피처 선택 방법을 선택하는 것이 좋을 것입니다. 풍모.
Dikran Marsupial

3

여기에 대한 답변의 부록과 마찬가지로 이것이 왜 이것이 좋은 절차가 아닌지를 이해하는 데 실제로 도움이되는 두 개의 링크가 있습니다.

편집 : 요청에 따라 링크 내용에 대한 간단한 설명 :

분류기를 훈련시키고 있으며 각각 1 백만 개의 기능을 가진 1000 개의 샘플 데이터 세트를 가지고 있다고 가정합니다. 나는 그것들을 모두 처리 할 수 ​​없으므로 기능이 적습니다 (예 : 300 기능을 계산할 수 있음). 또한 샘플 외부의 실제 정확도를 정확하게 추정하기 위해 100 개의 샘플로 구성된 테스트를 실시했습니다.

전체 데이터 세트의 목표와 가장 높은 상관 관계를 가진 기능을 선택하여 백만 개의 기능을 300으로 필터링하면 실수가 발생합니다 (나중에 교차 검증에서 감지 할 수없는 과적 합을 도입하고 있기 때문에). 보류 된 세트는 잘못된 정확도 값을 다시 뱉어이를 보여줍니다.

위의 링크에 따르면 올바른 방법은 내 데이터 세트를 트레이닝 세트와 교차 검증 세트로 나누고이 트레이닝 세트와 관련 CV 점수를 기반으로 내 모델을 조정 (기능 필터링 등)하는 것입니다. K- 접기를 사용하는 경우 분할 / 접기를 할 때마다 처음부터 다시 조정 한 다음 평균을 구해야합니다.

프로그래밍 방식으로 다음을 수행합니다.

  • 데이터 세트의 일부를 홀드 아웃 세트로 유지하십시오.
  • 나머지 데이터 세트 (이하 T1)를 K- 폴드로 나눕니다.
  • i = 1에서 K까지의 for-loop에서 다음을 수행하십시오.
    • CV 세트로 i 번째 접기를 선택하고 나머지 샘플을 트레이닝 세트 (이하 Ti라고 함)로 선택합니다.
    • 원하는 기능 엔지니어링 및 기능 선택을 수행하십시오. 기능 필터링, 결합 등
    • CV 세트 (CVi라고하는 현재 접기)와 현재 훈련 세트 Ti를 적절한 기능을 가진 하나로 변환하십시오.
    • 훈련 세트 Ti에서 모델 훈련
    • 현재 폴드 CVi에서 점수를 얻으십시오. 이 점수를 모든 점수를 보유한 목록에 추가하십시오.
  • 이제 목록에는 각 폴드의 점수가 있으므로 K- 폴드 점수를 얻으면 평균을냅니다.

전체 트레이닝 세트 T1이 아닌 서브 트레이닝 세트 Ti에서 루프 내에서 피처 엔지니어링을 수행하는 것이 매우 중요합니다.

그 이유는 Ti에 적합 / 피처 엔지니어가 해당 모델에 보이지 않는 CVi를 테스트하기 때문입니다. 반면, T1에서 엔지니어를 적합 / 추천하는 경우 선택한 모든 CV는 T1의 하위 집합이어야하므로 동일한 데이터 샘플에 대한 교육 및 테스트를 수행하기 때문에 낙관적으로 편향됩니다.

정말 좋은 StackExchange 답변은 이것에 대한 자세한 설명과 코드 예제를 통해 자세히 설명합니다. 또한 이것을 부록으로 참조하십시오 .


1
이 링크의 내용에 대한 간략한 요약을 포함시킬 수 있습니까? 자체 포함 된 답변을 선호합니다. 그렇지 않으면 링크의 위치가 변경되면 "linkrot"에 매우 취약 할 수 있습니다. 또는이 의견을 의견으로 변환 할 수도 있습니다.
Silverfish

@Silverfish 완료
Abhishek Divekar

그래서 for-loop 내부에서 다른 접기에 대해 다른 선택된 기능을 가질 수 있습니까?
stackunderflow

2

Efron-Gong "낙관론"부트 스트랩은이 점에 매우 적합합니다. 아이디어는 예측 모델을 개발하기 위해 사용 가능한 모든 데이터를 사용하고 동일한 모델의 향후 성능을 추정하기 위해 모든 데이터를 사용하는 것입니다. 그리고 샘플 크기가 100 배나 작아서 샘플 분리 방법이 작동하지 않습니다.

와이

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