python 基于xgboost预测波士顿房价

一、意义

这是一个机器学习练习项目,旨在熟悉xgboost的建模过程和数据分析的思路,目标数据选取sklearn自带数据集——波士顿房价

二、开始

1. 导入要用的库

from sklearn.datasets import load_boston
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn import preprocessing, metrics, model_selection
import xgboost as xgb
import warnings
warnings.filterwarnings("ignore")

2. 组装数据

data_boston = load_boston()  # 特征数据
clo_names = list(data_boston.feature_names)  # 获取特征数据名字
data_dst = data_boston.target  # 标签数据
# 把所有数据组装到 DataFrame 里,方便后续数据分析
df = pd.DataFrame(load_boston().data)
for i, n in enumerate(clo_names):
    print(i, n)
    df.rename(columns={
   
   i: n}, inplace=True)  # 重命名列名 数字索引 >>> 特征名
df.loc[:, 'MEDV'] = data_dst  # 最后一列加入标签数据
print(df.head())

df 数据现在是这样
df数据现在是这样

3. 分析数据

数据分析的过程比较主观,目的就是充分了解数据,为后面的特征工程和建模提供一定的依据

df.info()

检查数据
通过观察,当前数据无缺损值,不需要填补数据
下面就可以根据自己所想任意分析了
这里先看看房价数据(MEDV)的分布情况

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams
### 使用XGBoost模型实现房价数据的可视化分析 #### 数据准备与加载 为了进行有效的可视化分析,首先需要准备好用于训练和测试的数据集。以Boston房价数据集为例,在Python环境中可以通过`sklearn.datasets`模块轻松获取该数据集[^1]。 ```python from sklearn import datasets import pandas as pd # 加载波士顿房价数据集 boston = datasets.load_boston() df = pd.DataFrame(boston.data, columns=boston.feature_names) df['PRICE'] = boston.target ``` #### 构建并训练XGBoost模型 完成数据预处理之后,下一步就是构建XGBoost回归模型,并对其进行训练。这里采用默认参数快速搭建一个基础版本的XGBoost模型[^3]。 ```python import xgboost as xgb from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # 划分特征变量与目标变量 X = df.drop('PRICE', axis=1) y = df['PRICE'] # 将数据划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123) # 创建DMatrix对象供XGBoost使用 dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test) # 设置初始参数 params = { 'objective': 'reg:squarederror', } # 训练模型 model = xgb.train(params=params, dtrain=dtrain, num_boost_round=100) ``` #### 可视化实际值对比预测值 通过绘制图表比较真实价格与预测价格之间的差异,能够直观地评估模型性能。此部分展示了如何创建散点图来展示两者的关系[^2]。 ```python import matplotlib.pyplot as plt import seaborn as sns # 获取预测结果 predictions = model.predict(dtest) # 绘制实际值 vs 预测值图形 plt.figure(figsize=(8, 6)) sns.scatterplot(x=y_test, y=predictions) line = range(int(min(y_test)), int(max(y_test)) + 1) plt.plot(line, line, color='red') # 对角线表示完美拟合情况 plt.xlabel('Actual Prices') plt.ylabel('Predicted Prices') plt.title('Actual Price VS Predicted Price') plt.show() ``` #### SHAP值解释模型决策逻辑 除了基本的结果可视化外,还可以借助SHAP库进一步探索各个输入特征对于最终输出的影响程度。这有助于理解哪些因素最影响房屋定价以及它们是如何共同作用于模型预测中的。 ```python import shap explainer = shap.TreeExplainer(model) shap_values = explainer.shap_values(X_test) # 总览各特征的重要性 shap.summary_plot(shap_values, X_test, feature_names=X.columns.tolist(), plot_type="bar") # 局部依赖关系绘图 for name in ['RM', 'LSTAT']: # 这里选择了两个重要特征作为例子 shap.dependence_plot(name, shap_values, X_test, interaction_index=None, feature_names=X.columns.tolist()) ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值