在进行超参数优化(hyperparameters optimazition)的时候,sklearn提供了GridSearchCV和RandomizedSearchCV两种超参数的搜索方式,在这两种方法里面,除了estimator和params外, scoring是模型在评价模型不同参数组合时的重要评价指标,这个评价指标除了官方自定义外,我们还可以进行自定义.
比如,在回归中,大部分使用的评价指标是RMSE和R2,这个在官方中是存在的,但是对于一些分类问题中的评价指标,或者我们做比赛过程中的评价指标往往需要我们自定义的.这里我自定义我做回归的RMSE和R2.
- 首先自定义函数比如my_rmse(y_true, y_pred),传入真实值和预测值,进行评价指标计算.注意,这里的名字要定义独特,防止与sklearn 类库出现重复的.
- make_scorer()放入自定义函数,参数greater_is_better表示这个数据越大模型越好, 比如回归中R2是greater_is_better = True,rmse是greater_is_better = False.
- 在使用时, 一定要在函数名后面加上().
def my_rmse(y_true, y_pred):
rmse = np.sqrt(mean_squared_error(y_true, y_pred))
#print('rmse: %.4f'%rmse)
return rmse
def my_r2(y_true, y_pred):
r2 = r2_score(y_true, y_pred)
#print('r2: %.4f'%r2)
return r2
def two_scorer(y_true, y_pred):
my_rmse(y_true, y_pred)
score = my_r2(y_true, y_pred)
return score
def two_scorers():
return make_scorer(two_scorer, greater_is_better = True)
def my_r2_scorer():
return make_scorer(my_r2, greater_is_better = True)
def my_rmse_scorer():
return make_scorer(my_rmse, greater_is_better = False)
clf = GridSearchCV(estimator = Catboost, scoring = my_r2_scorer(), param_grid = distributions, cv = train_cv, n_jobs = 4)
Reference:
How to create/customize your own scorer function in scikit-learn
网友评论