我正在做一个 GridSearchCV,我已经定义了一个自定义函数(下面称为 custom_scorer)来优化。所以设置是这样的:
gs = GridSearchCV(estimator=some_classifier,
param_grid=some_grid,
cv=5, # for concreteness
scoring=make_scorer(custom_scorer))
gs.fit(training_data, training_y)
这是一个二元分类。因此,在网格搜索期间,对于超参数的每个排列,在对其他 4 个折叠进行训练之后,在 5 个剩余折叠中的每一个上计算自定义得分值。
custom_scorer 是一个带有 2 个输入的定标器值函数:一个数组包含基本事实(即 0 和 1)和一个数组包含预测概率(为 1,“正”类):
def custom_scorer(y, y_pred):
"""
(1) y contains ground truths, but only for the left-out fold
(2) Similarly, y_pred contains predicted probabilities, but only for the left-out fold
(3) So y, y_pred is each of length ~len(training_y)/5
"""
return scaler_value
但是假设 custom_scorer 返回的 scaler_value 不仅取决于和,但也知道哪些观察被分配到了左侧折叠。 如果我只有和(再次:分别为左侧折叠的基本事实和预测概率)当调用 custom_scorer 方法时,我不知道哪些行属于此折叠。我需要一种方法来跟踪在调用 custom_scorer 时将哪些 training_data 行分配给左侧折叠,例如行的索引。
关于最简单的方法的任何想法?如果需要澄清,请告诉我。谢谢!