拟合回归中的误差计算

目录

1.MAE(平均绝对误差)

2.RMSE(均方根误差)

3.MSE(均方误差 )

4.R^2非线性模型

5.R2线性模型 

6.交叉验证:


   常用度量

1.MAE(平均绝对误差)

2.RMSE(均方根误差)

3.MSE(均方误差 )

%matlab中mse计算
mse=mse(T_sim-t_test); %T_sim为预测值  t_test为实际值

 

4.R^2非线性模型

%matlab计算R^2
N = size(t_test,1);   % t_test为行向量 N为行向量或者列向量得维数
R2=(N*sum(T_sim.*t_test)-sum(T_sim)*sum(t_test))^2/((N*sum((T_sim).^2)-(sum(T_sim))^2)*(N*sum((t_test).^2)-(sum(t_test))^2))  %T_sim预测值   t_test为实际值

5.R2线性模型 

6.交叉验证:

交叉验证是在机器学习中创建模型和验证模型参数时常用的方法

为什么需要cv?

在训练集(train set)上训练得到的模型表现良好,但在测试集(test set)的预测结果不尽如人意,这就说明模型可能出现了过拟合(overfitting),bias低而variance高,在未知数据上的泛化能力差。

一个改进方案是,在训练集的基础上进一步划分出新的训练集和验证集(validate set),在新训练集训练模型,在验证集测试模型,不断调整初始模型(超参数等),使得训练得到的模型在验证集上的表现最好,最后放到测试集上得到这个最优模型的评估结果。

这个方案的问题在于模型的表现依赖于验证集的划分,可能使某些特殊样本被划入验证集,导致模型的表现出现异常(偏好或偏差)。而且训练集划了一部分给验证集后,训练模型能得到的数据就变少了,也会影响训练效果。因为通常来说,训练数据越多,越能反映出数据的真实分布,模型训练的效果就越好,越可能得到无偏估计。

交叉验证思想应运而生,交叉验证可以充分使用所有的训练数据用于评估模型。
————————————————
版权声明:本文为CSDN博主「CtrlZ1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41076797/article/details/102730862

不同的超参数可能会导致我们训练出来不同的模型,也直接会影响到我们模型的表现。那么该如何调整或者说设置这些参数呢?我们就会用到交叉验证。

### 使用最小二乘法进行直线拟合 在应用最小二乘法进行直线拟合的过程中,目标是最小化观测到的数据点与由模型预测的结果之间的误差平方和。对于一组给定的数据点 \((x_i, y_i)\),假设这些数据可以被一条直线 \(y = ax + b\) 所描述,则可以通过求解如下正规方程来找到最优的参数 \(a\) 和 \(b\)[^1]。 #### 正规方程推导过程 为了简化说明,这里给出用于估计线性回归系数的一般形式: \[ a = \frac{n(\sum xy) - (\sum x)(\sum y)}{n(\sum x^2)-(\sum x)^2} \] \[ b = \bar{y}-a\bar{x}, \quad \text{其中}\; \bar{x}=\frac{\sum x}{n},\;\bar{y}= \frac{\sum y}{n}. \] 上述公式中的变量定义如下: - \( n \): 数据样本数量; - \( x,y \): 自变量和因变量对应的数值向量; - \( \bar{x},\bar{y} \): 分别表示自变量和因变量均值; 利用以上两个表达式即可计算拟合直线的斜率\(a\)和截距\(b\)。 #### 计算误差 完成拟合之后,还需要评估所选模型的好坏程度。常用的方法之一就是计算残差平方和 (RSS): \[ RSS = \sum_{i=1}^{N}(y_i-\hat{y}_i)^2,\qquad \text{其中 } \hat{y}_i=ax_i+b.\] 这里的\(y_i\)代表实际测量值得到的目标响应值,而\(\hat{y}_i\)则是根据拟合后的直线预测出来的理论输出值。较小的RSS意味着更好的拟合效果[^2]。 #### Python代码示例 下面是一个简单的Python脚本来演示如何使用NumPy库执行最小二乘法并绘制结果图: ```python import numpy as np from matplotlib import pyplot as plt def least_squares_fit(x_data, y_data): """Compute linear regression coefficients using Least Squares Method.""" mean_x = sum(x_data)/len(x_data) mean_y = sum(y_data)/len(y_data) num = 0 den = 0 for i in range(len(x_data)): num += (x_data[i]-mean_x)*(y_data[i]-mean_y) den += pow((x_data[i]-mean_x),2) slope = num/den intercept = mean_y-(slope*mean_x) return slope,intercept if __name__ == "__main__": # Example dataset X = [1, 2, 3, 4, 5] Y = [2.9, 5.1, 7., 8.8, 11.] m,b = least_squares_fit(X,Y) print(f"Slope={m:.4f}") print(f"Intercept={b:.4f}") predicted_Y=[m*x+b for x in X] rss=sum([(Y[i]-predicted_Y[i])**2 for i,_ in enumerate(Y)]) print(f'Residual Sum of Squares(RSS)= {rss}') fig=plt.figure() ax=fig.add_subplot(111) ax.scatter(X,Y,label='Data Points') ax.plot(X,predicted_Y,'r-',label=f'Fitted Line\ny={m:.2f}x+{b:.2f}') plt.legend(loc="upper left") plt.show() ``` 此段代码实现了对给定点集进行最小二乘法拟合并展示了最终得到的最佳拟合直线及其相应的RSS值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值