2017-12-18 24 views
3

저는 최근 내 프로젝트에 sklearn을 사용하는 데 어려움을 겪고 있습니다. 나는 분류자를 만들고 내 데이터를 6 개의 그룹으로 분류하려고했습니다. 전체 표본 크기는 여기에 내 코드멀티 클래스에 대해 교차 유효성 검사를 위해 평균 ROC를 계산하는 방법

from sklearn.multiclass import OneVsRestClassifier 
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis as QDA 

clf = OneVsRestClassifier(QDA()) 
QDA_score = clf.fit(train,label).decision_function(test) 
from sklearn.metrics import roc_curve, auc 
from sklearn.metrics import roc_curve 
fpr = dict() 
tpr = dict() 
roc_auc = dict() 
for i in range(3): 
    fpr[i], tpr[i], _ = roc_curve(label_test[:, i], QDA_score[:, i]) 
    roc_auc[i] = auc(fpr[i], tpr[i]) 
from itertools import cycle 
import matplotlib.pyplot as plt 
plt.figure() 
lw = 2 

colors = cycle(['aqua', 'darkorange', 'cornflowerblue']) 
for i, color,n in zip(range(3), colors,['_000','_15_30_45','60']): 
plt.plot(fpr[i], tpr[i], color=color, lw=lw, 
     label='ROC curve of {0} (area = {1:0.2f})' 
     ''.format(n , roc_auc[i])) 
plt.plot([0, 1], [0, 1], 'k--', lw=lw) 
plt.xlim([0.0, 1.0]) 
plt.ylim([0.0, 1.05]) 
plt.xlabel('False Positive Rate') 
plt.ylabel('True Positive Rate') 
plt.title('ROC for multi-classes') 
plt.legend(loc="lower right") 
plt.show() 

링크 내 결과입니다, 88 나는 기차 (66) 및 테스트 sklearn 문서는 켰을 때, 나는 정확히 한 (22) 로 데이터를 분할했다. 그러나 코드를 실행할 때마다 결과가 변경됩니다. 어쨌든 교차 검증과 결합하여 각 클래스의 평균 및 안정적인 ROC를 계산할 수 있는지 궁금합니다.

고마워요!

+0

안녕하세요. 첫 번째 게시물을 검토하고 있습니다. 작업중인 문서에 대한 링크를 추가하는 것이 좋습니다. 또한 언급하고있는 결과와의 링크가 누락 된 것 같습니다. 행동을 바꾸는 코드 부분을 더 잘 분리하고 예상치 못한 이유를 설명 할 수 있다면 도움이 될 것입니다. 그렇지 않으면, 이것은 꽤 좋은 첫 번째 게시물입니다. 행운을 빕니다! – Praxeolitic

답변

0

당신이 해결하려고하는 문제의 데이터와 복잡성에 대한 자세한 내용 없이는 말하기 어렵지만, 당신과 같은 불규칙한 학습 성과는 데이터 세트가 데이터의 불규칙하고 복잡성에 비해 너무 작음을 나타낼 수 있습니다. 그래서 당신이 샘플을 뽑을 때마다 당신은 다른 기차 데이터 세트를 얻습니다.

당신이 볼 수있는 일반적인 테스트 대 기차 stabling 기술은 k-fold 교차 검증입니다.

업데이트 : K 배 교차 유효성 검사는 기본적으로 데이터를 k 부분으로 분할 한 다음 학습 과정을 k 번 수행하고 결과의 평균을 구합니다. 이때 데이터의 다른 부분이 테스트 데이터 집합이고 나머지 k -1 개 부품이 기차 데이터 세트입니다.

+0

거기 sklearn에 교차 유효성 검사를위한 방법이 많이 보인다. k-fold 함수와 cross_val_score의 차이점은 무엇입니까? –

+0

잘 나는 개념을 안다. 그러나 나는 두 기능의 차이에 대해 혼란스러워하고있다. –

+0

k-fold는 본질적으로 cross_val_score의 k 런을 평균 내고있다. –