总结-模型评价指标的定义(基于CatBoost文档)

Posted oliveQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结-模型评价指标的定义(基于CatBoost文档)相关的知识,希望对你有一定的参考价值。

Objectives and metrics-CatBoost Tutorial

损失函数、代价函数和目标函数的区别

本部分参考自——机器学习中的目标函数、损失函数、代价函数有什么区别?

The loss function computes the error for a single training example;
the cost function is the average of the loss funcitons of the entire training set.
— — Andrew NG

  • 损失函数(Loss Function )是定义在单个样本上的,算的是一个样本的误差。
  • 代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均。(也被称作经验风险)
  • 目标函数(Object Function)定义为:最终需要优化的函数。等于经验风险+结构风险(也就是代价函数 + 正则化项)。代价函数最小化,降低经验风险,正则化项最小化降低。

源自CatBoost Tutorial的Objectives and metrics

回归问题

for regressor use RMSE, MultiRMSE, SurvivalAft, 
MAE, Quantile, LogLinQuantile, Poisson, 
MAPE, Lq or custom objective object

可以优化的目标函数

MAE

MAPE

Poisson

Quantile(α=0.5)=MAE

图像处理应用中,经常会用到quantile分位数损失函数,这个函数的作用是求数列或矩阵的分位数。在给定预测变量的某些值时,估计因变量的条件“分位数”。Quantile Loss实际上只是MAE的扩展形式(当分位数是第50个百分位时,Quantile Loss退化为MAE)。

RMSE

默认的函数:均方根误差

RMSEWithUncertainty

LogLinQuantile(α=0.5)

Lq

Huber


超参数δ(delta)控制:误差降到多小时变为二次误差。当Huber损失在[0−δ,0+δ] 之间时,等价为MSE,而在[−∞,δ]和[ δ , + ∞ ] 时为MAE。Huber损失结合了MSE和MAE的优点,对异常点更加鲁棒。

Expectile(α=0.5)

Tweedie

不可优化的评估函数

FairLoss

NumErrors

SMAPE

R2

MSLE

MedianAbsoluteError

多元回归问题

可以优化

MultiRMSE

分类问题

可以优化

Logloss

二分类常用的对数损失函数

CrossEntropy

多分类问题中,交叉熵损失函数用来评估【当前训练得到的概率分布】与【真实分布】的差异情况,减少交叉熵损失就是在提高模型的预测准确率。

不能优化

Precision

Recall

F

F1

BalancedAccuracy

BalancedErrorRate

MCC

Accuracy

CtrFactor

AUC

Classic

Ranking

QueryAUC

Classic type

Ranking type

NormalizedGini=2AUC -1

BrierScore

HingeLoss

HammingLoss

ZeroOneLoss=1−Accuracy

Kappa

LogLikelihoodOfPrediction

多分类问题

可以优化

MultiClass

MultiClassOneVsAll

不能优化

Precision、Recall、F、F1

同二分类

TotalF1

取决于平均参数的值

Weighted

Macro

Micro

MCC

Accuracy

HammingLoss

ZeroOneLoss=1−Accuracy

Kappa


Kappa系数是一种衡量分类精度的指标,
将Kappa系数作为2个分类器的差异性度量准则时,其取值范围为κ≤1
κ=1时表示分类结果完全相同,不具有差异性;
κ=0时表示分类结果相同,是偶然产生的,具有差异性;
κ<0表示分类器分类结果具有很大差异性.
κ值愈小,表征2个分类器的差异性愈大.

AUC

根据二进制分类计算原则,对编号为 0 到 M-1 的每个类 k 分别计算该值。 k 类的对象被认为是正的,而所有其他的都被认为是负的。

多标签分类

可以优化

MultiLogloss

MultiCrossEntropy

不能优化

Precision、Recall、F、F1

同二分类

Accuracy

该公式取决于 type 参数的值

Classic

PerClass

HammingLoss

排序问题

Pairwise metrics

来自同一组的两个成员,必有输(n)赢(p),max_pairs是每组中生成对的最大数量。如果没有给出对则生效,因此不重复生成。

PairLogit、PairLogitPairwise(可优化)

与 PairLogit 相比,PairLogitPairwise可能会在大型数据集上提供更准确的结果,但计算速度要慢得多。

PairAccuracy(不可优化)

Groupwise metrics

YetiRankPairwise(可优化)

与 YetiRank 相比,此指标在大数据集上提供更准确的结果,但速度明显较慢。

YetiRank(可优化)

与 YetiRankPairwise 相比,该指标在大数据集上给出的结果不太准确,但速度明显更快。

StochasticFilter(可优化)

直接优化为预先定义的对象顺序计算的 FilteredDCG 指标,用于过滤固定排名下的对象。因此,FilteredDCG 度量可用于优化。

StochasticRank(可优化)

直接优化所选指标。所选指标的值将写入输出数据
有关详细信息,请参阅论文 StochasticRank:无标度离散函数的全局优化。
【Common parameters】num_estimations=1,mu=0,metric如下
【top】-1。这是组中用于计算排名指标的顶级样本数。顶部样本要么是具有最大近似值的样本,要么是具有最低目标值的样本(如果近似值相同)。

