本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要介绍衡量线性回归算法最好的指标R squared。
引入R squared
前一小节提出了MSE、RMSE以及MAE三种衡量线性回归算法的指标,但是这些指标其实还有一些问题。
在分类问题中,使用分类准确度作为分类算法的衡量标准,分类准确度取值是在[0, 1]之间的:
- 如果是1代表分类准确度是最好的,是100%;
- 如果是0代表分类准确度是最差的,是0%。
由于分类准确度的范围就是在 [0, 1]之间,因此对于不同的分类算法来说,使用分类准确度可以很容易的比较算法的优劣。
但是在RMSE和MAE中是没有分类准确度这样的性质的:
比如:模型在预测房产的时候RMSE或者MAE结果是5,即误差为5万元,在预测学生的成绩时候RMSE或者MAE的结果是10,即误差为10分。在这种情况下,这个模型是作用在预测房产中好呢?还是在预测学生成绩中好?
我们无法进行判断的。这是因为此时得到的误差5和10是不同种类的东西,我们无法通过误差结果进行直接比较。这就是使用RMSE和MAE的局限性。
当然这个问题是可以解决的,这就是本小节介绍的R Squared这个新的回归问题的指标,中文中可以称"R方"。
下面更深入的介绍一些R方这个指标意义:
先介绍分式中的分子和分母所表达的含义:
- 分子,实质上就是MSE(除以m),本质上衡量的就是使用我们模型预测产生的误差;
- 分母,其实也可以看成是使用模型预测产生的误差,只不过此时的模型不再是我们训练的模型。这个模型与X无关,也就是无论来什么样的数据,模型的输出结果都是样本标签的均值,这是一个非常朴素的预测结果,这样的模型在机器学习领域或统计学领域中叫做Baseline Model,即最基准的模型。
最基准模型错误一定是比较多的,因为此时没有考虑X样本,直接生硬的将预测X的结果等于真实样本输出结果的均值。而对于我们模型来说,由于我们构建模型的时候充分考虑了X样本与其对应输出y之间的关系,因此分子一定小于等于分母。
R方这个式子要怎么来理解呢?
R方这个式子其实就是,我们使用baseline这个模型进行预测的时候会产生非常对的错误,而使用我们自己的模型进行预测,相应肯定会产生一些错误(数据中可能会有噪声等等原因),当然同时也会减少一些错误,所以我们使用1减去我们模型预测产生的错误除以使用baseline模型产生的错误,最终的结果其实相当于衡量我们的模型拟合住的这些数据的地方,也就是我们模型没有产生错误对应的指标。
通过上面的描述,我们可以根据R方的结果来得到下面的结论:
相当于把回归问题的衡量结果,也类似分类准确度那样规约到了0和1之间,并且1是最好的,0是最差的,这样的情况下,我就可以非常方便的使用R方这个指标,来针对同样一个回归算法应用在不同的问题上最终得到的结果来进行比较。不过回归问题的R方和分类问题中的准确度有个非常大的不同,就是存在R方小于0的情况,R方小于0的情况,就是我们的模型产生的错误比baseline这个基准模型产生错误大,这意味着,训练半天的模型还不如不进行训练,使用baseline模型预测的结果都比我们训练的模型要好,这种情况下R方就小于0,当然在处理真实数据的时候,很有可能遇到R方小于0的情况,遇到这种情况说明你训练的模型实在太差了,还不如直接使用基准模型,在这种情况下,通常很有可能意味着数据可能根本不存在线性关系。因为我们说的线性回归有一个非常重要的假设,数据间真的有一定的线性关系,当然此时说的线性关系,既可以是正相关的线性关系也可以是负相关的线性关系,但是如果你的数据完全没有线性关系的话,很有可能最终得到的R方式小于0的,此时就需要考虑一下不能使用线性回归法来解决此时的回归问题了。
实现R方指标
接着上一小节,在jupyter中继续实现R方:
接着在playML包中metrics模块下封装计算R方的函数:
接下来再jupyter调用即可:
sklearn中将线性回归封装在了linear_model模块下的LineaRegression类下,LineaRegression直接支持了多元线性回归。由于此时讲的是简单线性回归因此一直没有引入LinearRegression这个类,之前介绍kNN算法的时候,有score这个函数,这个函数直接度量kNN算法的准确度,线性回归算法中也有一个相应的score函数,对于线性回归算法,score函数将直接返回的是R平方这个标准,从这一点也可以看出R方这个标准是重要的,也是使用最为广泛的标准。
接下来将score函数封装在playML中的LinearRegression类中:
接下来在jupyter通过定义的线性回归对象调用score函数即可: