第5章【思考与练习1】 延续回归模型的性能评估,计算使用全部数据学习得到的回归模型linreg在测试集上的性能。从例5-2训练集中取出前100条、200条样本,学习得到回归模型,并在测试集上预测分析

本文探讨了回归模型在使用全部数据与训练集数据进行训练后的性能差异。实验结果显示,使用全部数据的模型在测试集上的决定系数优于只使用训练集的数据,表明全数据模型预测效果更优。此外,还对比了使用100条和200条样本训练的模型在测试集上的预测性能,两者决定系数接近,表明样本数量对预测效果的影响不大,但200条数据的模型表现略好。
摘要由CSDN通过智能技术生成

P96思考与练习1

1. 延续回归模型的性能评估,计算使用全部数据学习得到的回归模型linreg在测试集上的性能,与只使用训练集的模型linregTr进行比较,并对结果进行分析。

#1
#模型linreg
import pandas as pd
data = pd.read_csv('data/advertising.csv',index_col = 0)
x = data.iloc[: ,0:3].values.astype(float)
y = data.iloc[: ,3].values.astype(float)
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(x,y)
print(linreg.intercept_,linreg.coef_)

#模型linregTr
from sklearn import model_selection
x_train,x_test,y_train,y_test = model_selection.train_test_split(x,y,test_size = 0.35,random_state = 1)
linregTr = LinearRegression()
linregTr.fit(x_train,y_train)
print(linregTr.intercept_,linregTr.coef_)

#将模型linregTr运用到测试集
from sklearn import metrics
y_test_pred1 = linregTr.predict(x_test)
test_err1 = metrics.mean_squared_error(y_test,y_test_pred1)
print('The mean squar error of test are:{:.3f}'.format(test_err1))
predict_score1 = linregTr.score(x_test,y_test)
print('The decision coeficient is:{:.3f}'.format(predict_score1))

#将模型linreg运用到测试集
y_test_pred2 = linreg.predict(x_test)
test_err2 = metrics.mean_squared_error(y_test,y_test_pred2)
print('The mean squar error of test are:{:.3f}'.format(test_err2))
predict_score2 = linreg.score(x_test,y_test)
print('The decision coeficient is:{:.3f}'.format(predict_score2))

 分析:使用全部数据学习得出的回归模型linreg在测试集上的决定系数为0.916,大于只使用训练集的模型linregTr的决定系数0.913。由于决定系数越大,预测效果越好。所以回归模型linreg在测试集上的预测效果要好些。

2. 从例5-2训练集中取出前100条、200条样本,学习得到回归模型,在测试集上计算这些模型的预测性能,并进行分析比较。(第2道题目有些歧义,样本总共就200条,例5-2中的训练集也不过是130条,从130条中取200条?。所以第2题按照老书第一版的描述来:

从例5-1中取出前100条样本,学习回归模型linregHalf;在练习1的测试集上计算该模型预测性能,并与使用200条样本学习的模型比较。

#2
#此处仅取出前100条样本,前200条样本即是全部的样本数,在第1题中已计算过
import pandas as pd
data = pd.read_csv('data/advertising.csv',index_col = 0)
x1 = data.iloc[:100,0:3]
y1 = data.iloc[:100,3]
from sklearn.linear_model import LinearRegression
linregHalf = LinearRegression()
linregHalf.fit(x1,y1)
print(linregHalf.intercept_,linregHalf.coef_)

#将模型linregHalf运用到测试集
y_test_pred3 = linregHalf.predict(x_test)
test_err3 = metrics.mean_squared_error(y_test,y_test_pred3)
print('The mean squar error of test are:{:.3f}'.format(test_err3))
predict_score3 = linregHalf.score(x_test,y_test)
print('The decision coeficient is:{:.3f}'.format(predict_score3))

分析: 由练习1可知,200条样本学习的模型在测试集上的决定系数为0.916,而模型linregHalf的为0.915,决定系数高的预测效果要好,所以200条数据的模型在测试集上的预测效果较好一些,差别不大,预测效果基本相同。

好的,下面是使用Python实现的代码: ```python # 导入所需的库和数据集 import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from sklearn.datasets import load_boston # 加载数据集 boston = load_boston() # 将数据集转换为DataFrame格式 boston_df = pd.DataFrame(boston.data, columns=boston.feature_names) # 添加房价作为目标变量 boston_df['PRICE'] = boston.target # 查看数据集 print(boston_df.head()) # 数据预处理 # 检查是否有缺失值 print(boston_df.isnull().sum()) # 查看数据集的统计信息 print(boston_df.describe()) # 数据可视化 # 绘制每个特征与房价的关系图 sns.set(rc={'figure.figsize':(12, 6)}) for index, feature_name in enumerate(boston.feature_names): plt.subplot(4, 4, index + 1) sns.scatterplot(x=feature_name, y='PRICE', data=boston_df) # 分割数据集为训练集测试集 from sklearn.model_selection import train_test_split X = boston_df.drop('PRICE', axis=1) y = boston_df['PRICE'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 建立模型 from sklearn.linear_model import LinearRegression lin_reg = LinearRegression() lin_reg.fit(X_train, y_train) # 模型评估 from sklearn.metrics import mean_squared_error, r2_score y_train_pred = lin_reg.predict(X_train) train_mse = mean_squared_error(y_train, y_train_pred) train_r2 = r2_score(y_train, y_train_pred) print('训练集均方误差:', train_mse) print('训练集R2得分:', train_r2) y_test_pred = lin_reg.predict(X_test) test_mse = mean_squared_error(y_test, y_test_pred) test_r2 = r2_score(y_test, y_test_pred) print('测试集均方误差:', test_mse) print('测试集R2得分:', test_r2) # 预测结果 new_house = pd.DataFrame(np.array([[0.00632, 18.0, 2.31, 0, 0.538, 6.575, 65.2, 4.0900, 1, 296.0, 15.3, 396.90, 4.98]]), columns=boston.feature_names) price_pred = lin_reg.predict(new_house) print('预测房价:', price_pred) ``` 希望这份代码能够对你有所帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是学数据分析的阿龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值