[英]Is it necesary to use make_scorer in the scoring argument for pre-defined score object in cross-validation?
[英]Sklearn: Custom scorer on pre-defined split
我想通过将它与使用train_test_split
在预定义拆分上的手动计算(可以这么说)进行比较来确保我的自定义评分函数按预期train_test_split
。
但是我似乎无法将拆分传递给cross_val_score
。 默认情况下,它使用 3 折交叉验证,我无法模仿它使用的拆分。 我认为答案在于cv
参数,但我不知道如何以正确的形式传递可迭代对象。
如果您有预定义的拆分,您只需简单地训练模型并将自定义评分函数应用于测试数据的预测以匹配计算。 您不需要使用cross_val_score
。
我很确定有更好更简单的方法,但这是我想出的,因为cross_val_score
文档并不是很清楚。
你是对的,这是关于你如何使用cv
参数,我使用了这种格式: An iterable yielding train, test splits
。
这个想法是创建一个产生训练、测试分割索引的对象,我参考了: http : //fa.bianp.net/blog/2015/holdout-cross-validation-generator/ 。
假设您已经有一个列车测试分组。 我使用了sklearn
内置拆分并返回了索引:
from sklearn.model_selection import cross_val_score
X_train, X_valid, y_train, y_valid, indices_train, indices_test = train_test_split(train_X, train_y, np.arange(X_train.shape[0]), test_size=0.2, random_state=42)
然后,我创建一个类来生成列车,使用train_test_split
的输出测试拆分索引:
class HoldOut:
def __init__(self, indices_train, indices_test):
self.ind_train = indices_train
self.ind_test = indices_test
def __iter__(self):
yield self.ind_train, self.ind_test
然后你可以简单地将Holdout
对象传递给cv
参数:
cross_val_score(RandomForestClassifier(random_state=42, n_estimators=10), train_X, train_y,
cv=HoldOut(indices_train, indices_test), verbose=1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.