DCG

【type】Base, Exp.指标计算原则
【denominator】LogPosition, Position.指标分母类型

NDCG

【type】Base, Exp.指标计算原则
【denominator】LogPosition, Position.指标分母类型

PFound

【decay】0.85

QueryCrossEntropy(可优化, α=0.95)

QueryRMSE(可优化)

QuerySoftMax(可优化)

PFound(不可优化)

NDCG(不可优化)

DCG、FilteredDCG、AverageGain(不可优化)

PrecisionAt(不可优化)

RecallAt(不可优化)

MAP(不可优化):对象按预测相关性的降序排序

ERR(不可优化)

MRR(不可优化)

AUC、QueryAUC(不可优化)

通过AUC 类型,定义指标计算原则,与分类问题AUC和QueryAUC指标定义相同。
QueryAUC(不可优化)

题外话:
CatBoost中包含两个指标:

  • loss_function:在训练中使用的指标。指定的值也决定了要解决的机器学习问题。The metric to use in training. The specified value also determines the machine learning problem to solve.
    【包括】RMSE(默认)、Logloss、MAE、CrossEntropy、Quantile、LogLinQuantile、Lq、MultiRMSE、MultiClass、MultiClassOneVsAll、MultiLogloss、MultiCrossEntropy、MAPE、Poisson、PairLogit、PairLogitPairwise、QueryRMSE、QuerySoftMax、Tweedie、YetiRank、YetiRankPairwise、StochasticFilter、StochasticRank
  • eval_metric:用于过拟合检测(如果启用)和最佳模型选择(如果启用)的指标。The metric used for overfitting detection (if enabled) and best model selection (if enabled).
    【包括】目标函数(默认)、RMSE、Logloss、MAE、CrossEntropy、Quantile、LogLinQuantile、Lq、MultiRMSE、MultiClass、MultiClassOneVsAll、MultiLogloss、MultiCrossEntropy、MAPE、Poisson、PairLogit、PairLogitPairwise、QueryRMSE、QuerySoftMax、Tweedie、SMAPE、Recall、Precision、F、F1、TotalF1、Accuracy、BalancedAccuracy、BalancedErrorRate、Kappa、WKappaLogLikelihoodOfPrediction、AUC、QueryAUC、R2、FairLoss、NumErrors、MCC、BrierScore、HingeLoss、HammingLoss、ZeroOneLoss、MSLE、MedianAbsoluteError、Huber、Expectile、MultiRMSE、PairAccuracy、AverageGain、PFound、NDCG、DCG、FilteredDCG、NormalizedGini、PrecisionAt、RecallAt、MAP、Quantile:alpha=0.3

自定义损失函数loss_function的说明

分类Logloss

class LoglossObjective(object):
    def calc_ders_range(self, approxes, targets, weights):
        assert len(approxes) == len(targets)
        if weights is not None:
            assert len(weights) == len(approxes)

        result = []
        for index in range(len(targets)):
            e = np.exp(approxes[index])
            p = e / (1 + e)
            der1 = targets[index] - p
            der2 = -p * (1 - p)

            if weights is not None:
                der1 *= weights[index]
                der2 *= weights[index]

            result.append((der1, der2))
        return result
model = CatBoostClassifier(loss_function=LoglossObjective())

回归RMSE

class RmseObjective(object):
    def calc_ders_range(self, approxes, targets, weights):
        assert len(approxes) == len(targets)
        if weights is not None:
            assert len(weights) == len(approxes)

        result = []
        for index in range(len(targets)):
            der1 = targets[index] - approxes[index]
            der2 = -1

            if weights is not None:
                der1 *= weights[index]
                der2 *= weights[index]

            result.append((der1, der2))
        return result
model = CatBoostRegressor(loss_function=RmseObjective())

多分类MultiClass

class MultiClassObjective(object):
    def calc_ders_multi(self, approx, target, weight):
        approx = np.array(approx) - max(approx)
        exp_approx = np.exp(approx)
        exp_sum = exp_approx.sum()
        grad = []
        hess = []
        for j in range(len(approx)):
            der1 = -exp_approx[j] / exp_sum
            if j == target:
                der1 += 1
            hess_row = []
            for j2 in range(len(approx)):
                der2 = exp_approx[j] * exp_approx[j2] / (exp_sum**2)
                if j2 == j:
                    der2 -= exp_approx[j] / exp_sum
                hess_row.append(der2 * weight)

            grad.append(der1 * weight)
            hess.append(hess_row)
        return (grad, hess)
        
model = CatBoostClassifier(loss_function=MultiClassObjective())

以上是关于总结-模型评价指标的定义(基于CatBoost文档)的主要内容,如果未能解决你的问题,请参考以下文章

总结-模型评价指标的定义(基于CatBoost文档)

模型评价指标总结

机器学习:线性模型学习总结:线性回归

图像融合基于matlab高分辨率全色图IHS图像融合(含评价指标)含Matlab源码 2406期

目标检测评价指标总结

R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters)计算特征重要度