乐趣区

关于算法:R语言中回归和分类模型选择的性能指标

原文链接:http://tecdat.cn/?p=11334

有多种性能指标来形容机器学习模型的品质。然而,问题是,对于问题正确的办法是什么?在这里,我探讨了抉择回归模型和分类模型时最重要的性能指标。请留神,此处介绍的性能指标不利用于特征选择,因为它们没有思考模型的复杂性。

回归的绩效掂量

对于基于雷同函数集的模型,RMSE 和 R2 通常用于模型抉择。

均方误差

均方误差由比拟预测 y ^ 与察看到的后果 y 所得的残差平方和:

因为 MSE 是基于残差平方的,因而它取决于后果平方。因而,MSE 的根通常用于报告模型拟合:

均方误差的一个毛病是它不是很容易解释,因为 MSE 取决于预测工作,因而无奈在不同工作之间进行比拟。例如,假如一个预测工作与预计卡车的分量无关,而另一项与预计苹果的分量无关。而后,在第一个工作中,好的模型可能具备 100 kg 的 RMSE,而在第二个工作中,好的模型可能具备 0.5 kg 的 RMSE。因而,尽管 RMSE 可用于模型抉择,但很少报告,个别应用 R2。

皮尔逊相关系数

因为确定系数能够用皮尔逊相关系数来解释,因而咱们将首先介绍该办法。令 Y ^ 示意模型预计,而 Y 示意察看到的后果。而后,相关系数定义为:

其中 Cov(⋅,⋅)∈R 是协方差,而 σ 是标准偏差。协方差定义为

其中,μ 示意平均值。在离散设置中,能够将其计算为

这意味着,如果预测和后果与平均值的偏差类似,则它们的协方差将为正;如果与平均值具备绝对的偏差,则它们之间的协方差将为负。

标准偏差定义为

在离散设置下,能够计算为

请留神,R 函数  sd 计算总体标准差,该标准差用于取得无偏估计量。如果散布较宽(均值左近的宽散布),则 σ 高;如果散布较窄(均值四周的较小散布),则 σ 小。

关联:协方差和标准差

为了更好地了解协方差,咱们创立了一个绘制测量值与均值偏差的函数:

    means <- c(mean(y), mean(y.hat))
 
    df <- data.frame("N" = c(seq\_along(y), seq\_along(y)), 
                     "Deviation" = c(y.deviation, y.hat.deviation),

 
    ggplot() + 
        geom_segment(size = 2, data = segment.df, 
                    aes(x = N, xend = N, y = Y, yend = Yend, color = Contribution))  +
        geom_point(data = df, alpha = 0.8, size = 2,

而后,咱们生成代表三种协方差的数据:正协方差,负协方差和无协方差:

# 协方差 
df.low <- data.frame(Y = y, Y_Hat = y.hat)
plot(y, y.hat)
 
y.hat <- y - 2 * (y - y.mean) + noise
plot.mean.deviation(y, y.hat)
# 没有协方差
y.hat <- runif(N, -0.1, 0.1)

 

留神离群值(与均值的高偏差)对协方差的影响大于与均值靠近的值。此外,请留神,协方差靠近 0 示意变量之间在任何方向上仿佛都没有关联(即各个奉献项被对消了)。

因为协方差取决于数据的分布,因而具备高标准偏差的两个变量之间的相对协方差通常高于具备低方差的变量之间的相对协方差。让咱们可视化此属性:

 plot(y, y.hat)

df.high <- data.frame(Y = y, Y_Hat = y.hat)

因而,协方差自身不能得出对于两个变量的相关性的论断。这就是为什么 Pearson 的相关系数通过两个变量的标准偏差将协方差归一化的起因。因为这将相关性标准化到范畴[-1,1],因而即便变量具备不同的方差,也能够使相关性具备可比性。值 - 1 示意齐全负相关,值 1 示意齐全正相干,而值 0 示意没有相干。

R2 确定系数

确定系数 R2 定义为

其中  SSres 是平方的残差和,SStot 是平方 的总和。对于模型抉择,R2 等效于 RMSE,因为对于基于雷同数据的模型,具备最小 MSE 的模型也将具备最大值。

能够依据相关系数或依据解释的方差来解释确定系数。

用相关系数解释

R 平方通常为正,因为具备截距的模型会产生 SSres <SStot 的预测 Y ^,因为模型的预测比均匀后果更靠近后果。因而,只有存在截距,确定系数就是相关系数的平方:

用解释方差解释

在平方总和合成为残差平方和回归平方和的状况下,

而后

这意味着 R2 示意模型所解释的方差比。因而,R2 = 0.7 的模型将解释 70% 的方差,而剩下 30% 的方差无法解释。

 确定系数

为了取得无关 R2,咱们定义了以下函数,利用它们能够绘制线性模型的拟合。现实模型将位于曲线的对角线上,并且将残差示意为与该对角线的偏差。

    # 确保该模型被解释为 GLM
    pred <- model$fitted.values
  
        plot.df <- data.frame("Prediction" = pred, "Outcome" = obs, 
                                "DataSet" = "training")
 

    if (!is.null(test.preds) && !is.null(test.labels)) {
        #存储预测点
        test.df <- data.frame("Prediction" = test.preds, 
                            "Outcome" = test.labels, "DataSet" = "test")
 
 ggplot() + 
        # 绘制训练样本
        geom_point(data = plot.df, 
            aes(x = Outcome, y = Prediction, color = DataSet))

例如,比拟以下模型

只管基于的模型  df.low 具备足够的拟合度(R 平方为 0.584),但df.low 不能很好地拟合数据(R 平方为 0.009)。

R 平方的局限性

仅基于 R 平方自觉抉择模型通常不是好办法。首先,R 平方不肯定能通知咱们一些对于拟合优度的信息。例如,思考具备指数分布的数据:

plot(x,y)

让咱们为基于这些数据的线性模型计算 R 2:

## \[1\] 0.9

如咱们所见,R 平方十分高。尽管如此,该模型仍无奈很好地拟合,因为它不恪守数据的指数分布。

R2 的另一个属性是它取决于值范畴。R2 通常在 X 的宽值范畴内较大,这是因为协方差的减少是由标准偏差调整的,该标准偏差的缩放速度比 1N 项引起的协方差的缩放速度慢。

## \[1\] "R squared: 0.924115453794893, MSE:0.806898017781999"
## \[1\] "R squared: 0.0657969487417489, MSE:0.776376454723889"

咱们能够看到,即便两个模型的残差平方和类似,第一个模型的 R2 也更高。

分类模型的绩效指标

二进制分类的许多性能度量均依赖于混同矩阵。假如有两个类别,0 和 1,其中 1 示意特色的存在(正类),0 示意特色的不存在(负类)。相应的混同矩阵是具备以下构造的 2×2 表:

预测 / 参考

0

1 个

0

TN

FN

1 个

FP

TP

其中 TN 示意实在否定的数量(模型正确预测否定类别),FN 示意假否定的数量(模型谬误地预测否定类别),FP 示意谬误必定的数量(模型谬误地预测必定类别),TP 示意实在阳性的数量(模型正确预测阳性类别)。

准确性与敏感性和特异性

基于混同矩阵,能够计算准确性,敏感性(真阳性率,TPR)和特异性(1- 假阳性率,FPR):

准确性示意正确预测的总体比率。准确性指标被认为很差,因为如果类别标签不均衡,它就不适合。例如,假如您要预测罕见肿瘤的存在(1 类)与不存在的常见肿瘤(0 类)。让咱们假如只有 10%的数据点属于必定类别,而 90%的数据属于侧面类别。总是预测阴性分类(即未发现肿瘤)的分类器的准确性如何?这将是 90%。然而,这可能不是一个十分有用的分类器。因而,灵敏度和特异性通常优于准确性。

敏感性示意正确预测的察看到的阳性后果的比率,而特异性示意与阳性分类相混同的察看到的阴性后果的比率。这两个数量答复以下问题:

  • 敏感性:如果事件产生,则模型检测到事件的可能性有多大?
  • 特异性:如果没有事件产生,那么该模型辨认出没有事件产生的可能性有多大?

咱们始终须要同时思考敏感性和特异性,因为这些指标自身对模型抉择没有用。例如,始终预测阳性类别的模型将使灵敏度最大化,而始终预测阴性类别的模型将使特异性最大化。然而,第一个模型的特异性较低,而第二个模型的灵敏度较低。因而,敏感性和特异性能够解释为跷跷板,因为敏感性的减少通常导致特异性的升高,反之亦然。

通过计算均衡精度,能够将灵敏度和特异性合并为一个数量。

均衡精度是更适宜于类别不均衡的问题的度量。

ROC 曲线下方的区域

评分分类器是为每个预测调配一个数值的分类器,可用作辨别这两个类的临界值。例如,二进制反对向量机将为正类调配大于 1 的值,为负类调配小于 - 1 的值。对于评分分类器,咱们通常心愿确定的模型性能不是针对单个临界值而是针对多个临界值。

这就是 AUC(ROC 曲线下方的区域)呈现的地位。此数值示意在几个截止点的灵敏度和特异性之间进行衡量。这是因为接收器工作个性(ROC)曲线只是 TPR 与 FPR 的关系图,而 AUC 是由该曲线定义的面积,在 [0,1] 范畴内。

应用 R,咱们能够应用ROCR 包来计算 AUC。让咱们首先创立一个用于绘制分类器及其 AUC 得分的函数:

    hist(y.hat\[y == 0\], col=rgb(1,0,0,0.5), 
    hist(y.hat\[y == 1\], col = rgb(0,0,1,0.5), add=T,

第一个示例显示容许完满拆散的分类器的 AUC 为 1。不能齐全拆散的分类器须要就义特异性来进步其灵敏度。因而,它们的 AUC 将小于 1。

退出移动版