У меня есть trainind набор данных с 5-кратным CV, где один из 4-х кратных будет использоваться для проверки заданных параметров.
![enter image description here](https://i.stack.imgur.com/rh47B.png)
Если вы посмотрите на правильный график, очевидно, что каждый RO C имеет только один прямой угол, и форма кривой не колебался как левый.
Я обнаружил, что
Точки между ними, которые создают кривую, получаются путем вычисления TPR и FPR для различных пороговых значений решения от 1 до 0. Для грубой, angular «кривая», вы должны использовать только несколько порогов принятия решения: например, пороги принятия решения [1, 0,75, 0,5, 0,25, 0]. Для более плавной кривой вы должны использовать множество порогов решения, например пороговых значений принятия решения [1, 0,98, 0,96, 0,94,…, 0,08, 0,06, 0,04, 0,02, 0].
Я не являюсь иметь дело с любыми порогами вообще. Интересно, что я использую почти идентичные фрагменты кода для построения этих графиков:
1-й график (слева):
fp_r, tp_r, thresholds = roc_curve(test_labels, preds)
roc_auc = auc(fp_r, tp_r)
fig.add_subplot(223)
plt.tight_layout()
lw = 2
plt.plot(fp_r, tp_r, color='m', lw=lw, label='ROC curve (area = %0.4f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='k', lw=lw, linestyle='--')
plt.ylabel("True Positive Rate", fontsize='small')
plt.xlabel("'False Positive Rate'", fontsize='small')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.legend(loc="lower right")
2-й график (справа)
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=1221)
tprs = []
aucs = []
mean_fpr = np.linspace(0, 1, 100)
classifier = KerasClassifier(build_fn=vgg_16)
fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(224)
i = 1
for train, test in cv.split(x_train, train_labels):
classifier.fit(x_train[train], train_labels[train], epochs = epochs, batch_size = batch_size, verbose=1)
probas = classifier.predict(x_train[test])
fpr, tpr, thresholds = roc_curve(train_labels[test], probas)
tprs.append(interp(mean_fpr, fpr, tpr))
tprs[-1][0] = 0.0
roc_auc = auc(fpr, tpr)
aucs.append(roc_auc)
plt.plot(fpr, tpr, lw=1, alpha=0.3, label='ROC fold %d (AUC = %0.4f)' % (i, roc_auc))
i += 1
ax.plot([0, 1], [0, 1], linestyle='--', lw=2, color='r', label='Chance', alpha=.8)
mean_tpr = np.mean(tprs, axis=0)
mean_tpr[-1] = 1.0
mean_auc = auc(mean_fpr, mean_tpr)
std_auc = np.std(aucs)
ax.plot(mean_fpr, mean_tpr, color='b', label=r'Mean ROC (AUC = %0.4f $\pm$ %0.2f)' % (mean_auc, std_auc), lw=2, alpha=.8)
Сейчас вопрос, почему я получаю две кривые различной формы, хотя я использую идентичные фрагменты кода для построения?
Что требуется, чтобы сделать правильный график более похожим на правильный график? Короче говоря, мне нужно построить ROC для каждого сгиба, как показано ниже:
![enter image description here](https://i.stack.imgur.com/BBfCg.png)