다른 테스트 세트 및 교육 세트 배포


15

테스트 세트 배포가 교육 세트와 다른 데이터 과학 경쟁을하고 있습니다. 테스트 세트와 매우 유사한 훈련 세트에서 관측치를 서브 샘플링하고 싶습니다.

어떻게해야합니까?


랜덤 언더 샘플링, 랜덤 오버 샘플링, 클러스터 기반 오버 샘플링, 오버 샘플링 정보 : 합성 소수 오버 샘플링 기법, 수정 된 합성 소수 오버 샘플링 기법 (MSMOTE) 등.
Aditya

당신이 그들 중 하나에 만족하면 답변 중 하나를 "허용 된 답변"으로 표시하는 것이 좋습니다.
TwinPenguins

답변:


17

중요한 것은 이것이 머신 러닝 패러다임에서 "공변량 이동"또는 "모델 드리프트"또는 "비정상 성"등으로 알려진 것입니다.

미래 예측을 위해 머신 러닝 모델을 구축 할 때 중요한 가정 중 하나는 보이지 않는 데이터 (테스트)가 훈련 데이터와 동일한 분포에서 나온다는 것입니다! 그러나 실제로이 단순한 가정은 여러 가지 이유로 시간이 지남에 따라 쉽게 추후에 다가오는 데이터 (그 분포)가 변경됩니다. 이 중요한 문제에 익숙하지 않은 사람들을 위해 여기를 보거나 게시 하는 것이 좋습니다 !

나에게 당신의 질문은 같은 범주에 속합니다. 완벽한 솔루션 (제공 할 구현)은 없지만 다음과 같이 보일 수 있습니다.

  • 블로그 게시물 은 Python에서 제공하는 코드로 교육 데이터의 서브 샘플링을 처리하는 간단한 방법을 제공합니다!
  • 연구 논문을 확인하십시오 . 그들은 훈련 데이터의 가중치를 재조정하여 문제를 해결하기 위해 훈련의 분포가 " Kullback-Leibler 분기 "정리 에 기반한 Kullback-Leibler 중요도 추정 절차를 사용하여 테스트의 분포에 더 가까워 지도록 제안합니다 . 구현을 제공하는지 쉽게 구현할 수 있는지 잘 모르겠지만 배포 불일치를 처리하는 전문적인 방법으로 들리면 파낼 가치가 있다고 생각합니다.

빠른 업데이트 (좋은 솔루션) : 그 연구 논문 (마지막 지점) 의 KLIEP 알고리즘파이썬으로 구현 하여 그 무게를 찾았습니다. 오히려 사용하기 쉬운 것 같습니다! 기본적으로 이는 KLIEP 알고리즘을 통해 가중치를 적용하여 학습을 재 샘플링하므로 유사한 열차 및 테스트 분포를 가정한다는 가정은 가능한 한 사실입니다.


5

테스트 세트와 매우 유사한 훈련 세트에서 관측치를 서브 샘플링하고 싶습니다.

당신이 그렇게하고 싶을 지 모르겠습니다. 전체적인 목적은 보이지 않는 데이터에 대해 일반화되도록 알고리즘을 훈련시키는 것입니다.

일반적으로 테스트 데이터를 기차 데이터 (예 : 기차 데이터에 따라 테스트 데이터 표준화)에 맞게 조정해야합니다 . 실제로, 당신은 하지 않는 테스트 데이터를 알고있다.


3

기차 세트 서브 샘플링이 최선의 해결책이 아닐 수도 있습니다!

시험 / 실행 세트와 훈련 세트 배포 / 기능의 차이점은지도 학습 과제에서 매우 흔합니다 (이것은 Kaggle과 같은 경쟁이 어려운 이유 중 하나입니다). 그렇기 때문에 우리 는 과거의 성과가 미래의 성과를 추정하기위한 가이드로만 사용될 수 있지만 그것을 나타내거나 보증하지는 않습니다 . 따라서, 일반화 가능한 모델은 기차 (서브) 세트에서 매우 잘 수행되지만 보이지 않는 데이터에서는 잘 수행되지 않는 미세 조정 된 모델보다 항상 선호되었습니다.

이러한 차이는 정상이지만 과거와 미래의 샘플 사이의 너무 큰 간격은 자체적으로 활발한 연구 분야 인 개념 드리프트의 예라고 할 수 있습니다 . 귀하의 질문을 감안할 때, 귀하의 사례가 일반적인 ML 사례이거나 개념 표류가 실제로 발생하고 있다고 판단 할 수 없습니다.

이것들은 나의 제안입니다.

  1. 일반화 기능이 높은 여러 모델을 학습하십시오. 열차 데이터 세트에서 부트 스트랩 샘플링을 사용하면 오차의 편향분산 성분을 쉽게 계산할 수 있습니다 . 리콜 당신이 찾고있는 저 분산 (데이터의 변화가 성능에 한계 영향을 미칠 것이다) 모델보다는 낮은 바이어스 하지만 높은 분산 모델 (훈련에 그 힘의 overfit (하위) 세트). 이제 최상의 알고리즘을 선택하고 테스트 세트에 대해 평가할 수 있습니다. 훈련 시간에는 테스트 세트를 보지 않아야합니다!

  2. 여러 랜덤 다운 샘플링 대신 표준화 / 정규화 및 기능 선택 / 엔지니어링을 찾으십시오. 이러한 기술은보다 일반적인 모델을 배우는 데 실용적 일 수 있습니다. 예를 들어, 분포의 형태 (무엇이든)가 거의 동일하게 유지되는 동안 (예를 들어, 왼쪽 또는 오른쪽으로 이동 된 동일한 분포), 특징 영역의 범위는 시간에 따라 변할 수 있습니다. 그러한 경우, 간단한 표준화 (즉, 다른 맵핑 기능을 사용하여 트레인 및 테스트 샘플을 [0,1]과 같은 사전 정의 된 공간에 맵핑)는 증상을 줄일 수 있습니다.

  3. 체계적인 다운 샘플링 은 문제에 대한 지식을 바탕으로하는 경우에만 적절한 솔루션이 될 수 있습니다 (테스트 데이터 세트의 정확도를 높이기위한 목적이 아니라). 예를 들어, 열차 데이터의 일부 레코드는 오래 전에 원거리에서 샘플링되거나 향후 테스트 데이터 수집에서 발생하지 않는 특정 요인의 영향을 받는다는 것을 알고있을 것입니다. 이러한 경우에, 당신은 당신이 앞으로 이러한 패턴을 볼 수 없습니다 확신으로 관련이있을 수있는 그 샘플을 제거 할 수 있습니다 (난 당신이해야 의미 근거 오히려 테스트 세트가를 조사보다 교육 부분 집합의 선택 뒤에를 실제로는 액세스 할 수 없습니다). 그런 경우에는 이상치 제거 라고합니다 다운 샘플링보다는.


1
(와이|엑스)

-1

파이썬에는 좋은 패키지가 있습니다 (scikit learn)

http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

이 패키지를 사용하여 트레이닝 세트에서 관측치를 서브 샘플링 할 수 있습니다.


1
내가 질문을 이해하는 한, 기차 / 테스트 분포는 다르므로 고려하지 않으면 "공변량 이동"이 발생합니다. 여기에 언급 된 scikit learn에서 "train_test_split"구현을 사용하는 간단한 서브 샘플은 분할 중에 분배를 고려하지 않습니다! 따라서 답은 관련이 없습니다.
TwinPenguins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.