我想同时验证两个scoring,但是cross_val_score好像一次只能设定一个。
我可以分别跑两次,
>>> cross_val_score(clf, X, y, scoring='log_loss')
>>> cross_val_score(clf, X, y, scoring='roc_auc')
但是太浪费时间了,我跑一次就需要3个小时,而且我的模型是一样的,只是想看这个模型在不同scoring下的分数。
有没有什么办法,能够实现类似
>>> cross_val_score(clf, X, y, scoring=[score1, score2, score3])
这样的功能?
2个回答
cross_val_score是无法做到一次交叉验证,同时返回多个不同的loss的。sklearn也许以后会增加这种功能,但是目前看来,下一版本还不会。
目前可行的方案,是使用sklearn.model_selection.cross_val_predict。
y_cv = cross_val_predict(clf, X, y)
roc_auc = metrics.roc_auc_score(y, y_cv)
logloss = metrics.log_loss(y, y_cv)
pr_auc = metrics.average_precision_score(y, y_cv)
... ...
这样的话,只需要做一次交叉训练,节约了时间。缺点就是无法知道每个fold的loss的数值。
高代兄懂真多!
-
DeGang
2017-05-10 11:16
写个循环就搞定了
for my_score in [score1, score2, score3, score4]:
print cross_val_score(clf, X, y, my_score)
这个本质上并没有解决题主的问题吧。
-
蓝色北方
2017-05-09 08:55