प्रायिकता अनुमानों के साथ बार-बार 10-गुना क्रॉस सत्यापन के लिए औसत आरओसी


15

मैं मशीन लर्निंग एल्गोरिदम का उपयोग करके लगभग 10,000 मामलों पर 10 गुना क्रॉस क्रॉस सत्यापन दोहराया (10 बार) का उपयोग करने की योजना बना रहा हूं। हर बार पुनरावृत्ति अलग यादृच्छिक बीज के साथ की जाएगी।

इस प्रक्रिया में मैं प्रत्येक मामले के लिए संभाव्यता अनुमान के 10 उदाहरण बनाता हूं। 10-गुना क्रॉस सत्यापन के 10 पुनरावृत्तियों में से प्रत्येक के लिए संभाव्यता अनुमान का 1 उदाहरण

क्या मैं प्रत्येक मामले के लिए 10 संभावनाएं निकाल सकता हूं और फिर एक नया औसत आरओसी वक्र (बार-बार 10 गुना सीवी के परिणामों का प्रतिनिधित्व करता हूं) बना सकता हूं, जिसकी तुलना अन्य आरओसी वक्रों की तुलना युग्मित तुलनाओं से की जा सकती है?

जवाबों:


13

आपके वर्णन से यह सही अर्थ लगता है: न केवल आप मतलब आरओसी वक्र की गणना कर सकते हैं, बल्कि आत्मविश्वास अंतराल बनाने के लिए इसके चारों ओर विचरण भी कर सकते हैं। यह आपको यह विचार देना चाहिए कि आपका मॉडल कितना स्थिर है।

उदाहरण के लिए, इस तरह:

यहाँ छवि विवरण दर्ज करें

यहाँ मैंने अलग-अलग 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


3

यह औसत संभावनाओं के लिए सही नहीं है क्योंकि यह उन पूर्वानुमानों का प्रतिनिधित्व नहीं करेगा जिन्हें आप मान्य करने के लिए प्रयास कर रहे हैं और सत्यापन नमूनों में संदूषण शामिल है।

ध्यान दें कि पर्याप्त परिशुद्धता प्राप्त करने के लिए 10-गुना क्रॉस-सत्यापन के 100 दोहराव की आवश्यकता हो सकती है। या एफ्रॉन-गोंग आशावाद बूटस्ट्रैप का उपयोग करें जिसमें समान सटीकता के लिए कम पुनरावृत्तियों की आवश्यकता होती है (उदाहरण के लिए आर rmsपैकेज validateफ़ंक्शन देखें)।

आरओसी वक्र्स इस समस्या के लिए किसी भी तरह से व्यावहारिक नहीं हैं। एक उचित सटीकता स्कोर का उपयोग करें और इंडेक्स (समवर्ती संभावना; AUROC) के साथ उसका साथ दें जो वक्र से निपटने के लिए बहुत आसान है, क्योंकि इसकी गणना आसानी से और जल्दी से विलकॉक्सन-मैन-व्हिटनी स्टेटिस्टिक का उपयोग करके की जाती है।c


क्या आप आगे विस्तृत कर सकते हैं कि औसत सही क्यों नहीं है?
DataD'oh

पहले ही बताया जा चुका है। आपको क्षेत्र में उपयोग किए जाने वाले माप को मान्य करना होगा।
फ्रैंक हार्ले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.