新闻中心
机器学习项目二:利用XGB回归算法进行波士顿房价预测
本项目以UCL的波士顿房价数据集为对象,用XGBoost回归算法预测房价。先做EDA,检查无缺失值,经相关性分析等了解数据。划分数据集后训练模型,预测结果显示训练集MAE为0.0138,测试集MAE为2.344,R²达0.9085。特征重要性表明CRIM和RM影响最大,RAD和CHAS影响较小。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

一、项目背景介绍
波士顿房价预测是机器学习任务中的一个入门级任务,其数据十分简单,通过此案例的学习可以帮助初学者快速入门机器学习! 本项目中使用的数据集来自UCL机器学习回收系统,该数据是1978年收集的,506个Enries中的每一个代表波士顿不同郊区住宅的14个特征的汇总信息。
二、算法概述
2.1 机器学习常见回归分类算法
机器学习自监督学习主要分为两类一类是分类,另外一类是回归;分类主要是主要是预测一个或几个类别或者一个离散量,主要分为二分类和多分类;而回归主要是预测一个具体的数值或者说是一个连续量;这是分类和回归的最主要区别; 性回归是机器学习中最简单的算法,它可以通过不同的方式进行训练。 主要包括线性回归、Robust 回归、Ridge 回归、LASSO 回归、Elastic Net、多项式回归、多层感知机、随机森林回归和支持向量机; 1.线性分类器:线性判别分析(LDA),逻辑回归(logistic regression):优先,朴素贝叶斯分类器(naive bayes classifier),感知器(perceptron)
2.支持向量机(support vector machine):最小二乘支持向量机(least squares support vector machines )
3.二次分类器(quadratic classifier)
4.核估计(kernel estimation):最近邻居法(k-nearest neighbor)
5.Boosting(增强)算法:梯度增强(Gradient Boosting),自适应增强(Adaboost)
6.决策树(decision trees):随机森林(random forests)
7。神经网络(neural networks
本项目使用XGBoost回归算法
2.2 本文算法-XGBoost概述
算法原理: XGB(extreme gradient boosting)是GBDT的一种工业实现,也是通过不断增加新树,拟合伪残差去降低损失函数。其拟合过程是使用的损失函数的二阶泰勒展开,这是和GBDT的一个区别。
Motiff妙多
Motiff妙多是一款AI驱动的界面设计工具,定位为“AI时代设计工具”
334
查看详情
损失函数:
分裂结点算法: 精确的贪心法 枚举,时间开销大 近似的贪心
优点(快速高效可容错): 引入L1 L2正则惩罚项的LR和线性回归,目标函数公式=误差平方和+正则项 代价函数用了二阶Talor展开,引入一阶导和二阶导,提高模型拟和的速度 同RF,支持样本(行)随机抽取,也支持特征(列)随机抽取,降低运算,防过拟合; 代价函数引入正则化项,控制模型(树)复杂度,
缺点: 容易过拟合; 调参困难。
In [119]# 导入依赖库import numpy as np import pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport sklearn.datasetsfrom xgboost import XGBRegressorfrom sklearn import metricsfrom sklearn.model_selection import train_test_splitIn [120]
house_price_dataset = sklearn.datasets.load_boston() #从skLearn中导入波士顿房价数据集# print(house_price_dataset)In [121]
house_price_dataframe = pd.DataFrame(house_price_dataset.data,columns=house_price_dataset.feature_names)# 分配对应的列名In [122]
house_price_dataframe
CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \
0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0
1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0
2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0
3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0
4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0
.. ... ... ... ... ... ... ... ... ... ...
501 0.06263 0.0 11.93 0.0 0.573 6.593 69.1 2.4786 1.0 273.0
502 0.04527 0.0 11.93 0.0 0.573 6.120 76.7 2.2875 1.0 273.0
503 0.06076 0.0 11.93 0.0 0.573 6.976 91.0 2.1675 1.0 273.0
504 0.10959 0.0 11.93 0.0 0.573 6.794 89.3 2.3889 1.0 273.0
505 0.04741 0.0 11.93 0.0 0.573 6.030 80.8 2.5050 1.0 273.0
PTRATIO B LSTAT
0 15.3 396.90 4.98
1 17.8 396.90 9.14
2 17.8 392.83 4.03
3 18.7 394.63 2.94
4 18.7 396.90 5.33
.. ... ... ...
501 21.0 391.99 9.67
502 21.0 396.90 9.08
503 21.0 396.90 5.64
504 21.0 393.45
6.48
505 21.0 396.90 7.88
[506 rows x 13 columns]
三、数据分析---EDA
In [123]house_price_dataframe.describe() #查看数据统计
CRIM ZN INDUS CHAS NOX RM \
count 506.000000 506.000000 506.000000 506.000000 506.000000 506.000000
mean 3.613524 11.363636 11.136779 0.069170 0.554695 6.284634
std 8.601545 23.322453 6.860353 0.253994 0.115878 0.702617
min 0.006320 0.000000 0.460000 0.000000 0.385000 3.561000
25% 0.082045 0.000000 5.190000 0.000000 0.449000 5.885500
50% 0.256510 0.000000 9.690000 0.000000 0.538000 6.208500
75% 3.677083 12.500000 18.100000 0.000000 0.624000 6.623500
max 88.976200 100.000000 27.740000 1.000000 0.871000 8.780000
AGE DIS RAD TAX PTRATIO B \
count 506.000000 506.000000 506.000000 506.000000 506.000000 506.000000
mean 68.574901 3.795043 9.549407 408.237154 18.455534 356.674032
std 28.148861 2.105710 8.707259 168.537116 2.164946 91.294864
min 2.900000 1.129600 1.000000 187.000000 12.600000 0.320000
25% 45.025000 2.100175 4.000000 279.000000 17.400000 375.377500
50% 77.500000 3.207450 5.000000 330.000000 19.050000 391.440000
75% 94.075000 5.188425 24.000000 666.000000 20.200000 396.225000
max 100.000000 12.126500 24.000000 711.000000 22.000000 396.900000
LSTAT
count 506.000000
mean 12.653063
std 7.141062
min 1.730000
25% 6.950000
50% 11.360000
75% 16.955000
max 37.970000
In [124]
house_price_dataframe['price'] = house_price_dataset.targetIn [125]
house_price_dataframe.head()#查看数据前五行
CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \ 0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 PTRATIO B LSTAT price 0 15.3 396.90 4.98 24.0 1 17.8 396.90 9.14 21.6 2 17.8 392.83 4.03 34.7 3 18.7 394.63 2.94 33.4 4 18.7 396.90 5.33 36.2
查看每个特征对应的属性信息
3.1 检查是否有缺失值
In [126]house_price_dataframe.isnull().sum()
CRIM 0 ZN 0 INDUS 0 CHAS 0 NOX 0 RM 0 AGE 0 DIS 0 RAD 0 TAX 0 PTRATIO 0 B 0 LSTAT 0 price 0 dtype: int64
3.2 相关性分析
In [127]cor = house_price_dataframe.corr() #查看数据相关性In [128]
sns.heatmap(cor,cbar=True,square = True,annot=True,fmt = '.1f',annot_kws={'size':8},cmap = 'Blues')# 从热力图中可以看出 ,TaX财产税率呈正相关
<matplotlib.axes._subplots.AxesSubplot at 0x7f302c5fe6d0>
<Figure size 640x480 with 2 Axes>
3.3 查看各个变量之间的关系
sns.pairplot() 用来展示两两特征之间的关系 可以看到对角线上是各个属性的直方图(分布图),而非对角线上是两个不同属性之间的相关图
In [129]sns.pairplot(house_price_dataframe[['CRIM', 'RM', 'AGE', 'DIS', 'B', 'LSTAT']])
<seaborn.axisgrid.PairGrid at 0x7f302c604210>
<Figure size 1500x1500 with 42 Axes>In [130]
house_price_dataframe.columns
Index(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX',
'PTRATIO', 'B', 'LSTAT', 'price'],
dtype='object')
3.3 划分数据集
In [131]X = house_price_dataframe.drop('price',axis=1)
y = house_price_dataframe['price']
In [132]
X_train,X_test,y_train ,y_test = train_test_split(X,y,test_size=0.2,random_state = 1)In [133]
model = XGBRegressor()
四、模型训练
In [134]model.fit(X_train,y_train)
XGBRegressor(base_score=0.5, booster='gbtree', colsample_bylevel=1,
colsample_bynode=1, colsample_bytree=1, gamma=0, gpu_id=-1,
importance_type='gain', interaction_constraints='',
learning_rate=0.300000012, max_delta_step=0, max_depth=6,
min_child_weight=1, missing=nan, monotone_constraints='()',
n_estimators=100, n_jobs=24, num_parallel_tree=1, random_state=0,
reg_alpha=0, reg_lambda=1, scale_pos_weight=1, subsample=1,
tree_method='exact', validate_parameters=1, verbosity=None)
五、模型预测
5.1模型预测
调用XGBoost回归算法
5.2查看预测值
In [146]preds_train = model.predict(X_train)# preds_train
5.3 查看特征重要性
从中可以看出犯罪率(CRIM)和每栋房屋的平均访客数(RM)对房价有这最重要的影响程度,到公路的距离(RAD)以及是否领近(CHAS),则显得不那么重要, 因此在选取特征时,可以不考虑
In [136]from xgboost import plot_importance plot_importance(model) plt.show()
<Figure size 640x480 with 1 Axes>
5.4 查看训练集和测试集预测值得R2 squared和mae
In [137]# R2 squaredscore_1 = metrics.r2_score(y_train,preds_train) score_2 = metrics.mean_absolute_error(y_train,preds_train) score_2
0.01375658535721277In [138]
preds_test = model.predict(X_test) score_1 = metrics.r2_score(y_test,preds_test) score_2 = metrics.mean_absolute_error(y_test,preds_test) score_2
2.344013180452235
六、可视化结果
6.1 查看训练集上真实值和预测值的拟合程度(散点图)
In [139]plt.scatter(y_train,preds_train)
plt.xlabel('Actual Prices')
plt.ylabel('predicition price')
plt.title('Actual price VS predicition price')
plt.show()
<Figure size 640x480 with 1 Axes>
6.2 查看测试集上真实值和预测值的拟合程度(散点图)
In [140]plt.scatter(y_test,preds_test)
plt.xlabel('Actual Prices')
plt.ylabel('predicition price')
plt.title('Actual price VS predicition price')
plt.show()
<Figure size 640x480 with 1 Axes>In [141]
metrics.r2_score(y_test,preds_test)
0.9085331557145866
6.3 可视化测试集上真实房价与预测房价的分布
In [145]preds = model.predict(X_test) plt.plot(y_test.values, color="red") plt.plot(preds ,color="blue") plt.legend(['Actual Prices','Predicted prices']) plt.show()
<Figure size 640x480 with 1 Axes>
以上就是机器学习项目二:利用XGB回归算法进行波士顿房价预测的详细内容,更多请关注其它相关文章!
# 首款
# 全域营销推广哪家信誉好
# 关键词排名优化保举mars8服务
# seo需要学习哪些技术
# 河南网站seo优化软件
# 白沙公司网站推广报价
# 怎么开展推广营销策略
# 晋源区seo优化优惠吗
# 五道口网络营销推广优化
# seo实战纪录
# 朔州稳定seo推广公司
# 开源
# 泰勒
# ai
# 可以看出
# 系列产品
# 线上
# 主要是
# 这是
# 中文网
# 波士顿
# type
# fig
# red
# 区别
相关栏目:
【
行业资讯67740 】
【
技术百科0 】
【
网络运营39195 】
相关推荐:
语音聊天软件哪个好 语音聊天软件2025排行榜
夸克解压什么意思
为什么要出折叠屏手机
苹果16自带配件有哪些
阿里云盘修复工具怎么用
苹果16有哪些亮点功能
数组和J*A怎么打
faq是什么意思
shell如何注释所有命令
折叠屏手机哪个卖得最好
如何创建解压文件命令
typescript怎么使用map
车子上面nfc功能是什么意思
j*a数组怎么保存类
羽毛球拍power9是什么意思
苹果16promax有哪些颜色
跑分是什么意思
linux环境中如何使用ping命令
typescript为什么现在才火
typescript参数怎么用
vue组件typescript怎么用
恋爱软件免费聊天不收费的有哪些
春运抢票还用取票吗
J*a数组静态怎么打
ssd固态硬盘如何安装
咋免费领取爱奇艺会员 如何免费领取爱奇艺会员步骤
bc是什么意思
市盈率是负数是什么意思
如何用固态硬盘做缓存
尼桑越野车中控前power是什么意思
春运抢票失败怎么抢
put linux命令如何书写
如何打开win10命令
如何在命令行写j*a程序
域名批量查询工具有哪些
电动车充电器上的power是什么意思
win10电脑如何使用命令提示符
空调主板单片机怎么拆开
8英寸等于多少厘米
萝卜快跑的收费标准是什么
制冰机power1灯亮是什么意思
路由器power灯一直亮是什么意思
市盈率ttm市盈动静是什么意思
如何用adb命令停用系统软件
typescript怎么加号
今天是农历多少号
如何以命令符运行程序
grep命令的是如何实现
typescript接口怎么选
typescript如何标记私有方法


2025-07-31
浏览次数:次
返回列表
6.48
505 21.0 396.90 7.88
[506 rows x 13 columns]