2016-04-09 29 views
-1

R'deki makine öğrenme paketlerinin/işlevlerinin hemen hepsi, bir model eğitimi alırken çapraz doğrulama performans ölçütlerini elde etmenizi sağlar.Çapraz doğrulanmış modeli çapraz olarak doğrulamak mümkün ve xgboost (xgb.cv) R?

clf <- xgb.cv(  params    = param, 
        data    = dtrain, 
        nrounds    = 1000, 
        verbose    = 1, 
        watchlist   = watchlist, 
        maximize   = FALSE, 
        nfold    = 2, 
        nthread    = 2, 
        prediction   = T 
) 

ancak bu bile prediction = T o seçeneği ile sen sadece tahmini alıyoruz: Ben, xgboost ile çapraz doğrulama yapmanın tek yolu söyleyebileceğim

kurulum için böyle bir xgb.cv ifadesi egzersiz verilerinden sonuçlanır. Sonuçta ortaya çıkan nesneyi (bu örnekte clf) yeni verilerle predict ifadesinde kullanmanın bir yolunu göremiyorum.

Anlayışım doğru mu ve herhangi bir iş var mı?

+0

Gönderiyi daha iyi hale getirebilmek için reddedilme hakkında bir yorum yapılacaktır. –

+0

Yanıt vericiyi değil, yanıtı sadece xgb.save (bst, "xgboost.model") 'dır; burada bst, xgb.train()' nin sonucudur ve sonra yeni bir veri kümesiyle yükler ve tahmin eder? Çapraz doğrulama sonuçlarının kaydedilmesi, hedeflerinizin anlaşılmasında yararlı görünmüyor. –

cevap

1

Anlayışınızın doğru olduğuna inanıyorum ve modelleri çapraz doğrulamadan kurtarmak için bir ayar yoktur. Ben, caret ayrıca her CV modeli kurtarmak için bir seçenek yanlış sahip olmamasıdır sürece

çapraz doğrulama üzerinde daha fazla denetim sağlamak için, Henüz

(burada http://topepo.github.io/caret/training.htmltrainControl işlevi hakkında daha fazla bilgi edinmek) caret ile xgboost modellerini eğitebilirsiniz Daha sonra tahmin etmek için kullanmak için (bunları değerlendirmek istediğiniz ölçüleri manuel olarak belirtebilirsiniz). CV modellerinin yeni veriyi öngörmek için kullanmanızın nedenine bağlı olarak, 1) CV modellerinin son modelden alınabilmesi için, bir modelin (çapraz doğrulama olmaksızın, aynı tohumla birlikte) yeniden incelenmesi verilerin sadece bu alt kümesi (caret 'ın train fonksiyonu tarafından üretilen nesne içinde $control$index listeden:

> library(MASS) # For the Boston dataset 
> library(caret) 
> ctrl <- trainControl(method = "cv", number = 3, savePred=T) 
> mod <- train(medv~., data = Boston, method = "xgbLinear", trControl = ctrl) 
> str(mod$control$index) 

List of 3 
$ Fold1: int [1:336] 2 3 4 6 8 9 13 14 17 19 ... 
$ Fold2: int [1:338] 1 2 4 5 6 7 9 10 11 12 ... 
$ Fold3: int [1:338] 1 3 5 7 8 10 11 12 14 15 ... 

veya 2) elle oluşturduğunuz tüm modelleri kurtarmak için lapply veya for döngü ile çapraz doğrulamak. caret'daki createFolds işlevler ailesi, çapraz doğrulama katlamalarını seçmek için yararlı bir araçtır.

+0

Cevabınız için teşekkür ederiz. Sadece belirli bir CV katına özel değil, tahmin için kullanabileceğim bir * model almaya çalışıyorum. Eğitim modellerini harcadığım zamanı iki katına çıkarmak istemiyorum. Aslında 'caret' ile neredeyse tüm model tipleri bu işlevselliği sağlar. Caret'in bir çözüm olduğunu düşünmemin sebebi, xgb'yi son kontrol ettiğimde son derece sınırlı işlevselliğe sahip olduğumdu. Geçen sene tuning yeteneklerini çok geliştirmiş görünüyorlar. Bunu kontrol edeyim ve bulduğum şeye göre cevap olarak işaretleyebilirim. –