gpt4 book ai didi

python - 将 sklearn GridSearchCV 与 CaliberatedClassifierCV 一起使用是否有意义?

转载 作者:太空宇宙 更新时间:2023-11-03 19:44:05 24 4
gpt4 key购买 nike

我想要做的是导出一个分类器,该分类器的参数相对于给定的指标(例如召回分数)是最佳的,但也经过校准(从某种意义上说,predict_proba 方法的输出可以直接解释)作为置信水平,请参阅 https://scikit-learn.org/stable/modules/calibration.html )。将 sklearn GridSearchCV 与 CaliberatedClassifierCV 一起使用是否有意义,即通过 GridSearchCV 拟合分类器,然后将 GridSearchCV 输出传递给 CaliberatedClassifierCV 对象?如果我是正确的,CalibrateClassifierCV 对象将适合给定的估计器 cv 时间,然后对每个折叠的概率进行平均以进行预测。但是,对于每个折叠,GridSearchCV 的结果可能不同。

最佳答案

是的,你可以做到这一点并且它会起作用。我不知道这样做是否有意义,但我至少能做的就是解释我相信会发生什么。

我们可以将这样做与替代方案进行比较,即从网格搜索中获取最佳估计器并将其输入校准。

  1. 简单地获得最佳估计器并将其输入到calibrationcv
from sklearn.model_selection import GridSearchCV
from sklearn import svm, datasets
from sklearn.calibration import CalibratedClassifierCV

iris = datasets.load_iris()
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
svc = svm.SVC()
clf = GridSearchCV(svc, parameters)
clf.fit(iris.data, iris.target)
calibration_clf = CalibratedClassifierCV(clf.best_estimator_)
calibration_clf.fit(iris.data, iris.target)
calibration_clf.predict_proba(iris.data[0:10])

array([[0.91887427, 0.07441489, 0.00671085],
[0.91907451, 0.07417992, 0.00674558],
[0.91914982, 0.07412815, 0.00672202],
[0.91939591, 0.0738401 , 0.00676399],
[0.91894279, 0.07434967, 0.00670754],
[0.91910347, 0.07414268, 0.00675385],
[0.91944594, 0.07381277, 0.0067413 ],
[0.91903299, 0.0742324 , 0.00673461],
[0.91951618, 0.07371877, 0.00676505],
[0.91899007, 0.07426733, 0.00674259]])

  • 在校准简历中输入网格搜索

  • from sklearn.model_selection import GridSearchCV
    from sklearn import svm, datasets
    from sklearn.calibration import CalibratedClassifierCV

    iris = datasets.load_iris()
    parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
    svc = svm.SVC()
    clf = GridSearchCV(svc, parameters)
    cal_clf = CalibratedClassifierCV(clf)
    cal_clf.fit(iris.data, iris.target)
    cal_clf.predict_proba(iris.data[0:10])

    array([[0.900434 , 0.0906832 , 0.0088828 ],
    [0.90021418, 0.09086583, 0.00891999],
    [0.90206035, 0.08900572, 0.00893393],
    [0.9009212 , 0.09012478, 0.00895402],
    [0.90101953, 0.0900889 , 0.00889158],
    [0.89868497, 0.09242412, 0.00889091],
    [0.90214948, 0.08889812, 0.0089524 ],
    [0.8999936 , 0.09110965, 0.00889675],
    [0.90204193, 0.08896843, 0.00898964],
    [0.89985101, 0.09124147, 0.00890752]])

    请注意,两者的概率输出略有不同。

    每种方法的区别是:

    1. 使用最佳估计器仅在 5 个分割(默认 cv)之间进行校准。它在所有 5 个分割中使用相同的估计器。

    2. 使用网格搜索,将对校准后的 5 个 CV 分割中的每一个进行网格搜索 5 次。本质上,每次为 4/5 的数据选择最佳估计器时,您都会对 4/5 的数据进行交叉验证,然后在最后 5 日使用该最佳估计器进行校准。根据网格搜索选择的内容,您可以在每组测试数据上运行略有不同的模型。

    我认为网格搜索和校准是不同的目标,所以在我看来,我可能会分别处理每个目标,并采用上面指定的第一种方法获得效果最好的模型,然后将其输入校准曲线中。

    但是,我不知道你的具体目标,所以我不能说这里描述的第二种方法是错误的方法。您始终可以尝试这两种方法,看看哪种方法可以提供更好的性能,然后选择最有效的一种。

    关于python - 将 sklearn GridSearchCV 与 CaliberatedClassifierCV 一起使用是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60264419/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com