7.8 回归模型评估与交叉验证

本文介绍了回归模型评估的三种主要方法:平均绝对误差(MAE)、均方误差(MSE)和R平方值(R²)。通过示例展示了如何使用Python的sklearn库计算这些指标,帮助理解模型的准确性和拟合程度。

  回归模型评估有三种方法,分别是:平均绝对值误差、均方误差和R平方值,如表1所示:

指标描述metrics方法
Mean Absolute Error(MAE)平均绝对误差from sklearn.metrics import mean_absolute_error
Mean Square Error(MSE)平均方差from sklearn.metrics import mean_squared_error
R-SquaredR平方值from sklearn.metrics import r2_score

7.8.1 平均绝对误差

  平均绝对误差(MAE)就是指预测值与真实值之间平均相差多大,公式如下:


图1 平均绝对误差(MAE)

  其中,fi是预测值,yi是真实值,ei=|fi-yi|即是绝对误差。
  sklearn库的metrics模块提供了mean_absolute_error方法,用来评估回归模型,首先建立数据集和线性回归模型对测试集数据进行预测,示例代码:

# 创建数据集,其中矩阵X表示特征值,向量y表示所属类目标记值
import numpy as np
X=np.random.random((10,5))
y=np.random.randn(10,1)

# 数据切分为训练集和测试集
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)

# 利用线性回归模型对数据进行拟合
from sklearn.linear_model import LinearRegression
lr=LinearRegression(normalize=True)
lr.fit(X_train,y_train)

# 对测试集数据预测
y_pred = lr.predict(X_test)
print(y_pred)
print(y_test)

运行结果:

[[-1.34421249]
 [-0.07903063]
 [-1.56484151]]
[[-0.3252582 ]
 [-1.31381548]
 [ 0.00690077]]

  然后利用引入平均绝对误差方法对模型进行评估,示例代码:

from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test, y_pred)

  运行结果:

1.275160473519662

7.8.2 平均方差

  均方误差是指参数估计值与参数真值之差平方的期望值,记为MSE。MSE是衡量平均误差的一种较方便的方法,MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。均方误差的公式如下:


图6 均方误差

  sklearn库的metrics模块提供了mean_squared_error方法,用来对回归模型进行均方误差评估,示例代码:

from sklearn.metrics import mean_squared_error
mean_squared_error(y_test, y_pred)

运行结果:

1.6777784223212659

7.8.3 R平方值

  它是表征回归方程在多大程度上解释了因变量的变化,或者说方程对观测值的拟合程度如何。其公式如图7所示:


图7 R平均值

  sklearn库的metrics模块提供了r2_score方法,用来对回归模型进行R平方值评估,示例代码:

from sklearn.metrics import r2_score
r2_score(y_test, y_pred)

  运行结果:

-4.3321743235578118

7.:8.4 交叉验证(Cross-Validation)

  交叉验证,有的时候也称作循环估计(Rotation Estimation),是一种统计学上将数据样本切割成较小子集的实用方法,该理论是由Seymour Geisser提出的。在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。这个过程一直进行,直到所有的样本都被预报了一次而且仅被预报一次。把每个样本的预报误差平方加和,称为PRESS(predicted Error Sum of Squares)。
  交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set)。首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。
  无论分类还是回归模型,都可以利用交叉验证,进行模型评估,示例代码:

from sklearn.cross_validation import cross_val_score
print(cross_val_score(knn, X_train, y_train, cv=4))
print(cross_cal_score(lr, X, y, cv=2))
当然可以!下面我将向您展示如何使用 Python 编写多元线性回归方程代码。我们将使用 `scikit-learn 实现多元线性回归 ```python # 导入必要的库 import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score import pandas as pd # 示例数据集 (假设我们有一个包含多个特征的数据集) data = { 'feature1': [2.3, 4.5, 6.7, 8.9], 'feature2': [0.1, 0.2, 0.3, 0.4], 'target': [3.4, 5.6, 7.8, 9.0] # 目标变量 } df = pd.DataFrame(data) # 将DataFrame拆分为输入X和输出y X = df[['feature1', 'feature2']] # 特征矩阵 y = df['target'] # 标签列 # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建并拟合多元线性回归模型 model = LinearRegression() model.fit(X_train, y_train) # 进行预测 y_pred = model.predict(X_test) # 输出结果 print("预测值:", y_pred) print("真实值:", y_test.values) # 计算均方误差(MSE) mse = mean_squared_error(y_test, y_pred) print(f"Mean Squared Error: {mse}") # R^2 决定系数评价指标 r2 = r2_score(y_test, y_pred) print(f'R-squared Score: {r2}') ``` ### 关键步骤解释: 1. **导入所需的库** 我们需要引入一些重要的库,包括用于数值计算的 NumPy、机器学习模块 Scikit-Learn 和 Pandas 来管理表格化数据。 2. **准备数据** 构建一个示例数据集,其中包含了两个自变量 (`feature1`, `feature2`) 和一个因变量 (`target`)。您可以根据实际情况替换这部分数据。 3. **划分训练集验证集** 使用 `train_test_split()` 函数按照指定比例随机划分子集,方便后续评估模型性能。 4. **创建及训练模型** 初始化 `LinearRegression` 类实例作为我们的回归模型,并调用 `.fit()` 方法基于提供的样本点对其进行训练。 5. **做出预测** 调用 `.predict()` 方法生成对未来观测值的估计,并打印出来便于观察比较。 6. **评估模型质量** 最后一步是对所构建模型的质量作出定量描述,这里采用了 MSE (均方误差)和 \(R^{2}\) 分数两种常见度量方式。 --- 如果您希望更深入地了解或优化这个过程,例如添加交叉验证、正则化项等高级特性,则可以根据需求进一步调整和完善上述基础版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值