0
나는 분류 결과를 얻기 위해 다음 코드를 사용하고

: 뭔가의 결선을하고있는 중이 야하지만 난 2 개 클래스 예있는 경우교차 검증 분류 오류

folds = 5 #number of folds for the cv 

     #Logistic Regression-- 
     clf = linear_model.LogisticRegression(penalty='l1') 
     kf = KFold 

(len(clas), n_folds=folds) 
    fold = 1 
    cms = np.array([[0,0],[0,0]]) 
    accs = [] 
    aucs=[] 
    for train_index, test_index in kf: 
     X_train, X_test = docs[train_index], docs[test_index] 
     y_train, y_test = clas2[train_index], clas2[test_index] 
     clf.fit(X_train, y_train) 
     prediction = clf.predict(X_test) 
     acc = accuracy_score(prediction, y_test) 
     cm = confusion_matrix(y_test,prediction) 
     pred_probas = clf.predict_proba(X_test)[:,1] 
     fpr, tpr, thresholds = metrics.roc_curve(y_test, pred_probas) 
     print('Test Accuracy for fold {}: {}\n{}'.format(fold,round((acc*100),2),cm)) 
     roc_auc = auc(fpr,tpr) 
     print('AUC for fold {} : {}'.format(fold,round((roc_auc*100),2))) 
     fold +=1 
     cms += cm 
     accs.append(acc) 
     aucs.append(roc_auc) 
    print('CV test accuracy: {}\n{}'.format(round((np.mean(accs)*100),2),cms)) 
    print('\nCV AUC: {}'.format(round(np.mean(aucs)*100),2)) 
    print('\nCV accuracy: %.3f +/- %.3f' % (round((np.mean(accs)*100),2),round((np.std(accs)*100),2))) 
    print('\nCV ROC AUC: %.3f +/- %.3f' % (round((np.mean(aucs)*100),2),round((np.std(aucs)*100),2))) 
    print('\nPeak accuracy: '+str(round((np.amax(accs)*100),2))) 
    print('\nPeak ROC AUC: '+str(round((np.amax(aucs)*100),2))) 

나는 확실하지 않다을 = 406 없음 = 139, 및 처음에 난 그냥 17 개 없음 문서 없었다 코드는

Test Accuracy for fold 1: 87.16 
[[94 9] 
[ 5 1]] 
AUC for fold 1 : 66.1 
Test Accuracy for fold 2: 92.66 
[[100 6] 
[ 2 1]] 
AUC for fold 2 : 62.42 
Test Accuracy for fold 3: 90.83 
[[99 7] 
[ 3 0]] 
AUC for fold 3 : 43.08 
Test Accuracy for fold 4: 88.07 
[[83 8] 
[ 5 13]] 
AUC for fold 4 : 85.5 
Test Accuracy for fold 5: 53.21 
[[ 0 0] 
[51 58]] 
AUC for fold 5 : nan 
CV test accuracy: 82.39 
[[376 30] 
[ 66 73]] 

CV AUC: nan 

CV accuracy: 82.390 +/- 14.720 

CV ROC AUC: nan +/- nan 

Peak accuracy: 92.66 

Peak ROC AUC: nan 
C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn\metrics\ranking.py:530: UndefinedMetricWarning: No negative samples in y_true, false positive value should be meaningless 
    UndefinedMetricWarning) 
C:\Users\kkothari\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn\metrics\ranking.py:95: RuntimeWarning: invalid value encountered in less 
    if np.any(dx < 0): 

결과

다음 날주고 있지만 잘 작동했다 ... 누군가가 어떤 실수를 지적하거나 무슨 일이 일어나고 있는지 설명 할 수 있습니까?

+0

무엇이 질문입니까? –

+0

나는 경고를 얻고있다 .. 나는 그것에 대해 더 알고 싶다. ..이 문제를 해결할 수있는 방법이있다. 데이터가 더 비뚤어 졌을 때 나는 그것을 얻지 못했다. 예 = 406 및 NO = 17. 문서 없음이 오류/경고가 표시되고 AUC 결과가 좋지 않음 –

답변

2

기본적으로 하나의 매우 작은 클래스 (약 20-30 개의 샘플이 있습니까?) 중 하나에서 얻지 못한 스플릿에는 오류가 발생합니다. 대신 StratifiedKFold를 사용할 수 있습니다. 각 분할에서 각 클래스의 샘플을 일정하게 유지할 수 있습니다.

+0

매력처럼 작동했습니다! 감사합니다 @lejlot –