【机器学习笔记】机器学习评价指标——MSE、RMSE、MAE、R2

本文介绍了在回归问题中常用的评估指标:R平方、均方误差(MSE)、均方根误差(RMSE)和平均绝对误差(MAE),并讨论了它们在处理不同量纲和样本数量时的局限性。R2决定系数作为一种相对评估方法,通过与均值模型的对比来衡量模型的拟合效果。
摘要由CSDN通过智能技术生成

在解决回归问题时,我们可能会使用R平方(R2)、均方根误差(RMSE)、均方误差(MSE)和平均绝对误差(MAE)这三个评估指标。

1、均方误差:MSE(Mean Squared Error)

举个例子,假设建立了两个模型,一个模型使用了 10 个样本,计算出的上式值是 100;另一个模型使用了 50 个样本,计算出的值是 200,很难判断两个模型哪个更好。

那怎么办呢,其实很好解决,将上式除以 m 就可以去除样本数量的影响:

                                  

其中,为测试集上真实值-预测值。

这个式子的结果就是第一个模型评价指标:均方误差 MSE(Mean Squared Error)

针对上面举例的两个模型,他们的 MSE  分别是 10(100/10)和 4 (200/50),所以后者模型效果更好。

2、均方根误差:RMSE(Root Mean Squard Error)

但是,MSE公式有一个问题是会改变量纲。因为公式平方了,比如说 y 值的单位是万元,MSE 计算出来的是万元的平方,对于这个值难以解释它的含义。所以为了消除量纲的影响,我们可以对这个MSE 开方,得到的结果就第二个评价指标:均方根误差 RMSE(Root Mean Squared Error):

                                    

3、平均绝对误差:MAE(Mean Absolute Error)

上面公式为了避免误差出现正负抵消的情况,采用计算差值的平方。还有一种公式也可以起到同样效果,就是计算差值的绝对值:

                                                     

因此,将上式也除以样本数 m 得到的结果就是第三个评价指标:平均绝对误差 MAE(Mean Absolute Error):

                                       

上面三个模型解决了样本数量 m 和 量纲的影响。但是它们都存在一个相同的问题:当量纲不同时,难以衡量模型效果好坏。

举个例子,模型在一份房价数据集上预测得到的误差 RMSE 是 5 万元, 在另一份学生成绩数据集上得到误差是 10 分。凭这两个值,很难知道模型到底在哪个数据集上效果好,因此还可以使用以下方式进行评测。

4、决定系数:R2(R-Square)

它的含义就是,既然不同数据集的量纲不同,很难通过上面的三种方式去比较,那么不妨找一个第三者作为参照,根据参照计算 R方值,就可以比较模型的好坏了。

这个参照是什么呢,就是均值模型。我们知道一份数据集是有均值的,房价数据集有房价均值,学生成绩有成绩均值。现在我们把这个均值当成一个基准参照模型,也叫 baseline model。这个均值模型对任何数据的预测值都是一样的,可以想象该模型效果自然很差。基于此我们才会想从数据集中寻找规律,建立更好的模型。

R2-score 的计算公式是这样的:

                                            

其中,分子部分表示真实值与预测值的平方差之和,类似于均方差 MSE;分母部分表示真实值与均值的平方差之和,类似于方差 Var。

R2-score =  1,达到最大值。即分子为 0 ,意味着样本中预测值和真实值完全相等,没有任何误差。也就是说我们建立的模型完美拟合了所有真实数据,是效果最好的模型,R2-score 值也达到了最大。但通常模型不会这么完美,总会有误差存在,当误差很小的时候,分子小于分母,模型会趋近 1,仍然是好的模型,随着误差越来越大,R2-score 也会离最大值 1 越来越远,直到出现第 2 中情况。

R2-score =  0。此时分子等于分母,样本的每项预测值都等于均值。也就是说我们辛苦训练出来的模型和前面说的均值模型完全一样,还不如不训练,直接让模型的预测值全去均值。当误差越来越大的时候就出现了第三种情况。

R2-score < 0 :分子大于分母,训练模型产生的误差比使用均值产生的还要大,也就是训练模型反而不如直接去均值效果好。出现这种情况,通常是模型本身不是线性关系的,而我们误使用了线性模型,导致误差很大。

一般来说,R2-score越大,表示模型拟合效果越好。R2-score 反映的是大概有多准,因为,随着样本数量的增加,R2-score必然增加,无法真正定量说明准确程度,只能大概定量。

以下是使用梯度下降法实现线性回归的代码: ```python import numpy as np import pandas as pd # 读取数据集 data = pd.read_csv("题目1数据.csv") # 划分训练集和测试集 train_data = data.iloc[:350,:] test_data = data.iloc[351:,:] # 特征和标签 X_train = train_data.iloc[:,1:6].values y_train = train_data.iloc[:,6].values X_test = test_data.iloc[:,1:6].values y_test = test_data.iloc[:,6].values # 特征缩放 mean = np.mean(X_train, axis=0) std_dev = np.std(X_train, axis=0) X_train = (X_train - mean) / std_dev X_test = (X_test - mean) / std_dev # 添加截距项 X_train = np.insert(X_train, 0, 1, axis=1) X_test = np.insert(X_test, 0, 1, axis=1) # 学习率、迭代次数和初始权重 alpha = 0.01 num_iters = 1000 theta = np.zeros(6) # 定义代价函数和梯度函数 def cost_function(X, y, theta): m = len(y) J = np.sum((X.dot(theta) - y) ** 2) / (2 * m) return J def gradient(X, y, theta): m = len(y) grad = X.T.dot(X.dot(theta) - y) / m return grad # 梯度下降算法 def gradient_descent(X, y, theta, alpha, num_iters): J_history = [] for i in range(num_iters): theta -= alpha * gradient(X, y, theta) J_history.append(cost_function(X, y, theta)) return theta, J_history # 训练模型 theta, J_history = gradient_descent(X_train, y_train, theta, alpha, num_iters) # 预测 y_pred = X_test.dot(theta) # 评价指标 from sklearn.metrics import r2_score, mean_squared_error r2 = r2_score(y_test, y_pred) mse = mean_squared_error(y_test, y_pred) print("r2 score:", r2) print("mean squared error:", mse) ``` 其中,`cost_function` 和 `gradient` 分别计算代价函数和梯度,`gradient_descent` 是梯度下降算法的实现,`r2_score` 和 `mean_squared_error` 是评价指标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值