机器学习模型评估指标R2与MSE详解

121 阅读4分钟

R2分数与均方误差(MSE)详解

今天我们将介绍一些对确定回归模型准确性和质量很重要的术语:

  • 方差
  • R2分数
  • 均方误差

我们将使用scikit-learn来说明这些概念。

回归模型的使用

理解这些指标有助于确定回归模型是准确还是具有误导性。使用回归统计技术有助于突出数据中的模式、趋势和关系,从而提供对未来的洞察。您可以看到自变量如何影响因变量以及这些关系的强度。

R2分数在机器学习中的重要性

任何回归模型的价值都取决于其准确性,特别是它解释数据方差的能力。这就是提高R2分数如此重要的原因。

机器学习和AI协同工作,识别正确的变量,微调模型以改进预测,并在复杂和非线性的大数据集中捕获难以识别的关系。AI和机器学习改善了模型与数据变化的拟合或解释方式,使其在做出预测时更加准确。

代码示例

让我们使用上一篇博客文章中的代码,并添加额外的逻辑。上次我们让自变量y和因变量x相关,以说明如何使用scikit-learn进行线性回归的基础知识。这次,我们将在因变量(y)中引入一些随机性,以便在我们的预测中存在一些误差。

什么是方差?

在线性回归方面,方差是观测值与预测值平均值相差多远的度量(即它们与预测值均值的差异)。目标是通过R2分数量化的低值。

什么是R2分数?

R2分数是"...因变量中可从自变量预测的方差比例"。数学定义是"(模型解释的总方差)/总方差"。因此,如果是100%,则两个变量完全相关(即完全没有方差)。R2分数在0%到100%之间变化。

阅读下面的代码,我们分三个步骤进行此计算以便于理解:

print ("total sum of squares", y)
print ("total sum of residuals ", g)
print ("r2 calculated", 1 - (g / y))

我们当然可以让scikit-learn使用r2_score()方法来完成:

print("R2 score : %.2f" % r2_score(ytest,preds))

什么是均方误差(MSE)?

均方误差(MSE)是误差平方的平均值。数字越大,误差越大。这里的误差指的是观测值y1, y2, y3, ...与预测值pred(y1), pred(y2), pred(y3), ...之间的差异。

如何在Python中计算MSE

以下是计算MSE的完整代码:

import matplotlib.pyplot as plt
from sklearn import linear_model
import numpy as np
from sklearn.metrics import mean_squared_error, r2_score

reg = linear_model.LinearRegression()
ar = np.array([[[1],[2],[3]], [[2.01],[4.03],[6.04]]])
y = ar[1,:]
x = ar[0,:]
reg.fit(x,y)
print('Coefficients: n', reg.coef_)

xTest = np.array([[4],[5],[6]])
ytest = np.array([[9],[8.5],[14]])
preds = reg.predict(xTest)

print("R2 score : %.2f" % r2_score(ytest,preds))
print("Mean squared error: %.2f" % mean_squared_error(ytest,preds))

er = []
g = 0
for i in range(len(ytest)):
    print( "actual=", ytest[i], " observed=", preds[i])
    x = (ytest[i] - preds[i]) **2
    er.append(x)
    g = g + x

x = 0
for i in range(len(er)):
    x = x + er[i]
print ("MSE", x / len(er))

v = np.var(er)
print ("variance", v)
print ("average of errors ", np.mean(er))

m = np.mean(ytest)
print ("average of observed values", m)

y = 0
for i in range(len(ytest)):
    y = y + ((ytest[i] - m) ** 2)
print ("total sum of squares", y)
print ("total sum of residuals ", g)
print ("r2 calculated", 1 - (g / y))

结果:

Coefficients:
[[2.015]]
R2 score : 0.62
Mean squared error: 2.34
actual= [9.] observed= [8.05666667]
actual= [8.5] observed= [10.07166667]
actual= [14.] observed= [12.08666667]
MSE [2.34028611]
variance 1.2881398892129619
average of errors 2.3402861111111117
average of observed values 10.5
total sum of squares [18.5]
total sum of residuals [7.02085833]
r2 calculated [0.62049414]

什么是好的均方误差(MSE)?

MSE没有正确的值。简单来说,值越低越好,0表示模型完美。由于没有正确答案,MSE的基本价值在于选择一个预测模型而不是另一个。

同样,R2应该是什么也没有正确答案。100%意味着完美的相关性。然而,有些模型的R2较低,但仍然是好模型。

一起解读R2和MSE

我们在这里要传达的信息是,在评估模型时,不能孤立地看待这些指标。您必须查看其他指标,并理解基础数学。我们将在后续的博客文章中深入讨论所有这些内容。