以波士顿房价预测为例,演示欠拟合问题和解决办法
以波士顿房价预测为例,演示欠拟合问题和解决办法
首先需要在jupyter
中安装对应的环境。
pip install numpy -i
pip install matplotlib -i
pip install pandas -i
pip install sklearn -i
简介:在机器学习中,模型的拟合程度对预测性能至关重要。然而,有时候我们会遇到欠拟合问题,即模型无法捕捉数据中的足够信息。我将以波士顿房价预测为例,讨论欠拟合问题及其解决办法。
数据集介绍
使用波士顿房价数据集,该数据集包含了一些影响波士顿地区房价的重要特征,如犯罪率、房屋年龄、学生-老师比例等。
欠拟合问题分析
假设我们只使用一个特征
(在这个例子中是房间数量)来预测目标变量
(房价)。
模型假设:
其中:
是目标变量(要预测的值,即房价);
是特征(在这个例子中是房间数量);
是截距(模型的偏置);
是斜率(房间数量对房价的影响);
是误差项(模型无法解释的部分)。
模型的任务是通过调整参数
和
来最小化预测值和实际值之间的均方误差(MSE)。
这个公式描述了线性回归模型的基本原理,它试图通过拟合一条直线来描述特征
和目标变量
之间的关系。
代码语言:javascript代码运行次数:0运行复制from sklearn.datasets import load_boston
from _selection import train_test_split
from sklearn.linear_model import LinearRegression
from import mean_squared_error
import numpy as np
# 加载数据集
boston = load_boston()
X = boston.data
y =
# 只使用一个特征(房间数量)来演示欠拟合
X_train, X_test, y_train, y_test = train_test_split(X[:, 5], y, test_size=0.2, random_state=42)
# 创建并拟合线性回归模型
model = LinearRegression()
model.fit(X_train[:, ], y_train)
# 在训练集和测试集上进行预测
train_predicti = model.predict(X_train[:, ])
test_predicti = model.predict(X_test[:, ])
# 计算均方误差(MSE)
train_mse = mean_squared_error(y_train, train_predicti)
test_mse = mean_squared_error(y_test, test_predicti)
print("线性回归模型 - 训练集 MSE:", train_mse)
print("线性回归模型 - 测试集 MSE:", test_mse)
# 绘制线性回归模型的预测结果与真实结果对比图
plt.figure(figsize=(10, 6))
plt.scatter(y_test, test_predicti, color='blue', label='预测结果')
plt.plot([y_(), y_()], [y_(), y_()], 'k--', lw=2, color='red', label='理想结果')
plt.xlabel('真实房价')
plt.ylabel('预测房价')
('线性回归模型预测结果对比图')
plt.legend()
plt.grid(True)
plt.show()
- 运行结果
- 结果分析
在这个结果中,可以看到线性回归模型在训练集和测试集上的均方误差(MSE)分别为约42.99和46.14。这两个值都相对较高,表明模型无法很好地拟合训练数据,也无法很好地泛化到测试数据上。
这种情况表明线性回归模型存在欠拟合问题。欠拟合通常发生在模型过于简单,无法捕捉数据中的复杂关系时。在这种情况下,模型的拟合能力不足,无法很好地解释数据中的变化。
对于波士顿房价数据集来说,只使用一个特征(房间数量)来拟合房价是远远不够的,因为房价受到多种因素的影响,而简单的线性关系无法很好地描述这种复杂性。需要更复杂的模型来捕捉数据中的更多信息,或者考虑添加更多的特征来改善模型的性能。
解决欠拟合问题
为了解决欠拟合问题,我们可以尝试以下方法:
- 增加模型复杂度: 使用更复杂的模型,例如多项式回归模型,可以更好地拟合数据中的非线性关系。
- 添加新特征: 增加一些有助于提高模型性能的新特征,例如特征组合、交互特征等。
- 减少正则化: 如果模型采用了正则化技术,可以尝试减少正则化参数的值,从而降低对模型复杂度的惩罚。
使用多项式回归模型解决该问题:
代码语言:javascript代码运行次数:0运行复制from sklearn.datasets import load_boston
from _selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from import mean_squared_error
import numpy as np
# 加载数据集
boston = load_boston()
X = boston.data
y =
# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建一个带有多项式特征的线性回归模型
degree = 2 # 多项式的次数
model_poly = make_pipeline(PolynomialFeatures(degree), LinearRegression())
# 拟合多项式回归模型
model_poly.fit(X_train, y_train)
# 在训练集和测试集上进行预测
train_predicti_poly = model_poly.predict(X_train)
test_predicti_poly = model_poly.predict(X_test)
# 计算多项式回归模型的均方误差(MSE)
train_mse_poly = mean_squared_error(y_train, train_predicti_poly)
test_mse_poly = mean_squared_error(y_test, test_predicti_poly)
print("多项式回归模型 - 训练集 MSE:", train_mse_poly)
print("多项式回归模型 - 测试集 MSE:", test_mse_poly)
# 多项式回归模型的数学公式
print("多项式回归模型公式:")
print("y = β0 + β1*x1 + β2*x1^2 + ... + βn*x1^n")
在这个代码中,使用多项式回归模型来解决欠拟合问题。多项式回归模型通过添加特征的高次幂来增加模型的复杂度,从而更好地拟合数据。
多项式回归模型的数学公式为:
其中:
是目标变量(要预测的值);
是特征;
是模型的系数(待学习的参数);
是多项式的次数。
- 运行结果
- 运行结果分析
根据提供的结果,可以得出以下分析:
- 训练集 MSE: 5.14469559419275:训练集上的均方误差较低,说明多项式回归模型相对于训练集的拟合效果较好,模型能够较准确地预测训练集中的房价数据。
- 测试集 MSE: 14.18558072456174:测试集上的均方误差相对较高,说明多项式回归模型在测试集上的泛化能力较差,模型可能存在过拟合现象。过拟合是指模型在训练集上表现良好,但在测试集(或新数据)上表现较差的现象。
多项式回归模型在训练集上表现良好,但在测试集上存在一定的过拟合问题。可能需要进一步调整模型复杂度或者使用正则化等方法来解决过拟合问题,以提高模型的泛化能力。
具体参考这篇文章:以波士顿房价预测为例,演示过拟合问题和解决办法
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-0-09,如有侵权请联系 cloudcommunity@tencent 删除变量测试模型数据线性回归#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 17 条评论) |
本站网友 aqualung | 8分钟前 发表 |
lw=2 | |
本站网友 财神爷过生日 | 24分钟前 发表 |
可以尝试减少正则化参数的值 | |
本站网友 生态养殖模式 | 28分钟前 发表 |
" | |
本站网友 达夫通 | 29分钟前 发表 |
交互特征等 | |
本站网友 静佳jplus怎么样 | 29分钟前 发表 |
这两个值都相对较高 | |
本站网友 国盛大智慧 | 21分钟前 发表 |
LinearRegression()) # 拟合多项式回归模型 model_poly.fit(X_train | |
本站网友 孕早期营养 | 7分钟前 发表 |
多项式回归模型在训练集上表现良好 | |
本站网友 广州新世纪白癜风 | 9分钟前 发表 |
" | |
本站网友 kmyy | 6分钟前 发表 |
过拟合是指模型在训练集上表现良好 | |
本站网友 史玉柱收山之作 | 14分钟前 发表 |
可以尝试减少正则化参数的值 | |
本站网友 华豫之门主持人 | 16分钟前 发表 |
test_mse_poly) # 多项式回归模型的数学公式 print("多项式回归模型公式:") print("y = β0 + β1*x1 + β2*x1^2 + ... + βn*x1^n")在这个代码中 | |
本站网友 肾上腺素能受体 | 13分钟前 发表 |
演示过拟合问题和解决办法 本文参与 腾讯云自媒体同步曝光计划 | |
本站网友 赵丽宏的资料 | 15分钟前 发表 |
如犯罪率 | |
本站网友 肺结核的症状 | 23分钟前 发表 |
y_test = train_test_split(X[ | |
本站网友 湘阴房产 | 2分钟前 发表 |
但在测试集上存在一定的过拟合问题 | |
本站网友 不孕 | 22分钟前 发表 |
test_predicti_poly) print("多项式回归模型 - 训练集 MSE |