hud*_*95x 5 python scikit-learn cross-validation auc
我正在使用分层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)
Run Code Online (Sandbox Code Playgroud)
然后执行交叉验证:
grid_search.fit(X, y)
y_pr=grid_search.predict(X)
Run Code Online (Sandbox Code Playgroud)
我不理解以下内容:为什么grid_search.score(X,y)并roc_auc_score(y, y_pr)给出不同的结果(前者为0.74,后者为0.63)?在我的情况下,为什么这些命令没有做同样的事情?
Viv*_*mar 12
这是由于在 GridSearchCV 中使用时 roc_auc 的初始化不同。
roc_auc_scorer = make_scorer(roc_auc_score, greater_is_better=True,
needs_threshold=True)
Run Code Online (Sandbox Code Playgroud)
观察第三个参数needs_threshold。当为真时,它将需要y_pred诸如概率或置信度分数的连续值,这些值在 gridsearch 中将从 计算log_reg.decision_function()。
当您显式调用roc_auc_scorewith 时y_pr,您正在使用.predict()which 将输出数据的结果预测类标签而不是概率。这应该说明差异。
尝试 :
y_pr=grid_search.decision_function(X)
roc_auc_score(y, y_pr)
Run Code Online (Sandbox Code Playgroud)
如果结果仍然不同,请使用完整代码和一些示例数据更新问题。
| 归档时间: |
|
| 查看次数: |
1532 次 |
| 最近记录: |