2014-10-09 10 views
6

मैं सिर्फ रसद प्रतिगमन के लिए sklearn में लॉग नुकसान लागू:लॉगलॉस नकारात्मक क्यों है?

def perform_cv(clf, X, Y, scoring): 
    kf = KFold(X.shape[0], n_folds=5, shuffle=True) 
    kf_scores = [] 
    for train, _ in kf: 
     X_sub = X[train,:] 
     Y_sub = Y[train] 
     #Apply 'log_loss' as a loss function 
     scores = cross_validation.cross_val_score(clf, X_sub, Y_sub, cv=5, scoring='log_loss') 
     kf_scores.append(scores.mean()) 
    return kf_scores 

हालांकि, मैं सोच रहा हूँ क्यों जिसके परिणामस्वरूप लघुगणक नुकसान नकारात्मक हैं: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html

मेरे कोड कुछ इस तरह लग रहा है। मैं उन दस्तावेजों में से सकारात्मक होने की अपेक्षा करता हूं (उपरोक्त मेरा लिंक देखें) लॉग हानि को एक -1 से गुणा करके एक सकारात्मक संख्या में बदलने के लिए गुणा किया जाता है।

क्या मैं यहां कुछ गलत कर रहा हूं?

उत्तर

5

इसी तरह की चर्चा here मिल सकती है।

इस तरह, एक उच्च स्कोर का मतलब बेहतर प्रदर्शन (कम नुकसान) है।

+0

नहीं, यहां कोई मामला नहीं है। अनुमान के बजाए उत्तर देने पर विचार करें। कुछ परीक्षणों के बाद मैं बल्कि यह मानता हूं कि यह वास्तव में sklearn ढांचे में एक त्रुटि प्रतीत होता है। – toom

-1

मैंने कई अन्य विधियों के साथ sklearn कार्यान्वयन की जांच की। यह ढांचे के भीतर एक वास्तविक बग प्रतीत होता है। इसके बजाय लॉग नुकसान की गणना के लिए follwoing कोड पर विचार करें:

import scipy as sp 

def llfun(act, pred): 
    epsilon = 1e-15 
    pred = sp.maximum(epsilon, pred) 
    pred = sp.minimum(1-epsilon, pred) 
    ll = sum(act*sp.log(pred) + sp.subtract(1,act)*sp.log(sp.subtract(1,pred))) 
    ll = ll * -1.0/len(act) 
    return ll 

इसके अलावा खाते act और pred के आयामों Nx1 स्तंभ वैक्टर करने के लिए है कि में रखते हैं।

3

हां, ऐसा होने वाला है। यह एक 'बग' नहीं है जैसा कि अन्य ने सुझाव दिया है। वास्तविक लॉग हानि आपको जो संख्या मिल रही है उसका सकारात्मक संस्करण है।

एसके-सीखें एकीकृत स्कोरिंग एपीआई हमेशा स्कोर को अधिकतम करता है, इसलिए एकीकृत स्कोरिंग एपीआई सही तरीके से काम करने के क्रम में स्कोर को कम करने की आवश्यकता होती है। लौटाया गया स्कोर इसलिए अस्वीकार कर दिया जाता है जब यह स्कोर होता है जिसे कम किया जाना चाहिए और सकारात्मक छोड़ दिया जाना चाहिए यदि यह एक स्कोर है जिसे अधिकतम किया जाना चाहिए।

यह भी sklearn GridSearchCV with Pipeline में और में scikit-learn cross validation, negative values with mean squared error

0

लॉग घटाने शून्य अच्छा भविष्य कहनेवाला एल्गोरिथ्म के लिए पास होने की जरूरत है वर्णन किया गया है, बड़े नकारात्मक मूल्य का मतलब होगा भविष्य कहनेवाला विश्लेषण बंद है और पुनर्विचार की जरूरत है।

संबंधित मुद्दे