Soru:
Hiperparametre optimizasyonu ile XGboost.cv nasıl kullanılır?
Klausos
2015-11-28 16:42:18 UTC
view on stackexchange narkive permalink

Çapraz doğrulama kullanarak XGboost'un hiper parametrelerini optimize etmek istiyorum. Ancak modelin xgb.cv 'den nasıl elde edileceği net değil. Örneğin fmin ' den objektif (params) 'i çağırıyorum. Daha sonra model dtrain üzerine yerleştirilir ve dvalid üzerinde doğrulanır. Hyperopt import fmin'den dtrain?

  üzerine eğitim yerine KFold crossvalidation kullanmak istersem, xgbparams olarak tpeimport xgboost = {'n_estimators': hp.quniform ( 'n_estimators', 100, 1000, 1), 'eta': hp.quniform ('eta', 0.025, 0.5, 0.025), 'max_depth': hp.quniform ('max_depth', 1, 13, 1) #. ..} best = fmin (amaç, boşluk = parametreler, algo = tpe.suggest) def amaç (parametreler): dtrain = xgb.DMatrix (X_train, label = y_train) dvalid = xgb.DMatrix (X_valid, label = y_valid) izleme listesi = [(dtrain, 'train'), (dvalid, 'eval')] model = xgb.train (params, dtrain, num_boost_round, evals = watchlist, feval = myFunc) # xgb.cv (param, dtrain, num_boost_round, nfold = 5, tohum = 0, # feval = işlevim)  
Iki yanıtlar:
darXider
2016-09-01 20:21:30 UTC
view on stackexchange narkive permalink

Hiperparametre optimizasyonu için rastgele arama kullanarak F1 puanını optimize etmek için bir xgboost sınıflandırıcısını 5 kat çapraz doğrulama ile bu şekilde eğittim. Buradaki X ve y pandas veri çerçeveleri olmalıdır.

Scipy içe aktarma istatistiklerinden
 
xgboost'tan XGBClassifier'ı içe aktar
sklearn.model_selection'dan içe aktarma RandomizedSearchCV, KFold
sklearn.metrics'ten f1_score'u içe aktar

clf_xgb = XGBClassifier (amaç = 'ikili: lojistik')
param_dist = {'n_estimators': stats.randint (150, 500),
              'öğrenme_ hızı': stats.uniform (0.01, 0.07),
              'alt örnek': stats.uniform (0.3, 0.7),
              "maks_ derinlik": [3, 4, 5, 6, 7, 8, 9],
              'colsample_bytree': stats.uniform (0,5, 0,45),
              "min_child_weight": [1, 2, 3]
             }
clf = RandomizedSearchCV (clf_xgb, param_distributions = param_dist, n_iter = 25, skorlama = 'f1', error_score = 0, verbose = 3, n_jobs = -1)

numFolds = 5
kıvrımlar = KFold (n_splits = numFolds, shuffle = True)

tahmin ediciler = []
sonuçlar = np.zeros (len (X))
skor = 0.0
train_index için, folds.split (X) 'de test_index:
    X_train, X_test = X.iloc [train_index ,:], X.iloc [test_index ,:]
    y_train, y_test = y.iloc [train_index] .values.ravel (), y.iloc [test_index] .values.ravel ()
    clf.fit (X_train, y_train)

    estimators.append (clf.best_estimator_)
    sonuçlar [test_index] = clf.predict (X_test)
    puan + = f1_score (y_test, sonuçlar [test_index])
score / = numFolds
 

Sonunda, tahmin edicilerdeki eğitimli sınıflandırıcıların bir listesi, kat dışı tahminlerden oluşturulan sonuçlarda tüm veri kümesi için bir tahmin ve puan 'taki $ F_1 $ puanı için tahmin.

Bu kod num_boost_round ve early_stopping_rounds'u nasıl yönetir?
panc
2018-07-25 08:45:21 UTC
view on stackexchange narkive permalink

@ darXider'ın cevabına yorum yapacak kadar itibarım yok.Bu yüzden yorum yapmak için bir "cevap" ekliyorum.

Neden train_index için , katlamalarda test_index'e ihtiyacınız var: clf en iyi hiper parametre değerleri kümesini seçmek için zaten çapraz doğrulama yapıyor?

Kodunuzda, söz konusu katlama için en iyi modeli seçmek üzere beş katlamanın her biri için ("iç içe geçmiş" bir CV) CV oluşturuyorsunuz.Sonuç olarak, beş "en iyi" tahminciye sahip olacaksınız.Büyük olasılıkla, aynı hiper parametre değerlerine sahip değiller.

Yanılıyorsam düzeltin.

Evet, RandomizedSearchCV varsayılan olarak parametreleri belirlemek için 3 katlı CV kullanır.Gerekirse başka bir sayıda kat ile değiştirilebilir.
Bu, fark ettiğiniz gibi, iç içe geçmiş bir çapraz doğrulama şemasıdır ve haklı olarak, beş "en iyi" modelin aynı hiper-parametrelere sahip olmadığıdır.Bununla birlikte, sonunda, tahminlerinizi yapmak için 5 eşdeğer "en iyi" model elde edersiniz (ve bunları bir toplulukta kullanabilirsiniz).Dahası, bu şemanın sağladığı şey, size tüm veri seti için tahminler vermesidir (cevabımda bahsettiğim gibi, her modelin kat dışı tahminlerini birleştirerek).Ek olarak, size puandaki yayılma için bir tahmin de verir (tek bir değerin aksine).


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...