2016-09-25 8 views
6

के लिए sklearn.roc_auc_score की गणना करें मैं अपने वर्गीकरण के लिए एयूसी, सटीकता, सटीकता की गणना करना चाहता हूं। मैं पर्यवेक्षित शिक्षा कर रहा हूं:बहु-वर्ग

यहां मेरा कामकाजी कोड है। यह कोड बाइनरी कक्षा के लिए ठीक काम कर रहा है, लेकिन बहु वर्ग के लिए नहीं। कृपया यह आप द्विआधारी वर्गों के साथ एक dataframe है: आदि मैं औसत एयूसी, सटीक प्राप्त करने के लिए निश्चित रूप से कश्मीर में परिणाम विभाजित अंत में

sample_features_dataframe = self._get_sample_features_dataframe() 
labeled_sample_features_dataframe = retrieve_labeled_sample_dataframe(sample_features_dataframe) 
labeled_sample_features_dataframe, binary_class_series, multi_class_series = self._prepare_dataframe_for_learning(labeled_sample_features_dataframe) 

k = 10 
k_folds = StratifiedKFold(binary_class_series, k) 
for train_indexes, test_indexes in k_folds: 
    train_set_dataframe = labeled_sample_features_dataframe.loc[train_indexes.tolist()] 
    test_set_dataframe = labeled_sample_features_dataframe.loc[test_indexes.tolist()] 

    train_class = binary_class_series[train_indexes] 
    test_class = binary_class_series[test_indexes] 
    selected_classifier = RandomForestClassifier(n_estimators=100) 
    selected_classifier.fit(train_set_dataframe, train_class) 
    predictions = selected_classifier.predict(test_set_dataframe) 
    predictions_proba = selected_classifier.predict_proba(test_set_dataframe) 

    roc += roc_auc_score(test_class, predictions_proba[:,1]) 
    accuracy += accuracy_score(test_class, predictions) 
    recall += recall_score(test_class, predictions) 
    precision += precision_score(test_class, predictions) 

, इस कोड को ठीक काम कर रहा है। हालांकि, मैं बहु वर्ग के लिए एक ही गणना नहीं कर सकते:

train_class = multi_class_series[train_indexes] 
    test_class = multi_class_series[test_indexes] 

    selected_classifier = RandomForestClassifier(n_estimators=100) 
    selected_classifier.fit(train_set_dataframe, train_class) 

    predictions = selected_classifier.predict(test_set_dataframe) 
    predictions_proba = selected_classifier.predict_proba(test_set_dataframe) 

मैंने पाया मैं औसत के लिए "भारित" पैरामीटर जोड़ने के लिए है कि बहु वर्ग के लिए। ValueError बढ़ा ("{0} प्रारूप समर्थित नहीं है" .format (y_type))

ValueError: multiclass प्रारूप समर्थित नहीं है

उत्तर

4

आप उपयोग नहीं कर सकते

roc += roc_auc_score(test_class, predictions_proba[:,1], average="weighted") 

मैं एक त्रुटि मिली मल्टीक्लास मॉडल के लिए roc_auc एक सारांश सारांश मीट्रिक के रूप में। यदि आप चाहते हैं, तो आप फिर भी यह sklearn.metrics.confusion_matrix उपयोग करने के लिए एक multiclass मॉडल के प्रदर्शन का मूल्यांकन करने के लिए और अधिक सामान्य है के रूप में

roc = {label: [] for label in multi_class_series.unique()} 
for label in multi_class_series.unique(): 
    selected_classifier.fit(train_set_dataframe, train_class == label) 
    predictions_proba = selected_classifier.predict_proba(test_set_dataframe) 
    roc[label] += roc_auc_score(test_class, predictions_proba[:,1]) 

प्रति वर्ग roc_auc गणना कर सकते हैं,।

6

averageroc_auc_score का विकल्प केवल मल्टीलाबेल समस्याओं के लिए परिभाषित किया गया है।

आप scikit सीखने प्रलेखन से निम्न उदाहरण पर एक नज़र डालें आप multiclass समस्याओं के लिए सूक्ष्म या स्थूल औसतन स्कोर ही परिभाषित करने के लिए कर सकते हैं:

http://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html#multiclass-settings

संपादित: वहाँ एक है मल्टीक्लास समस्याओं के लिए आरओसी एयूसी को लागू करने के लिए विज्ञान-सीखने वाले ट्रैकर पर समस्या: https://github.com/scikit-learn/scikit-learn/issues/3298