关于sklearn中GridSearch等中中scoring参数,有两个问题,一个问题关于一些不可能为负数的指标输出的误差有负数,说明其中做了一些处理,至于怎么处理的还没看懂,留着有空了看一下。还有一个问题是格网调参的时候的cv参数。
问题1:非负指标有负数,做了什么处理为什么这么处理。
参考链接:https://stackoverflow.com/questions/21050110/sklearn-gridsearchcv-with-pipeline
https://stackoverflow.com/questions/26282884/why-is-the-logloss-negative?noredirect=1&lq=1
https://stackoverflow.com/questions/21443865/scikit-learn-cross-validation-negative-values-with-mean-squared-error?noredirect=1&lq=1
问题2:自己定义得分函数(得分和损失函数),比较重要的一点是注意指标是越大越好还是越小越好,需要使用一个参数greater_is_better指定。
参考链接:
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html
https://scikit-learn.org/stable/auto_examples/model_selection/plot_multi_metric_evaluation.html#sphx-glr-auto-examples-model-selection-plot-multi-metric-evaluation-py
问题3:cv参数有四种情况:
None, to use the default 5-fold cross validation,
integer, to specify the number of folds in a (Stratified)KFold
,
CV splitter,
An iterable yielding (train, test) splits as arrays of indices.
主要针对最后一种,可以自定义一个迭代器,每次输出训练集和测试集的下标。针对我使用的神经网络这种有随机模型需要针对一个数据集运行多次,这样只需要构造一个迭代器每次输出都是同一个数据集,这样就达到了重复多次的效果,然后格网搜索会自动统计都次运行得分的方差,得分平均值或者中位数。
(写的比较简略,欢迎交流,后面有时间再补充。)