scikit-learn
रिसीवर ऑपरेटिंग विशेषता (आरओसी)
खोज…
आरओसी और एयूसी का परिचय
क्लासिफायर ऑपरेटिंग क्वालिटी का मूल्यांकन करने के लिए रिसीवर ऑपरेटिंग कैरेक्टरिस्टिक (ROC) मीट्रिक का उदाहरण।
ROC घटता आमतौर पर Y अक्ष पर वास्तविक सकारात्मक दर, और X अक्ष पर झूठी सकारात्मक दर की सुविधा देता है। इसका मतलब यह है कि भूखंड के ऊपरी बाएं कोने में "आदर्श" बिंदु है - शून्य की एक झूठी सकारात्मक दर, और एक की वास्तविक सकारात्मक दर। यह बहुत यथार्थवादी नहीं है, लेकिन इसका मतलब यह है कि वक्र (एयूसी) के तहत एक बड़ा क्षेत्र आमतौर पर बेहतर होता है।
आरओसी घटता की "स्थिरता" भी महत्वपूर्ण है, क्योंकि यह झूठी सकारात्मक दर को कम करते हुए वास्तविक सकारात्मक दर को अधिकतम करने के लिए आदर्श है।
एक सरल उदाहरण:
import numpy as np
from sklearn import metrics
import matplotlib.pyplot as plt
महत्वाकांक्षी y
मान - वास्तविक मामले में यह अनुमानित लक्ष्य मान है ( model.predict(x_test)
):
y = np.array([1,1,2,2,3,3,4,4,2,3])
दिए गए परीक्षण डेटा और लेबल पर model.score(X,Y)
सटीकता है ( model.score(X,Y)
):
scores = np.array([0.3, 0.4, 0.95,0.78,0.8,0.64,0.86,0.81,0.9, 0.8])
ROC वक्र और AUC की गणना करें:
fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
roc_auc = metrics.auc(fpr, tpr)
साजिश:
plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
आउटपुट:
नोट: सूत्रों का कहना है इन से ले जाया गया link1 और link2
आरओसी-एयूसी ओवरराइडिंग और क्रॉस सत्यापन के साथ स्कोर करता है
आरओसी-एयूसी (वक्र के नीचे क्षेत्र) स्कोर की गणना करने के लिए किसी को अनुमानित संभावनाओं की आवश्यकता होती है। cross_val_predict
के predict
तरीकों का उपयोग करता है। आरओसी-एयूसी स्कोर प्राप्त करने में सक्षम होने के लिए, कोई केवल predict
पद्धति को ओवरराइड करने के लिए क्लासिफायरियर को उप-वर्ग कर सकता है, ताकि यह predict_proba
तरह काम predict_proba
।
from sklearn.datasets import make_classification from sklearn.linear_model import LogisticRegression from sklearn.cross_validation import cross_val_predict from sklearn.metrics import roc_auc_score class LogisticRegressionWrapper(LogisticRegression): def predict(self, X): return super(LogisticRegressionWrapper, self).predict_proba(X) X, y = make_classification(n_samples = 1000, n_features=10, n_classes = 2, flip_y = 0.5) log_reg_clf = LogisticRegressionWrapper(C=0.1, class_weight=None, dual=False, fit_intercept=True) y_hat = cross_val_predict(log_reg_clf, X, y)[:,1] print("ROC-AUC score: {}".format(roc_auc_score(y, y_hat)))
उत्पादन:
ROC-AUC score: 0.724972396025