이진 분류 (SVM, 로지스틱 회귀, 랜덤 포레스트 등)를위한 여러 분류기를 훈련하는 140000 개의 예와 30 개의 기능에 대한 데이터 세트가 있습니다.
많은 경우에 그리드 또는 랜덤 검색을 사용하는 전체 데이터 세트에 대한 하이퍼 파라미터 튜닝은 시간이 너무 많이 걸립니다.
나는 다음 기술을 사용하기 시작했다
- 하위 샘플 내 데이터 세트
- 획득 한 분수를 사용하여 하이퍼 파라미터를
- 획득 한 파라미터를 사용하여 전체 데이터 세트를 사용하여 모델을 학습시킵니다.
두 번째 단계의 I 사용에 매개 변수의 각 세트를 평가하기 sklearn
의 GridSearchCV
CV = 10. 나는 세 번째 단계의 I 사용에 만드는 것이 최종 모델을 평가하기 위해 sklearn
의 cross_val_predict
. 그런 의미에서 데이터의 10 %를 남기지 않고 모델을 평가하고 나머지를 훈련하고 10 %, 10 회 반복 예측 정확도를 측정 한 다음 평균 점수를 취합니다.
내가 걱정했던 것은 전체 데이터 세트에 대한 훈련에서 얻은 예측 정확도가 최상의 매개 변수 세트에 대한 매개 변수를 조정할 때 얻는 평가와 거의 비슷하다는 것입니다 (각 테스트 된 매개 변수 세트는 평균 10- 교차 검증 결과).
cross_val_predict
모든 교육 예제 (전체 데이터 세트)를 사용하여 측정 한 정확도의 대부분은 최상의 매개 변수 평가가 반환 한 것보다 약간 높습니다.
이것을 설명하기 위해 여기에 매개 변수 세트의 평가가 있습니다 (위에서 설명한 것보다 작은 데이터 세트에서 효과는 동일합니다)
Best parameters set found on development set:
{'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
Scores for all sets of parameters
0.851 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.5}
0.852 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.1}
0.829 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.001}
0.853 (+/-0.006) for {'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
...
그리고 여기에 cross_val_predict
최고의 매개 변수를 사용하여 전체 데이터 세트에 대한 훈련에서 얻은 평균 점수가 (에서 ) 있습니다
precision recall f1-score support
0 0.86 0.85 0.86 15417
1 0.86 0.87 0.87 16561
avg / total 0.86 0.86 0.86 31978
acc score: 0.863750078179
roc au score: 0.863370490059
[[13147 2270]
[ 2087 14474]]
보시다시피 전체 데이터 세트에 대한 교육이 결과를 향상시킵니다. 또한 심하게 튜닝 모델 (예에 대한 기본값 또는 임의의 값을 사용하는 것이 유효했다 C
및 gamma
훨씬 더 예측 정확도에 리드).
전반적으로 하위 집합에서 하이퍼 파라미터를 튜닝하는 것이 이상적이지는 않지만 너무 오래 기다리지 않고도 비교적 좋은 결과를 얻을 수 있다고 생각합니다. 예를 들어 그 접근법을 사용하기 전에 optunity
전체 데이터 세트에서 하이퍼 매개 변수를 튜닝하기 위해 패키지를 사용했습니다 . 이 절차는 완료하는 데 3 ~ 5 일이 소요될 수 있으며, 각 등급에 대해 정밀도 나 리콜이 실제로는 높지만 (정확히 나 다른 리콜보다 높음) 결과는 매우 정확하지만 리콜은 양호하지만 둘다는 아닙니다. f1 측정 값이 실제로 낮았습니다. 반대로, 후자의 접근법을 사용하면 몇 시간의 훈련과 더 나은 f1 측정이 가능합니다.
내 관심사는 :
분류 정확도를 제한합니까? 서브 세트에서만 튜닝하여 데이터 세트가 제공 할 수있는 모든 예측 능력을 사용하지 않습니까? 이러한 성능 저하가 발생하는 경우 어떤 방식으로 제한됩니까?