sklearn自定义得分手一次多个指标

时间:2016-10-23 18:48:42

标签: python scikit-learn classification scoring

我有一个函数可以使用多个分数器返回Observation个对象 如何将其整合到自定义的sklearn记分员中? 我把它定义为:

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

自定义分数定义如下:

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

可能看起来像

{   '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 个答案:

答案 0 :(得分:2)

简而言之:你做不到。

长版本:得分者必须返回单个标量,因为它可以用于模型选择,一般来说 - 比较对象。由于在向量空间上没有完全排序这样的东西 - 你不能在记分员(或字典)中返回一个向量,但从数学角度来看它可能被视为向量。此外,甚至其他用例,如进行交叉验证也不支持任意结构化对象作为返回值,因为它们试图在值列表上调用np.mean,并且没有为python词典列表定义此操作(你的方法返回)。

您唯一能做的就是为每个指标创建单独的得分手,并独立使用它们。

答案 1 :(得分:1)

事实上,如此fork中所描述的那样:multiscorer

为了完整起见,这是一个例子:

title("a.", cex.main = 2,   font.main= 4, col.main= "blue", adj=0)