Sklearn.metrics下面的r2_score函数用于计算R²(确定系数:coefficient of determination)。它用来度量未来的样本是否可能通过模型被很好地预测。分值为1表示最好,但我们在使用过程中,经常发现它变成了负数,多次手动调参只能改变负值的大小,却始终不能让该值变成正数。
本文将这一问题进行一些初步探讨,希望能起到够抛砖引玉的作用。
R²的定义如下:![Alt]在这里插入图片描述从公式来看,即使我们不使用任何模型,仅仅用目标集标签的平均值,就能让R2_score为0,如果值为负数,则表示我们预测的结果还不如测试集中的y_label的平均值准确。下面我们最简单的模型去测试一下R2_score到底跟什么有关系。
首先,我们先在三维空间里构建两个数据集。一个是z=y的一次平面,数据集在这个平面上。另外一个是z=xx+yy的二次抛物曲面,数据来自这个平面上。废话不多说,上代码:
import sklearn
from sklearn import preprocessing
from sklearn import linear_model
from sklearn.metrics import r2_score#R square
from sklearn.svm import SVR
构建z=y平面
X1_train = [[0,0],[0,1],[1,0],[1,1],[2,0],[-2,0],[1,-3],[-1,-1]]
y1_train = [0,1,0,1,0,0,-3,-1]
X1_test = [[2,-1],[0,2],[-1,-2],[1.5,1.5]