2014-10-09 11 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 구현을 교차 확인했습니다. 프레임 워크 내에서 실제 버그 인 것 같습니다. 대신 로그 손실을 계산하는 때라도 코드를 살펴

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 

는 또한 actpred의 크기가 NX1의 열 벡터에있는 고려.

3

예, 이런 일이 발생합니다. 다른 사람들이 제안한 것처럼 '버그'가 아닙니다. 실제 로그 손실은 단순히 당신이 얻고있는 숫자의 긍정적 인 버전입니다.

SK-Learn의 통합 스코어링 API는 항상 점수를 최대화하므로 통합 스코어링 API가 올바르게 작동하려면 최소화해야하는 점수가 무효화됩니다. 따라서 반환해야하는 점수는 최소화되어야하는 점수 일 때 무효화되고 점수가 최대화되어야하는 경우에는 양수가 남습니다.

이것은 또한 sklearn GridSearchCV with Pipelinescikit-learn cross validation, negative values with mean squared error

0

로그인 손실 좋은 예측 알고리즘의 제로 근처에 필요에 설명되어 큰 음의 값은 예측 분석이 꺼지고을 재고 할 필요가 의미 할 것입니다.