2014-02-05 2 views
4

이진 분류 문제를 해결하기 위해 sklearn v 0.13.1 svm을 사용하고 있습니다. 나는 kfold 교차 검증을 사용하고 roc 곡선 (roc_auc) 아래의 영역을 계산하여 내 모델의 품질을 테스트합니다. 그러나 일부 폴드의 경우 roc_auc은 교육 데이터의 경우에도 0.5 미만입니다. 불가능하지 않아야합니까? 알고리즘이 최소한 훈련 된 데이터에 0.5에 도달 할 수 있어야합니까?sklearn svm 훈련 데이터에 대해 ROC가 0.5 미만인 영역

classifier = svm.SVC(kernel='poly', degree=3, probability=True, max_iter=100000) 
kf = cross_validation.KFold(len(myData), n_folds=3, indices=False) 
for train, test in kf: 
    Fit = classifier.fit(myData[train], classVector[train]) 

    probas_ = Fit.predict_proba(myData[test]) 
    fpr, tpr, thresholds = roc_curve(classVector[test], probas_[:,1]) 
    roc_auc = auc(fpr, tpr) 

    probas_ = Fit.predict_proba(myData[train]) 
    fpr2, tpr2, thresholds2 = roc_curve(classVector[train], probas_[:,1]) 
    roc_auc2 = auc(fpr2, tpr2) 

    print "Training auc: ", roc_auc2, " Testing auc: ", roc_auc 

출력은 다음과 같습니다 :

여기 내 코드의

Training auc: 0.423920939062 Testing auc: 0.388436883629 
    Training auc: 0.525472613736 Testing auc: 0.565581854043 
    Training auc: 0.470917930528 Testing auc: 0.259344660194 

곡선 아래 영역의 결과는 0.5 의미인가? 원칙적으로 열차와 시험 값이 모두 < 인 경우 모든 지점에 대한 예측을 반전시킬 수는 있지만 문제가 있다는 것이 걱정됩니다. 나는 그것을 완전히 랜덤 한 데이터로 주었다 할지라도, 알고리즘은 트레이닝 데이터에서 0.5에 도달해야한다고 생각했다.

답변

1

실제로 예측을 바꿀 수 있으므로 AUROC는 <입니다. 일반적으로 문제가되지 않으므로 classifier.fit 또는 roc_curve이 전달한 classVector를 잘못 해석 한 것일뿐입니다. 그 대신에 그 문제를 해결하는 것이 더 낫습니다. 의사가 정확히 어떤 데이터를 기대 하는지를 알기 위해 의사를 읽으십시오. 특히 어떤 라벨이 긍정적인지는 지정하지 않았습니다. roc_curve에 대한 pos_label 인수를 확인하고 y_true이 올바르게 지정되었는지 확인하십시오.

그러나 약간 걱정스러운 점은 일부 AUROC가 교육 세트에서> 0.5 이상이고 대부분이 그와 비슷하다는 것입니다. 이것이 의미하는 바는 분류기가 무작위보다 훨씬 뛰어나다는 것입니다.

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. pos_label을 사용하여 시도했지만 문제가 해결되지 않습니다. pos_label = 1을 사용하면 위에 나온 결과를 얻습니다. pos_label = 0을 사용하면 반전 된 출력 (예 : 1 - 값이 표시됨)이 표시됩니다. 이는 예상했던 것입니다. 내 y_true 모두 0 또는 1이며 적절한 이벤트와 관련이 있습니다. svm이 혼란 스러울 수있는 또 다른 방법이 있습니까? 나는 문서를 훑어 보았지만 roc_auc <0.5를 얻을 수있는 방법이 있다는 것을 발견 할 수 없었다. 나는 분류 자 ​​(classifier)가 일반적으로 잘 수행하지 못한다는 것을 안다, 나는 단지 툴킷을 이해할 수 있도록 노력하고있다. – user3276811

+0

비 최적 커널의 사용에 대한 데이터의 이상한 상관 관계가있을 수있다. 최소한의 재현성있는 코드 없이는 말할 수 없습니다. – Calimo

+0

@ user3276811 LogisticRegression과 비슷한 문제가 있습니다. AUC가 0.5 미만인 곳을 찾았습니까? – jibounet

관련 문제