आपके वर्णन से यह सही अर्थ लगता है: न केवल आप मतलब आरओसी वक्र की गणना कर सकते हैं, बल्कि आत्मविश्वास अंतराल बनाने के लिए इसके चारों ओर विचरण भी कर सकते हैं। यह आपको यह विचार देना चाहिए कि आपका मॉडल कितना स्थिर है।
उदाहरण के लिए, इस तरह:
यहाँ मैंने अलग-अलग ROC कर्व्स के साथ-साथ मीन कर्व और कॉन्फिडेंस इंटरवल रखा है। ऐसे क्षेत्र हैं जहां वक्र सहमत हैं, इसलिए हमारे पास कम विचरण है, और ऐसे क्षेत्र हैं जहां वे असहमत हैं।
बार-बार सीवी के लिए आप इसे कई बार दोहरा सकते हैं और सभी व्यक्तिगत सिलवटों में कुल औसत प्राप्त कर सकते हैं:
यह पिछली तस्वीर से काफी मिलता-जुलता है, लेकिन माध्य और विचरण का अधिक स्थिर (अर्थात विश्वसनीय) अनुमान देता है।
यहां प्लॉट पाने के लिए कोड है:
import matplotlib.pyplot as plt
import numpy as np
from scipy import interp
from sklearn.datasets import make_classification
from sklearn.cross_validation import KFold
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve
X, y = make_classification(n_samples=500, random_state=100, flip_y=0.3)
kf = KFold(n=len(y), n_folds=10)
tprs = []
base_fpr = np.linspace(0, 1, 101)
plt.figure(figsize=(5, 5))
for i, (train, test) in enumerate(kf):
model = LogisticRegression().fit(X[train], y[train])
y_score = model.predict_proba(X[test])
fpr, tpr, _ = roc_curve(y[test], y_score[:, 1])
plt.plot(fpr, tpr, 'b', alpha=0.15)
tpr = interp(base_fpr, fpr, tpr)
tpr[0] = 0.0
tprs.append(tpr)
tprs = np.array(tprs)
mean_tprs = tprs.mean(axis=0)
std = tprs.std(axis=0)
tprs_upper = np.minimum(mean_tprs + std, 1)
tprs_lower = mean_tprs - std
plt.plot(base_fpr, mean_tprs, 'b')
plt.fill_between(base_fpr, tprs_lower, tprs_upper, color='grey', alpha=0.3)
plt.plot([0, 1], [0, 1],'r--')
plt.xlim([-0.01, 1.01])
plt.ylim([-0.01, 1.01])
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.axes().set_aspect('equal', 'datalim')
plt.show()
दोहराया CV के लिए:
idx = np.arange(0, len(y))
for j in np.random.randint(0, high=10000, size=10):
np.random.shuffle(idx)
kf = KFold(n=len(y), n_folds=10, random_state=j)
for i, (train, test) in enumerate(kf):
model = LogisticRegression().fit(X[idx][train], y[idx][train])
y_score = model.predict_proba(X[idx][test])
fpr, tpr, _ = roc_curve(y[idx][test], y_score[:, 1])
plt.plot(fpr, tpr, 'b', alpha=0.05)
tpr = interp(base_fpr, fpr, tpr)
tpr[0] = 0.0
tprs.append(tpr)
प्रेरणा का स्रोत: http://scikit-learn.org/stable/auto_examples/model_selection/plot_roc_crossval.html