首页 > 解决方案 > XGboost + GridSearch:有线警告

问题描述

下面是我使用 RandomizedSearchCV 为 XGboost 的超参数调优编写的代码

from sklearn.model_selection import RandomizedSearchCV
from sklearn.metrics import make_scorer, accuracy_score, precision_score, recall_score, auc
from pprint import pprint
from xgboost import XGBClassifier
import time


# instantiate XGBoost model
clf = XGBClassifier(missing=np.nan, nthreads=-1)

# Define scoring metrics
scorers = {
    'accuracy_score': make_scorer(accuracy_score),
    'precision_score': make_scorer(precision_score),
    'recall_score': make_scorer(recall_score)
}

param_grid_dummy = {  
    "n_estimators": [25, 250],
    "max_depth": [3,5],
    "learning_rate": [0.0005, 0,005],
}

def random_search_wrapper(refit_score = 'precision_score'):

    """
    fits a RandomizedSearchCV classifier using refit_score for optimization
    prints classifier performance metrics
    """

    rf_random = RandomizedSearchCV(estimator = clf, param_distributions = param_grid_dummy, n_iter = 3, scoring=scorers, refit = refit_score, cv = 3, return_train_score= True, n_jobs= -1)  


    rf_random.fit(X_train_df, Y_train)

    # make the predictions
    Y_pred = rf_random.predict(X_test_df)

    print('Best params for {}'.format(refit_score))
    print(rf_random.best_params_)

    # confusion matrix on test data
    print('\nConfusion matrix of Random Forest optimized for {} on the test data: '.format(refit_score))
    print(pd.DataFrame(confusion_matrix(Y_test, Y_pred),
                       columns = ['pred_neg', 'pred_pos'], index = ['neg', 'pos']))

    return rf_random

# Optimize classifier for recall score
start = time.time()
rf_random_cl = random_search_wrapper(refit_score='precision_score')
# Print time
end = time.time()
print()
print((end - start)/60, "minutes")

我收到有线警告。

/anaconda3/lib/python3.7/site-packages/sklearn/preprocessing/label.py:151: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.
  if diff:

有人可以帮我理解我在这里做错了什么吗?

当我做简单的 clf.fit(X_train_df, Y_train)。它工作得很好

标签: xgboosthyperparameters

解决方案


这是 sklearn 版本的问题。少数版本 < 0.20.1 抛出此错误

代码是正确的。


推荐阅读