Pertanyaan ini telah ditanyakan beberapa kali sebelumnya. Tapi saya mendapatkan kesalahan saat mengikuti jawabannya

Pertama saya tentukan bagian mana yang merupakan training set dan validasi set sebagai berikut.

my_test_fold = []


for i in range(len(train_x)):
    my_test_fold.append(-1)

 for i in range(len(test_x)):
    my_test_fold.append(0)

Dan kemudian pencarian grid dilakukan.

from sklearn.model_selection import PredefinedSplit
param = {
 'n_estimators':[200],
 'max_depth':[5],
 'min_child_weight':[3],
 'reg_alpha':[6],
    'gamma':[0.6],
    'scale_neg_weight':[1],
    'learning_rate':[0.09]
}




gsearch1 = GridSearchCV(estimator = XGBClassifier( 
    objective= 'reg:linear', 
    seed=1), 
param_grid = param, 
scoring='roc_auc',
cv = PredefinedSplit(test_fold=my_test_fold),
verbose = 1)


gsearch1.fit(new_data_df, df_y)

Tapi saya mendapatkan kesalahan berikut

 object of type 'PredefinedSplit' has no len()
1
Pubudu 14 Agustus 2017, 18:25

2 jawaban

Jawaban Terbaik

Coba ganti

cv = PredefinedSplit(test_fold=my_test_fold)

Dengan

cv = list(PredefinedSplit(test_fold=my_test_fold).split(new_data_df, df_y))

Alasannya adalah Anda mungkin perlu menerapkan metode pemisahan untuk benar-benar membaginya menjadi pelatihan dan pengujian (dan kemudian mengubahnya dari objek yang dapat diubah menjadi objek daftar).

1
Miriam Farber 14 Agustus 2017, 15:55

hypopt Paket Python (pip install hypopt), yang saya sebagai penulisnya , dibuat untuk tujuan yang tepat ini: pengoptimalan parameter dengan set validasi. Ia bekerja dengan model scikit-learn dan dapat digunakan dengan Tensorflow, PyTorch, Caffe2, dll.

# Code from https://github.com/cgnorthcutt/hypopt
# Assuming you already have train, test, val sets and a model.
from hypopt import GridSearch
param_grid = [
  {'C': [1, 10, 100], 'kernel': ['linear']},
  {'C': [1, 10, 100], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
 ]
# Grid-search all parameter combinations using a validation set.
opt = GridSearch(model = SVR(), param_grid = param_grid)
opt.fit(X_train, y_train, X_val, y_val)
print('Test Score for Optimized Parameters:', opt.score(X_test, y_test))
-1
cgnorthcutt 5 Februari 2020, 22:45