0

0

机器学习项目二:利用XGB回归算法进行波士顿房价预测

P粉084495128

P粉084495128

发布时间:2025-07-31 11:03:38

|

1116人浏览过

|

来源于php中文网

原创

本项目以UCL的波士顿房价数据集为对象,用XGBoost回归算法预测房价。先做EDA,检查无缺失值,经相关性分析等了解数据。划分数据集后训练模型,预测结果显示训练集MAE为0.0138,测试集MAE为2.344,R²达0.9085。特征重要性表明CRIM和RM影响最大,RAD和CHAS影响较小。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

机器学习项目二:利用xgb回归算法进行波士顿房价预测 - php中文网

一、项目背景介绍

波士顿房价预测是机器学习任务中的一个入门级任务,其数据十分简单,通过此案例的学习可以帮助初学者快速入门机器学习! 本项目中使用的数据集来自UCL机器学习回收系统,该数据是1978年收集的,506个Enries中的每一个代表波士顿不同郊区住宅的14个特征的汇总信息。

机器学习项目二:利用XGB回归算法进行波士顿房价预测 - php中文网        

二、算法概述

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的一个区别。

EasySub – AI字幕生成翻译工具
EasySub – AI字幕生成翻译工具

EasySub 是一款在线 AI 字幕生成器。 它提供AI语音识别、AI字幕生成、AI字幕翻译,本来就很简单的视频剪辑。

下载

损失函数:

机器学习项目二:利用XGB回归算法进行波士顿房价预测 - php中文网        

分裂结点算法: 精确的贪心法 枚举,时间开销大 近似的贪心

优点(快速高效可容错): 引入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_split
   
In [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 [124124]
house_price_dataframe['price'] = house_price_dataset.target
   
In [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
               

查看每个特征对应的属性信息

机器学习项目二:利用XGB回归算法进行波士顿房价预测 - php中文网        

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财产税率呈正相关
       
               
               

3.3 查看各个变量之间的关系

sns.pairplot() 用来展示两两特征之间的关系 可以看到对角线上是各个属性的直方图(分布图),而非对角线上是两个不同属性之间的相关图

In [129]
sns.pairplot(house_price_dataframe[['CRIM',  'RM', 'AGE', 'DIS', 'B', 'LSTAT']])
       
               
               
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()
       
               

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.01375658535721277
               
In [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()
       
               

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()
       
               
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()
       
               

相关专题

更多
页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

402

2023.08.14

数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

465

2023.07.04

数据分析方法有哪几种
数据分析方法有哪几种

数据分析方法有:1、描述性统计分析;2、探索性数据分析;3、假设检验;4、回归分析;5、聚类分析。本专题为大家提供数据分析方法的相关的文章、下载、课程内容,供大家免费下载体验。

279

2023.08.07

网站建设功能有哪些
网站建设功能有哪些

网站建设功能包括信息发布、内容管理、用户管理、搜索引擎优化、网站安全、数据分析、网站推广、响应式设计、社交媒体整合和电子商务等功能。这些功能可以帮助网站管理员创建一个具有吸引力、可用性和商业价值的网站,实现网站的目标。

726

2023.10.16

数据分析网站推荐
数据分析网站推荐

数据分析网站推荐:1、商业数据分析论坛;2、人大经济论坛-计量经济学与统计区;3、中国统计论坛;4、数据挖掘学习交流论坛;5、数据分析论坛;6、网站数据分析;7、数据分析;8、数据挖掘研究院;9、S-PLUS、R统计论坛。想了解更多数据分析的相关内容,可以阅读本专题下面的文章。

507

2024.03.13

Python 数据分析处理
Python 数据分析处理

本专题聚焦 Python 在数据分析领域的应用,系统讲解 Pandas、NumPy 的数据清洗、处理、分析与统计方法,并结合数据可视化、销售分析、科研数据处理等实战案例,帮助学员掌握使用 Python 高效进行数据分析与决策支持的核心技能。

71

2025.09.08

Python 数据分析与可视化
Python 数据分析与可视化

本专题聚焦 Python 在数据分析与可视化领域的核心应用,系统讲解数据清洗、数据统计、Pandas 数据操作、NumPy 数组处理、Matplotlib 与 Seaborn 可视化技巧等内容。通过实战案例(如销售数据分析、用户行为可视化、趋势图与热力图绘制),帮助学习者掌握 从原始数据到可视化报告的完整分析能力。

55

2025.10.14

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

40

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

62

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号