2017-01-23 1 views
0

다른 분류 자에 대해 roc_auc을 계산하고 싶습니다. 일부는 이진 분류자가 아닙니다.aik 점수에서 scikit-learn 없음 이진 분류 자 ​​

if hasattr(clf, "decision_function"): 
    y_score = clf.fit(X_train, y_train).decision_function(X_test) 
else: 
    y_score = clf.fit(X_train, y_train).predict_proba(X_test) 

AUC=roc_auc_score(y_test, y_score) 

그러나, 나는 몇 가지 분류에 대한 오류 (예를 들어, 가장 가까운 이웃 ) : 저는 여기에 사용되는 코드의 일부이다

ValueError: bad input shape 

는 그냥 말, 내가 사용 : y_score = clf.fit(X_train, y_train).predict_proba(X_test), 그러나 나는 그것을 사용하는 것이 맞는지 정말로 모른다. 훈련 데이터 모델을 맞는

clf.fit(X_train, y_train) 

+0

ROC 곡선은 실제로 이진 경우. 멀티 클래스 설정에서는 실제로 의미가 없습니다. –

답변

0

괜찮 그래서 첫 번째 것들. 제 1 파라미터는 피처이고, 제 2 파라미터는 타겟이다. 좋아, 잘 했어.

피팅 후 다른 데이터 세트에 ".predict"또는 ".predict_proba"를 적용하여 결과를 예측/예측할 ​​수 있습니다. 또는 다음과 같이 동시에 맞출 수도 있고 예측할 수도 있습니다.

clf.fit(X_train, y_train).predict_proba(X_test) 

이제는 예상치가 아니라 점수입니다. 당신의 점수는 예측과 참값 "(y_test)"의 함수가 될 것입니다. 당신은

지금, 그 측정 기준 중 하나 roc_auc_score입니다 .. (http://scikit-learn.org/stable/modules/model_evaluation.html에서 자세한 내용을) 당신이 등등 정확도, 정밀도, 리콜, F1, 같이있어 문제의 종류에 따라 다른 점수 통계를 사용하지만, 수 당신이 그 기능을 입력했는지 조심해야합니다. 그렇지 않으면 작동하지 않을 것입니다. roc_auc_score 페이지 (http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html#sklearn.metrics.roc_auc_score)에 설명 된 바와 같이, 매개 변수가 있어야한다 :

y_true : 진 라벨 지표 진정한 진 레이블.
y_score : 목표 점수는 긍정적 인 클래스의 확률 추정치, 신뢰도 값 또는 임계치가 아닌 결정의 측정 값 (일부 분류 기준에서는 "decision_function"에 의해 반환 됨) 일 수 있습니다.

레이블, 또는 y_true에 대한 다중 레이블이 있으면이 기능이 작동하지 않으므로 이진 파일이어야합니다. 다른 손에
y_score 바이너리 또는 도움이

희망 ([0,1]에 이르기까지) 확률이 될 수 있습니다!

편집 : 여러 라벨 문제가있는 경우 한 번에 하나씩 다른 클래스를 처리해야합니다. 그런 식으로 많은 바이너리 이진 문제/모델이 될 것입니다. (클래스 A인지 여부를 예측하기위한 모델을 작성하고 그 곡선을 그리면 다음 클래스로 이동하고 다른 모델을 빌드하는 등)