【问题标题】:Consistent answer to sci-kit learn GridSearchCVsci-kit学习GridSearchCV的一致答案
【发布时间】:2013-05-23 14:07:21
【问题描述】:

如何在 sci-kit learn 中使用 GridSearchCV 获得一致的答案?我假设我得到不同的答案 b/c 不同的随机数导致每次运行时折叠都不同,尽管我的理解是下面的代码应该解决这个问题,因为 KFold 默认具有 shuffle=False

clf = GridSearchCV(SVC(), param_grid, cv=KFold(n, n_folds=10))

【问题讨论】:

  • 一些估算器有random_state,这可能会改变结果。 SVC 应该是确定性的,正如您观察到的 KFold。您确定脚本的其余部分是确定性的吗?
  • 非常肯定。 SVCpredict_proba() 输出是确定性的吗?如果我没记错的话,会运行交叉验证来估计一些用于确定概率的参数,但这是在 LIBSVM 中完成的,我也认为是确定性的。我问 b/c 我实际上并没有使用SVC,而是我创建的一个名为ProbSVC 的子类,它将predict 映射到predict_proba
  • 看来predict_proba()不是确定性的……
  • 是的,predict_proba 进行了 5 倍(我认为)交叉验证来校准概率输出。此外,您应该使用 Scorer 接口而不是子类化 imho ;)
  • 在使用Scorer之前等待开发版本发布...我还不够专业,无法使用最前沿:)

标签: python machine-learning scikit-learn


【解决方案1】:

我想你正在寻找这个参数:random_state=7

大多数具有 random_state 参数的东西都将其保留为 None,这允许变化。

您必须将其设置为某个数字才能获得一致的结果。

我将它设置为 7,因为我喜欢 7。选择任何数字。

【讨论】:

    【解决方案2】:

    正如您在 cmets 中确定的,predict_proba 不是确定性的!

    但它确实接受一个随机状态(就像 KFold 一样)。我之前发现,如果您的数据是以非随机顺序收集的,那么设置 shuffle=False 会导致非常糟糕的结果,所以恕我直言,您最好使用 shuffle 并将 random_state 设置为某个数字。

    来自the docs

    class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma=0.0, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=None)
    

    random_state:int 种子、RandomState 实例或无(默认)

    在对数据进行混洗以进行概率估计时使用的伪随机数生成器的种子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-16
      • 2013-10-13
      • 2020-10-15
      • 2020-07-17
      • 2017-04-20
      • 2015-02-14
      • 2014-08-14
      • 2019-11-28
      相关资源
      最近更新 更多