원문 : http://mlwave.com/kaggle-ensembling-guide/
# 번역이 매끄럽지 않은점 양해 부탁드림. 오역이 있을 수 있으니 주의바람. 댓글로 알려주시면 바로 고치겠습니다.
모델 앙상블은 다양한 기계학습문제에서 정확도를 높인 매우 강력한 테크닉이다. 이 포스팅 에서는 Kaggle Competition에 쓰인 앙상블 기법을 설명하겠다.
처음은 제출파일로부터 앙상블을 만드는 것을 볼 것이고, 두번째 파트는 stacked generalization이나 blending을 통한 앙상블과 왜 앙상블이 일반화오차(generalization error)를 줄이는지를 볼 것이다.
마지막에는 다른 방법의 앙상블기법의 결과들을 보고 스스로 코딩을 하는 것을 보일 것이다.
This is how you win ML competitions: you take other peoples’ work and ensemble them together.” Vitaly Kuznetsov NIPS2014
Creating ensembles from submission files
앙상블을 하는 가장 기본적이고 편한 방법은 제출 CSV 파일(결과)들을 앙상블하는 것이다. 이 방법들을 사용한 테스트 셋의 결과들만 필요하므로, 학습모델을 얻을 필요가 없다. 이것은 이상적으로 팀을 합쳐 협업을 할때, 본래 존재하는 모델의 예측들을 앙상블하는 하나의 빠른 방법이다.
Voting ensembles
먼저 우리는 간단한 다수결 투표방식의 앙상블방법을 먼저 보자. 왜 모델 앙상블링이 오차율을 줄이는지, 왜 low-correlated한 예측들을 앙상블하는것이 더 잘 작동하는지를 보자.
Error correcting codes
space mission중에 올바르게 전달된 모든 신호들은 매우 중요하다. 만약 다음과같이 2진형태의 문자열 형태의 신호를 가졌다고 하자.
1110110011101111011111011011
어찌된 일인지 그 다음 신호에 오류가 생겼다. (비트1자리가 바뀌었다.)
1010110011101111011111011011
이는 생명들을 잃을 수도 있다.
coding solution은 error correcting code에서 설립되었다. 가장 단순한 오차수정코드는 repetition-code이다. 이는 동일한 크기의 데이터들로 많은 수의 신호를 받아 이 신호들을 투표하는 방식이다.
Original signal: 1110110011 Encoded: 10,3 101011001111101100111110110011 Decoding: 1010110011 1110110011 1110110011 Majority vote: 1110110011
신호오류는 매우 드물고 매우 작은 범위로 일어난다. 그렇다면 오류가 난 다수결 투표결과는 훨씬 더 드물것임을 알 수 있다.
오류가 예측하기 불가능하지 않은이상(50%의 발생활률), 신호는 고칠 수 있다.
A machine learning example
10개로 이루어진 하나의 표본이 있는 한 테스트 셋을 가졌다고 가정하자, 참 정보는 모두 positive('1')인 경우이다.
1111111111
더 나아가 70%의 정확도의 3 개의 (A,B,C) 이진분류기를 가졌다. 우리는 현재 이 분류기들을 70%확률로 '1'이나오고 30% 확률로 '0'이 나오는 모조-난수 생성기라고 볼 수 있다.
이제 어떻게 이 모조-분류기들이 투표방식의 앙상블기법을 통해 78%의 정확도를 얻을 수 있는지 보겠다.
A pinch of maths
3개의 멤버(분류기 A,B,C)의 다수결 투표로, 우리는 4가지 결과를 기대할 수 있다.
All three are correct
0.7 * 0.7 * 0.7
= 0.3429
Two are correct
0.7 * 0.7 * 0.3
+ 0.7 * 0.3 * 0.7
+ 0.3 * 0.7 * 0.7
= 0.4409
Two are wrong
0.3 * 0.3 * 0.7
+ 0.3 * 0.7 * 0.3
+ 0.7 * 0.3 * 0.3
= 0.189
All three are wrong
0.3 * 0.3 * 0.3
= 0.027
대부분 다수결투표가 오차를 고칠 확률이 높다, 위에서 보듯 다수결 투표에서 2개 이상 correct가 되어 결과적으로 correct('1')이 될 확률이 0.3429, 0.4409 로 높고 그렇지 않은 다수결 투표로 결과적으로 not correct('0')가 될 확률은 0.189, 0.027로 낮으므로 이 3개의 분류기를 앙상블한 이 모델은 0.78의 확률(정확도)로 올바른 결과(모두 '1')를 낼 것이다. 과정을 보면서도 느꼈겠지만 마지막에 앙상블할때 우리는 0.3429, 0.4409를 더했다. 즉 처음에 말했던 제일 간단한 앙상블 방법인 제출 csv파일(결과)들을 다 더하기에서 majority voting 시스템을 덧붙인 앙상블 기법이다.
Number of voters
repetition codes가 더 많은 code가 반복될 수록(자리수가 늘어날수록) 오류 수정능력은 증가하는 것과 같이. 앙상블도 앙상블 멤버가 더 증가함에 따라 성능이 보통 향상된다.
위와 같이 약간의 수학을 이용하면 : 70% 정확도를 가진 5개의 pseudo-random classifiers의 voting 앙상블은 약 83%의 성능을 냈고. 2개의 classifiers를 voting 앙상블을 했을 시 66%의 정확도를 내었다. (0.36015 + 0.3087)
Correlation
Marios Michailidis(KazAnova)가 KDD-cup 2014에 참여할 당시, 팀원에게 특이한 것을 제안했는데, 그는 피어슨 상관계수를 우리의 모든 제출 파일에 대해 계산하고, 상관관계가 적은 결과가 좋은 몇몇 모델들을 모으자고 했다.
다양한 제출모델들로부터 평균(averaging) 앙상블을 생성하여 우리는 리더보드에서 50위가 올랐다. 비상관관계의 제출모델들은 명백히 앙상블을 할때 상관관계가 있는 결과모델들의 앙상블 보다 더 좋은 성능을 내었다. 그런데 왜 그럴까?
이것을 보기 위해, 우리는 3가지 간단한 모델들을 다시보자. 기본적인 참 신호는 이전과 같이 모두 1일때이다.
1111111100 = 80% accuracy
1111111100 = 80% accuracy
1011111100 = 70% accuracy.
1111111100 = 80% accuracy
1111111100 = 80% accuracy
0111011101 = 70% accuracy
1000101111 = 60% accuracy
1111111101 = 90% accuracy
다수결 투표방식의 앙상블 기법은 평가측정이 어려운 예측이 필요할 때, 쓰는 것이 가장 타당하다. 예를 들어, 다중분류정확도(multiclass classification)를 측정할때 다수결(Majority) 앙상블 기법은 좋은 성능을 낼 수 있다.
Use for Kaggle : CIFAR-10 Object detection in images
정확도가 중요한 또 하나의 multi-class classification challenge인 CIFAR-10가 있다.
이 챌린지에서 팀리터인 Phil Culliton은 Dr.Graham의 모델을 복제해 좋은 성능을 내는 setup을 찾았다. 그 다음, 약 30개의 convnet 모델들(모두 90%이상의 정확도를 내는)을 사용했다. 앙상블(멤버)중에서 최고의 단일 모형의 정확도는 0.93170이었다. 30개 모형의 voting 앙상블 모형은 0.94120을 기록했다. 약 0.01정도의 오차율을 줄인것이다. 이 결과는 추정된 인간의 분류정확도를 넘는 정확도이다.
Code
우리의 예제 voting script를 MLWave Github repo에서 사용할 수 있다. Kaggle submission의 디렉토리에서 작동한다. 그리고 새로운 submission을 생성해라. Armando Segnini가 가중치를 입력했다.
Ensembling. Train 10 neural networks and average their predictions. It’s a fairly trivial technique that results in easy, sizeable performance improvements.
One may be mystified as to why averaging helps so much, but there is a simple reason for the effectiveness of averaging. Suppose that two classifiers have an error rate of 70%. Then, when they agree they are right. But when they disagree, one of them is often right, so now the average prediction will place much more weight on the correct answer.
The effect will be especially strong whenever the network is confident when it’s right and unconfident when it’s wrong. Ilya Sutskever A brief overview of Deep Learning.
Averaging
평균(Averaging)은 많은 범위의 문제(분류 그리고 회귀)와 측정법(AUC, squared error or logarithmic loss)에 대해 아주 잘 작동된다. 개별 모델예측치의 평균을 취하는 것 보다 averaging에 가깝진 않다. 이것을 캐글에서는 속히 말해 bagging submissions라고 한다.
Averaging prediction은 종종 과적합을 막아준다. 당신은 이상적으로 class들간 smooth하게 분류하기를 원한다. 단일 모델의 예측은 edge주변에서 약간 거칠게 그려질 수 있다.
위 그림은 Don't Overrfit라는 Kaggle 대회이다, 검은색 선은 초록샌선보다 더 나은 분류를 하고 있다. 초록색 선은 데이터의 noise 데이터까지 학습했기 때문인데, 걱정하지마라 여러 다른 초록색 선을 Average하여 검정색 선에 가까운 선을 만들 수 있다.
우리의 목표가 훈련 데이터를 기억하는 것이 아니라 (랜덤 포레스트보다 데이터를 저장하는 훨씬더 효율적인 방법들이 있다.) 보지 모샇ㄴ 새로운 데이터에 잘 일반화를 시키는 것임을 기억해라.
퍼셉트론은 데이터가 선형분류가 가능할때 한 분류선을 찾아주는 아주 좋은 선형분류기이다. 이것은 좋은 특성이지만, 일단 분류기를 한번 찾게된다면, 훈련을 끝낸다. 이것은 새로운 데이터에 대해서 최적의 분류선을 반드시 찾진 않는다.
그렇다면, 임의적인 가중치를 가진 5개의 퍼셉트론들로 시작하여 나중에 평균을 하여 합치면 어떻게 될까? 놀랍게도 우리는 테스트 셋에서 성능향상을 얻었다.
10개의 정확하게 같은 선형회귀를 평균하기 때문에 penalty도 받지 않을 것이다. Single poorly cross-validated and overfitted된 제출모델들을 배깅하는것은 밀도를 더하는것(그러므로 더 적은 상관관계를 가짐)을 통해 정확도를 더 얻을 수 있을것이다,
Code
input으로 CSV 파일의 한 디렉토리를 받고 이를 합하여 평균하는 averaging script 를 github에 올렸다.
Update: Dat Le has added a geometric averaging script. Geometric mean can outperform a plain average.
Rank averaging
다수의 다른 모델로부터의 결과들을 평균할때, 몇몇 문제가 나올 수 있다. 모든 예측들이 완벽하게 보정이 되지 않았다. 즉 기준이 약간씩 달라, 높거나 낮은 확률을 예측할때 과대하게 혹은 과소하게 신뢰된다. 예측들은 특정 범위주위에 몰려 있다.
극단적인 경우로, 아래와 같은 결과를 가질 수 도 있다.
Id,Prediction
1,0.35000056
2,0.35000002
3,0.35000098
4,0.35000111
이러한 예측은 평가척도가 순위 혹은 AUC같은 것에 기반한 threshold 일때 좋은 성적을 낼 수도 있다. 그러나 다음과 같은 모델을 평균할 때
Id,Prediction
1,0.57
2,0.04
3,0.96
4,0.99
앙상블 결과는 전혀 바뀌지 않을 것이다. 이러한 해결책으로 예측값들을 순위로 먼저 바꾼후에, 순위들을 평균하는것이다.
Id,Rank,Prediction
1,1,0.35000056
2,0,0.35000002
3,2,0.35000098
4,3,0.35000111
0에서 1사이로 평균화된 순위들을 normalizing 한 후에는 예측값들이 고른 분포를 얻을 것이다. 순위평균앙상블의 결과는 다음과 같다.
Id,Prediction
1,0.33
2,0.0
3,0.66
4,1.0
Historical ranks
이제 순위는 훈련데이터셋에는 만들어 졌지만 테스트셋에서는 없다. 이 순위의 테스트셋이 필요할때 어떻게 해야하는가? 여러분은 이전의 테스트셋으로 순위를 매길 수 있다. 그러나 이는 순위를 내는데 더 복잡해 질것이다. 하나의 해결책은 historical rank를 사용하는 것이다. 이전 테스트 셋의 예측값을 그들의 순위와 함께 저장한다. 그 다음 새로운 테스트 샘프을 예측할때, 예를들어 0.35000110 같이, 가장 가까운 prediction을 찾고 이 이전테스트 셋 prediction의 해당 순위를 할당한다. (이경우 0.35000111가 가장 가까운 prediction이고 이것의 rank는 3이다.) 프로세스를 간단히 정리하자면 일단 train으로 예측을 한 후 이를 순위화 시킨다. 이를 구(old)테스트 셋에 예측을 시킨다. 구 테스트 셋에서 나온 prediction과 rank를 가지고 신(new)테스트셋에 이를 다시 예측시키는 과정이다.
Kaggle use case : Acquire Valued Shoppers Challenge
순위평균은 순위매기기 그리고 threshold기반 척도법(AUC같은) 그리고 search-engine quality metrics(k번째에서 평균정확도 같은)
shopper challenge 의 목표는 한 쇼핑객이 주기적인 고객이 될 가능성의 순위를 내는 것이었다. 우리팀은 다중 Vowpal Wabbit model의 평균을 을 하나의 R GLMNet model과 같이 보았는데, 여기서 우리는 앙상블을 향상시키기위해 ranking average를 사용했다.
순위 평균이 상당한 향상을 냈음을 볼 수 있다.
마지막으로 fastML.com에서 이전 챕터의 bag-of-words 튜토리얼로부터 배깅한 퍼셉트론들을 가중순위평균을 할때 모델의 성능이 0.96328 AUC에서 0.96461 AUC로 향상되었다.
Code
A simple work-horse rank averaging script is added to the MLWave Github repo.
Competitions are effective because there are any number of techniques that can be applied to any modeling problem, but we can’t know in advance which will be most effective. Anthony Goldbloom Data Prediction Competitions — Far More than Just a Bit of Fun
Stacked Generalization & Blending
제출된 예측 파일들을 평균하여 만든 모델은 좋고 만들기도 쉽지만 이것이 캐글상위랭커들의 유일한 방법은 아니다. 이 부분에서 나오는 방법은 stacking 과 blending으로 시작한다.
Netflix
넷플릭스는 첫 데이터사이언스 대회를 개최하고 대중화시켰다. 영화 추천 챌린지 대회참가자들은 앙상블기법을 예술의 경지까지 끌어올렸다. 너무 끌어올렸는지, 넷플릭스는 우승솔루션을 실제로 사용하지 않기로 결정했는데, 이유는 간단했다. 너무 복잡하기 때문이다.
그럼에도 불구하고, 수많은 논문들과 훌륭한 방법들이 이 대회로부터 나왔다.
- Feature-Weighted Linear Stacking
- Combining Predictions for Accurate Recommender Systems
- The BigChaos Solution to the Netflix Prize
- 훈련 셋을 2부분으로 나눈다. : train_a 와 train_b
- train_a에서 첫단계 모델을 적합시킨다. 그런다음 train_b에서 예측을 한다.
- 같은 모델을 train_b에서 적합시키고 train_a에 대해서 예측을 한다.
- 마지막으로 전체 훈련셋에 대해 모델을 적합시키고 원래의 test셋에 대해 예측을 한다.
- 이제 두번째 단계 stacker 모델을 첫번째 단계 모델로 부터 나온 확률들(test 예측값, train_a에 대한 예측값, train_b에 대한 예측값)에 대해 훈련시킨다. (이를 통해 일반화 오차를 줄일수 있다. 이 부분이 앙상블 하는 부분이라고 보면된다.)
- stacking 보다 단순하다.
- 정보 누출을 하지 않는다. : generalizer들과 stacker들은 다른 데이터를 사용한다.
- 팀원과 몇개의 folds인지 대한 시드를 공유할 필요가 없다. 누구든 blender에 모델들을 넣고 blender가 각 모델을 유지할지 말지를 결정한다.
- 전체적으로 적은 데이터를 사용한다.
- 최종모델은 holdout 셋에 과적합됐을수도 있다.
- CV는 하나의 small holdout셋을 사용하는 것 보다.(더 많이 fold될수록) stacking과 더 잘 맞는다.
Kaggle use: “Papirusy z Edhellond”
필자는 Emanuele의 blending 모델을 inClass competition에서 사용했었다. 8개의 base 모델들을 logistic 회귀로 stacking 하여 내 2번째 최고 성능(0.99409 accuracy)을 내었다. 이 성능은 일등을 하기에 충분했다.
Kaggle use: KDD-cup 2014
이 스크립트를 사용하여, Yan Xu의 모델을 향상시킬수 있었다. stacking 전의 성능은 ~0.605 AUC 였고 stacking 후의 성능은 ~0.625 AUC 으로 향상되었다.
Stacking with non-linear algorithms
stacking에서 가장 인기있는 비선형 알고리즘들은 GBM, KNN, NN, RF, 그리고 ET 이다. 다계층문제(multiclass problem)에서 본래변수(origianl features)들을 가진 비선형 stacking은 놀라운 성과를 낸다. 명백하게도, first-stage 예측들은 매우 유용하고 높은 변수중요도(feature importance)를 얻는다. 비선형 알고리즘들은 본래변수들과 메타모델 변수들사이에서 강력한 상호작용을 찾아낼 수 있다.
Kaggle use: TUT Headpose Estimation Challenge
TUT Headpose Estimation 대회는 다계층-다중라벨(multiclass-multilabel) 분류대회이다. (참고)
각 라벨마다, 다른 앙상블 모형이 훈련된다. 다음 표는 개별모형을 훈련시킨 결과와 ET(Extremely randomized Tree model)을 사용해 예측한 클래스확률을 stacking 할때의 향상된 스코어를 보여준다.
MODEL | PUBLIC MAE | PRIVATE MAE |
---|---|---|
Random Forests 500 estimators | 6.156 | 6.546 |
Extremely Randomized Trees 500 estimators | 6.317 | 6.666 |
KNN-Classifier with 5 neighbors | 6.828 | 7.460 |
Logistic Regression | 6.694 | 6.949 |
Stacking with Extremely Randomized Trees | 4.772 | 4.718 |
표준모델들로 stacked generalization을 한 모델이 각 표준모형들 보다 약 30%정도까지 더 오차를 줄일 수 있다!
자세한 사항은 이 논문을 읽어 보기 바란다. : Computer Vision for Head Pose Estimation: Review of a Competition.
Code
여러분은 CV예측을 만들수 있는 함수를 MLWave 깃허브에서 찾을 수 있습니다. 여러분이 blended 데이터셋을 얻기 위해서 numpy horizontal stacking(hstack)을 사용하여 만들 수도 있습니다.
Feature weighted linear stacking
Vowpal Wabbit은 만약 우리가 다음과 같은 훈련셋을 가지고 있다면, 독창적인 feature-weighted linear stacking을 만들 수 있다고 했다.
1 |f f_1:0.55 f_2:0.78 f_3:7.9 |s RF:0.95 ET:0.97 GBM:0.92
우리는 2차 변수 상호작용식, fs을 s 피쳐공간과 f 피쳐공간사이에 추가시킬수 있다. f 이름공간에 있는 변수들은 논문에서와 같이 조저오딘 메타피쳐들 될수도 혹은 본래피쳐들(original features)이 될 수도 있습니다.
Quadratic linear stacking of models
1 |f f_1:0.55 f_2:0.78 f_3:7.9 |s RF:0.95 ET:0.97 GBM:0.92
우리는 ss로 모델 예측사이의 2차 피쳐상호작용식(RF*GBM)을 생성하여 모델을 훈련할 수 있다. 이것은 feature-weighted linear stacking과 쉽게 결합될 수 있다. (fs , ss 둘 다 향상시킬수 있다.)
이제 여러분은 많은 base 모델들이 어디서 만들어져야 하는지에 대한 한 예를 봤다. 여러분은 base 모델들 중 apriori 알고리즘이 마지막 메타 모델에서 도움이 될거란 걸 모른다. two stage 모델의 경우에, 아주 약한 성능을 내는 base 모델들이 선호된다.
그러면 왜 이 base 모델들을 정말 조정해야 하는걸까? 아마도 tuning이 여기서는 단지 모델의 다양성을 얻기 위한것일 뿐이다. 하지만 후에 여러분은 어느 base 모델이 도움이 되는지 모를것이고 그리고 마지막 단계에서는 선형이 될것이다. (즉 tuning이 필요하지 않거나 sparsity를 주는 한개의 파라미터가 필요하다.) - Mike KimTuning doesn’t matter. Why are you doing it?
Stacking classifiers with regressors and vice versa
- 2만달러 미만은 class1.
- 2만에서 4만달러 사이는 class2.
- 4만 달러 초과는 class 3.
이 class들에 대한 예측확률은 stacking 회귀가 더 좋은 예측을 할수있도록 도와준다.
"나는 CV 예측치들 없이는, 어느곳도 가지 않을거야. 만약 내가 하와이를 가든 화장실을 가든 CV예측치를 가지고 갈꺼야! 왜냐하면 언제 2번째나 3번째 level의 메타-분류기를 훈련시켜야 하는지 모르기 때문이야. " - T. Sharf
Stacking unsupervised learned features
Online Stacking
Everything is a hyper-parameter
- Not scaling the data
- Standard-Scaling the data
- Minmax scaling the data
들은 앙상블 성능을 향상시키기 위해 조정되는 하이퍼파라미터들이다, 이와 마찬가지로, base model의 숫자 또한 최적화할 파라미터로 볼 수 있다. Feature selection 또는 imputation들은 메터피쳐들의 다른 예이다.
random gridsearch이 알고리즘 파라미터를 조절하는 좋은 방법이듯, 메타 파라미터들을 조절하는데도 작용한다.
"때때로 XGBoost가 KNN 분류기가 본 것을 보게 해주는것이 유용하다." – Marios Michailidis
Model Selection
- 즉각적인 방법 : 성능이 좋은 앙상블을 직접 선택한 것에 평균, 보팅 또는 순위평균
- Greedy forward model selection (Caruana et al.). 3개 이상의 좋은 모델의 base 앙상블로 시작. train 데이터 셋의 스코어가 최고치일때 모델을 하나 더 추가. 모델을 빼는것도 허용되기 때문에, 단일 모델이 여러번 선택될 수도 있다.
- Genetic model selection 은 유전 알고리즘과 CV-스코어를 적합함수로 사용한다. 예를 들어 inversion의 솔루션을 보자 - ‘Strategy for top 25 position‘.
- Caruana’s method을 참고해 random method를 사용한다. : 100개 이상의 앙상블을 제거없이(without placeback)임의적으로 선택하여 만든다. 그 다음 최고로 높은 스코어를 내는 모델을 선택한다.
Automation
Otto product classification 대회에서 stacking을 사용했을때, 나는 top10에 빠르게 진입할 수 있었다. 더 많은 base 모델들과 다수의 stacking을 배깅하여, 나의 스코어를 계속 향상시킬 수 있었다. 만들기 시작하기도 겁나는, 7개의 base 모델들이 있는 6개의 stacker를 본적이 있었다. 내가 이걸 따라 할 수 있을까? 이 복잡하고 다루기 힘든 모델은 빠르고 간단한 머신러닝을 추구하는 나의 영역에서 벗어난 모형이었다.
나는 stacking을 자동화하는 방법을 연구하며 나머지 시간을 보냈다. base모델들을 순수한 random parameter를 사용한 순수한 random algorithm으로 훈련시켰다. Wrapper들은 scikit-learn API와 잘 작동되는 VW, Sofia-ML, RGF, MLP 그리고 XGBoost 같은 분류기들을 만들기 위해 써졌다.
The first whiteboard sketch for a parallelized automated stacker with 3 buckets
stacker들로, base model의 random subset과 random parameter를 사용한 SVM, RF, ET, GBM 그리고 XGB를 사용했다.
마침내,생성된 stacker들을 그들의 훈련셋의 CV 예측들이 더 작은 손실/비용을 낼 때, 평균한다.
대회가 끝나기 일주일 전까지 이 automated stacker는 57위를 했다.이 모델은 나의 최종 앙상블 모델에 기여했다. 이 모델과 유일하게 다른 점은 feature selecting과 파라미터 튜닝에 절대 시간을 쓰지 않았다는 것이다. 모델을 돌려놓고 잠자고 일어나면 좋은 결과가 나왔었다.
The automated stacker is able to get a top 10% score without any tuning or manual model selection on a competitive task with over 3000 competitors.
automated stacking은 내가 최근 가진 큰 관심사들중 하나이다. 다음 몇몇 포스팅에서 이에 대해 다룰것이다. automatic stacking의 가장 좋은 결과는 TUT Headpose Estimation challenge 에서 나왔다. 이 black-box모형은 특정 문제에 특화된 알고리즘을 만드는 도메인 전문가들에 의해 만들어진 최신 모델을 꺾었다.
여기서 주목할 것은, 이것은 multi-label classification문제였다. "yaw" 와 "pitch" 둘에 대한 예측들이 필요했다. "yaw"와 "pitch" 가 상호연관되어 있기 때문에, "yaw"에 대한 예측들과 한 모델을 stacking 하는것이 "pitch"에 대한 예측 정확도를 높였다. 역으로도 같은 결과가 나온다. 매우 흥미로운 결과였다.
하나의 네트워크로써 시각화된 모델들은 back-propagation을 사용해 훈련시킬 수 있다. 그러면 stacker 모델들은 어느 base model들이 오차를 가장 많이 줄이는지 학습하게 된다.
CV-scores를 낸 다음에, 시각화 된 모델들은 CV-scores의 표준편차를 설명할수 있다. (더 작은 편차가 더 안전한 선택이다.) 또한 복잡성과 메모리 사용량 그리고 실행시간을 최적화하는 것을 볼 수 있다. 마지막으로 상관관계가 만들어 지는 것을 볼수 있다. 앙상블을 만들때 상관관계가 낮은 모델을 선호하도록 코딩할 수 있다.
전체 automated stacking pipeline은 병렬 분산화 될수 있다. 이것은 속도향상과 한 컴퓨터에서 더 빠른 좋은 결과를 가져온다.
Contextual bandit optimization 은 fully random gridsearch의 좋은 대체방법같아 보인다. 우리는 알고리즘이 좋은 파라미터와 모델들을 만들어 내길 원하고 우리의 알고리즘에 지난번 선택한 random SVM이 메모리를 다 사용해버린 것을 기억하길 원한다. 이것에 대해서는 나중에 더 자세히 다를것이다.
반면, 이를 MLWave github repo에서 미리 볼수 있다. :“Hodor-autoML“.
Otto product classification challenge의 1,2등은 1000개 이상의 다른 모델들들을 앙상블로 사용하였다. 여기서 더 자세한 사항을 볼 수 있다. first place / second place
Why create these Frankenstein ensembles?
- You can win Kaggle competitions.
- You can beat most state-of-the-art academic benchmarks with a single approach.
- You can then compare your new-and-improved benchmark with the performance of a simpler, more production-friendly model
- One day, today’s computers and clouds will seem weak. You’ll be ready.
- It is possible to transfer knowledge from the ensemble back to a simpler shallow model (Hinton’s Dark Knowledge, Caruana’s Model Compression)
- Not all base models necessarily need to finish in time. In that regard, ensembling introduces a form of graceful degradation: loss of one model is not fatal for creating good predictions.
- Automated large ensembles ward against overfit and add a form of regularization, without requiring much tuning or selection. In principle stacking could be used by lay-people.
- It is currently one of the best methods to improve machine learning algorithms, perhaps telling use something about efficient human ensemble learning.
- A 1% increase in accuracy may push an investment fund from making a loss, into making a little less loss. More seriously: Improving healthcare screening methods helps save lives.
Update: Thanks a lot to Dat Le for documenting and refactoring the code accompanying this article. Thanks to Armando Segnini for adding weighted averaging. Thanks a lot everyone for the encouraging comments. My apologies if I have forgotten to link to your previous inspirational work. Further reading at “More is always better – The power of Simple Ensembles” by Carter Sibley, “Tradeshift Benchmark Tutorial with two-stage SKLearn models” by Dmitry Dryomov, “Stacking, Blending and Stacked Generalization” by Eric Chio, Ensemble Learning: The wisdom of the crowds (of machines) by Lior Rokach, and “Deep Support Vector Machines” by Marco Wiering.
Terminology: When I say ensembling I mean ‘model averaging’: combining multiple models. Algorithms like Random Forests use ensembling techniques like bagging internally. For this article we are not interested in that.
The intro image came from WikiMedia Commons and is in the public domain, courtesy of Jesse Merz.
'기사/블로그 스크랩' 카테고리의 다른 글
데이터에 맞는 그래프를 제안해주는 사이트 (0) | 2016.04.28 |
---|---|
[강화학습 기반의 자율적인 행동 학습] (0) | 2016.03.10 |
[JTBC]냉장고를 부탁해 - 머신러닝 알고리즘을 활용한 각종 분석 (0) | 2016.03.02 |
10 Machine Learning Algorithms Explained to an ‘Army Soldier’ (0) | 2016.02.23 |
Image Text Recognition in Python (0) | 2016.02.04 |