- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用分层 10 折交叉验证来寻找模型,该模型从具有最高 auc 的 X(X 有 34 个标签)预测 y(二元结果)。我设置了 GridSearchCV:
log_reg = LogisticRegression()
parameter_grid = {'penalty' : ["l1", "l2"],'C': np.arange(0.1, 3, 0.1),}
cross_validation = StratifiedKFold(n_splits=10,shuffle=True,random_state=100)
grid_search = GridSearchCV(log_reg, param_grid = parameter_grid,scoring='roc_auc',
cv = cross_validation)
然后进行交叉验证:
grid_search.fit(X, y)
y_pr=grid_search.predict(X)
我不明白以下内容:为什么 grid_search.score(X,y)
和 roc_auc_score(y, y_pr)
给出不同的结果(前者是 0.74,后者是 0.63)?为什么这些命令在我的案例中不做同样的事情?
最佳答案
这是由于在 GridSearchCV 中使用时 roc_auc 的初始化不同所致。
roc_auc_scorer = make_scorer(roc_auc_score, greater_is_better=True,
needs_threshold=True)
观察第三个参数needs_threshold
。如果为真,它将需要 y_pred
的连续值,例如在 gridsearch 中将根据 log_reg.decision_function()
计算的概率或置信度得分。
当您使用 y_pr
显式调用 roc_auc_score
时,您使用的是 .predict()
,它将输出数据的结果预测类标签而不是概率。这应该可以解释差异。
尝试:
y_pr=grid_search.decision_function(X)
roc_auc_score(y, y_pr)
如果结果仍然不同,请使用完整代码和一些示例数据更新问题。
关于python - 为什么当我将 GridSearchCV 与 roc_auc 评分一起使用时,grid_search.score(X,y) 和 roc_auc_score(y, y_predict) 的分数不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49061575/
当我建立像决策树、随机森林这样的机器学习分类模型时,我会遇到错误。更新程序包(标准程序包)
我想做的事情: 我希望在多类问题上使用 roc_auc 计算 cross_val_score 我尝试做的事情: 这是一个使用 iris 数据集制作的可重现示例。 from sklearn.datase
我想计算模型的 AUC。 library(yardstick) data(two_class_example) 此代码有效。 roc_auc( two_class_example, truth
在 scikit-learn 中,GridSearchCV() 支持将“roc_auc”作为评分函数。它适用于 n 折交叉验证,但如果我使用 LeaveOneOut,它不起作用并生成错误消息。 Val
我对 cross_val_score 评分指标“roc_auc”和我可以直接导入和调用的 roc_auc_score 之间的区别感到困惑。 文档 ( http://scikit-learn.org/s
我正在尝试为我构建的硬投票分类器计算 roc_auc。我用可重现的例子展示了代码。现在我想计算 roc_auc 分数并绘制 ROC 曲线,但不幸的是我收到以下错误 predict_proba is n
如果这很明显,我是新手,所以很抱歉。 lr = LogisticRegression(penalty = 'l1') parameters = {'C': [0.001, 0.01, 0.1, 1,
我正在使用分层 10 折交叉验证来寻找模型,该模型从具有最高 auc 的 X(X 有 34 个标签)预测 y(二元结果)。我设置了 GridSearchCV: log_reg = LogisticRe
我是一名优秀的程序员,十分优秀!