J'essaie d'obtenir les meilleurs hyperparamètres pour XGBClassifier qui conduiraient à obtenir la plupart des attributs prédictifs. J'essaye d'employer RandomizedSearchCV pour itérer et valider par KFold. Comme j'exécute ce processus au total 5 fois (numFolds = 5), je veux que les meilleurs résultats soient sauvegardés dans une base de données appelée collector (spécifiée ci-dessous). Donc, à chaque itération, je voudrais que les meilleurs résultats et les scores soient ajoutés à la base de données du collecteur.Optimisation de l'hyperparamètre Python pour XGBClassifier utilisant RandomizedSearchCV
from scipy import stats
from scipy.stats import randint
from sklearn.model_selection import RandomizedSearchCV
from sklearn.metrics import
precision_score,recall_score,accuracy_score,f1_score,roc_auc_score
clf_xgb = xgb.XGBClassifier(objective = 'binary:logistic')
param_dist = {'n_estimators': stats.randint(150, 1000),
'learning_rate': stats.uniform(0.01, 0.6),
'subsample': stats.uniform(0.3, 0.9),
'max_depth': [3, 4, 5, 6, 7, 8, 9],
'colsample_bytree': stats.uniform(0.5, 0.9),
'min_child_weight': [1, 2, 3, 4]
}
clf = RandomizedSearchCV(clf_xgb, param_distributions = param_dist, n_iter = 25, scoring = 'roc_auc', error_score = 0, verbose = 3, n_jobs = -1)
numFolds = 5
folds = cross_validation.KFold(n = len(X), shuffle = True, n_folds = numFolds)
collector = pd.DataFrame()
estimators = []
results = np.zeros(len(X))
score = 0.0
for train_index, test_index in folds:
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
clf.fit(X_train, y_train)
estimators.append(clf.best_estimator_)
estcoll = pd.DataFrame(estimators)
estcoll['score'] = score
pd.concat([collector,estcoll])
print "\n", len(collector), "\n"
score /= numFolds
Pour une raison quelconque, il n'y a rien d'enregistré dans l'image, merci de nous aider.
En outre, j'ai environ 350 attributs à parcourir avec 3.5K lignes en train et 2K en test. Est-ce que l'exécution de ce processus d'optimisation hyperparamétrique bayésienne pourrait améliorer mes résultats? ou ce serait seulement économiser sur le temps de traitement?
Merci et cela aide! Savez-vous pourquoi cette erreur se produit et dois-je supprimer/réparer? /model_selection/_validation.py:252: FitFailedWarning: l'ajustement du classeur a échoué. Le score sur cette partition train-test pour ces paramètres sera fixé à 0.000000. Détails: XGBoostError ('valeur 1.8782 pour le paramètre colsample_bytree dépassé bound [0,1]',) "Détails: \ n% r"% (error_score, e), FitFailedWarning) – zad0xlik
le message d'erreur que vous avez posté indique 'XGBoostError (' La valeur 1.8782 pour le paramètre colsample_bytree dépasse bound [0,1] '.La raison pour laquelle vous obtenez cela est parce que '' colsample_bytree ': stats.uniform (0.5, 0.9) 'donnera une valeur parfois en dehors de la plage requise [0,1] pour ce paramètre. –