2016-10-23 2 views
0

스코어러 개체를 반환하는 함수가 있습니다. 스코어러 사용자 정의 스코어러에 어떻게 통합 할 수 있습니까? 한마디로sklearn 맞춤 스코어러 복수의 메트릭을 한번에

{ 'AUC_R': 0.6892943119440752, 
    'Accuracy': 0.9815382629183745, 
    'Error rate': 0.018461737081625407, 
    'False negative rate': 0.6211453744493393, 
    'False positive rate': 0.0002660016625103907, 
    'Lift value': 33.346741089307166, 
    'Precision J': 0.9772727272727273, 
    'Precision N': 0.9815872808592603, 
    'Rate of negative predictions': 0.0293063938288739, 
    'Rate of positive predictions': 0.011361068973307943, 
    'Sensitivity (true positives rate)': 0.3788546255506608, 
    'Specificity (true negatives rate)': 0.9997339983374897, 
    'f1_R': 0.9905775376404309, 
    'kappa': 0.5384745595159575} 

답변

2

처럼 보일 수있는

def myAllScore(y_true, y_predicted): 
    return Observation 
my_scorer = make_scorer(myAllScore) 

:

class Observation(): 
    def __init__(self): 
     self.statValues = {} 
     self.modelName = "" 

    def setModelName(self, nameOfModel): 
     self.modelName = nameOfModel 

    def addStatMetric(self, metricName,metricValue): 
     self.statValues[metricName] = metricValue 

사용자 정의 점수는 다음과 같이 정의된다 :로 나는 그것을 정의 당신은 할 수 없습니다.

긴 버전 : scorer 이어야합니다. 이는 모델 선택, 일반적으로 객체 비교에 사용할 수있는 단일 스칼라를 반환합니다. 벡터 공간에 대해 완전한 순서를 매기는 것과 같은 것이 없으므로, 득점 원 (또는 사전은 벡터를 반환 할 수 없지만 수학적 관점에서는 벡터로 보일 수 있습니다.)을 반환 할 수는 없습니다. 게다가 교차 유효성 검사와 같은 다른 유스 케이스조차도 값의 목록을 통해 np.mean을 호출하려고하기 때문에 반환 값으로 임의의 구조화 된 객체를 지원하지 않으며,이 연산은 파이썬 사전 목록에 정의되어 있지 않습니다 (메소드 보고).

당신이 할 수있는 유일한 방법은 가지고있는 각각의 측정 항목에 대해 별도의 스코어러를 작성하고 독립적으로 사용하는 것입니다.

+0

이해 : 완성도를 위해서

, 여기에 예입니다. 그러나 http://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html과 유사하게 단일 패스에서 여러 스코어를 얻을 수 있습니까? –

+0

이미 구현 했으므로 귀하의 질문을 이해할 수 없습니다. classification_report는 스코어러가 아니므로 스코어러 컨텍스트에서 사용할 수 없습니다. – lejlot

+0

수정. 수동으로 루프 테스트를 구현했습니다. 내가 스태킹과 블렌딩 (https://github.com/rushter/heamy)을 시도하고 싶을 때, 스코어러 기능과 잘 통합 된 sklearn 파이프 라인으로 이동하기 시작했습니다. –

1

사실이 포크에 설명 된대로 가능합니다 : multiscorer.

from multiscorer.multiscorer import MultiScorer 

#Scikit's libraries for demonstration 
from sklearn.metrics import accuracy_score, precision_score 
from sklearn.model_selection import cross_val_score 
from numpy import average 

scorer = MultiScorer({ 
    'accuracy': (accuracy_score, {}), 
    'precision': (precision_score, {'average': 'macro'}) 
}) 

... 

cross_val_score(clf, X, target, scoring=scorer) 

results = scorer.get_results() 

for metric in results.keys(): 
    print("%s: %.3f" % (metric, average(results[metric])))