Python 对sci工具包的一致回答
如何在sci工具包学习中使用GridSearchCV获得一致的答案?我假设我得到了不同的答案b/c每次运行时,不同的随机数导致折叠不同,尽管我的理解是下面的代码应该解决这个问题,因为默认情况下Python 对sci工具包的一致回答,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,如何在sci工具包学习中使用GridSearchCV获得一致的答案?我假设我得到了不同的答案b/c每次运行时,不同的随机数导致折叠不同,尽管我的理解是下面的代码应该解决这个问题,因为默认情况下KFold具有shuffle=False clf = GridSearchCV(SVC(), param_grid, cv=KFold(n, n_folds=10)) 正如您在评论中指出的,predict_proba不是确定性的 但它确实接受一个随机的状态(就像KFold一样)。我以前发现,如果数据是以非
KFold
具有shuffle=False
clf = GridSearchCV(SVC(), param_grid, cv=KFold(n, n_folds=10))
正如您在评论中指出的,predict_proba不是确定性的 但它确实接受一个随机的状态(就像KFold一样)。我以前发现,如果数据是以非随机顺序收集的,那么设置shuffle=False会导致非常糟糕的结果,因此最好使用shuffle并将random_state设置为某个数字 从 随机状态:int种子、随机状态实例或无(默认)
伪随机数生成器的种子,用于对数据进行随机洗牌以进行概率估计。我认为您正在查找此参数:random\u state=7 大多数具有随机_状态参数的东西都将其保留为None,这允许变化 您必须将其设置为某个数字才能获得一致的结果
我把它设为7,因为我喜欢7。选择任意数字。一些估计器有一个
随机状态
,这可能会改变结果SVC
应该是确定性的,正如您观察到的KFold
一样。你确定脚本的其余部分是确定性的吗?非常确定。SVC
的predict\u proba()
输出是否具有确定性?如果我没记错的话,会运行交叉验证来估计一些参数以确定概率,但这是在LIBSVM中完成的,我认为也是确定性的。我问b/c我实际上没有使用SVC
,但我创建了一个名为ProbSVC
的子类,它将predict
映射到predict\u proba
似乎predict\u proba()
是不确定的……是的,predict\u proba
进行了5倍(我认为)交叉验证来校准概率输出。此外,您应该使用Scorer
接口,而不是子类化imho;)正在等待开发版本发布,然后才使用Scorer
…我还不够专业,无法使用最新版本:)
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)