2016-10-23 3 views
0

スコアラーオブジェクトを返す関数を持っています カスタムSklearnスコアラーにどのように統合できますか?要するに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 

カスタムスコアはように定義されていますよう 私はそれを定義し、あなたがすることはできません。

ロングバージョン:スコアラーになります。これはモデル選択や一般的にはオブジェクトの比較に使用できるものであるため、単一のスカラーを返します。ベクトル空間上の完全な順序付けのようなものはないので、スコアラー(または辞書の中にベクトルを戻すことはできませんが、数学的観点から見るとベクトルのように見えるかもしれません)。さらに、クロスバリデーションのような他のユースケースでも、値リストにnp.meanを呼び出そうとするため、戻り値として任意の構造化オブジェクトをサポートしていないため、この操作はPythonディクショナリのリストに対しては定義されていません戻る)。

あなたが持つことができる唯一のことは、あなたが持っているメトリクスごとに別々のスコアラーを作成し、それを独立して使用することです。

+0

私は理解しています。しかし、1回のパスでいくつかのスコアリングを得るには、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]))) 
関連する問題