当前位置: 首页 > news >正文

从线性回归到随机森林:手把手教你用Sklearn优化波士顿房价预测模型(附完整对比代码)

从线性回归到随机森林:手把手教你用Sklearn优化波士顿房价预测模型(附完整对比代码)

当你第一次用线性回归模型预测波士顿房价时,可能会发现R²分数徘徊在0.6-0.7之间——这意味着模型只能解释60%-70%的价格波动。作为数据科学实践者,我们永远在问:如何在不增加数据的情况下,让模型表现提升20%甚至更多?本文将带你完成一次完整的模型升级之旅,从基础的线性回归出发,通过随机森林实现预测性能的质的飞跃。

1. 环境准备与数据探索

在开始建模前,我们需要确保环境配置正确并充分理解数据特性。波士顿房价数据集包含506个样本,每个样本有13个特征变量和1个目标变量(房价中位数)。这些特征包括:

  • CRIM:城镇人均犯罪率
  • RM:住宅平均房间数
  • LSTAT:低收入人群百分比
  • PTRATIO:城镇师生比例

安装必要库并加载数据:

# 基础环境配置 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.datasets import fetch_openml from sklearn.model_selection import train_test_split # 加载数据集 boston = fetch_openml(name='boston', version=1, as_frame=True) df = pd.DataFrame(boston.data, columns=boston.feature_names) df['PRICE'] = boston.target

数据探索是建模前的关键步骤。通过以下代码快速了解数据分布:

# 数据概览 print(f"数据集形状: {df.shape}") print("\n描述性统计:") print(df.describe().T[['mean', 'std', 'min', '50%', 'max']]) # 缺失值检查 print("\n缺失值统计:") print(df.isnull().sum())

特征相关性分析能帮助我们识别重要特征:

# 特征相关性热力图 plt.figure(figsize=(12, 8)) corr_matrix = df.corr() sns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='coolwarm', mask=np.triu(np.ones_like(corr_matrix, dtype=bool))) plt.title('特征相关性矩阵', pad=20) plt.show()

注意:热力图中与PRICE相关性绝对值大于0.5的特征应重点关注。RM(房间数)通常显示最强正相关,而LSTAT(低收入比例)则呈现显著负相关。

2. 建立基线:线性回归模型

线性回归作为基准模型,能快速建立性能参照点。以下是完整实现流程:

from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score # 数据预处理 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=42) # 特征标准化 scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 建模与评估 lr = LinearRegression() lr.fit(X_train_scaled, y_train) y_pred = lr.predict(X_test_scaled) # 性能指标 mse = mean_squared_error(y_test, y_pred) rmse = np.sqrt(mse) r2 = r2_score(y_test, y_pred) print(f"线性回归性能:\nMSE: {mse:.2f}\nRMSE: {rmse:.2f}\nR²: {r2:.4f}")

典型输出结果:

线性回归性能: MSE: 24.29 RMSE: 4.93 R²: 0.6688

线性回归的特征重要性可通过系数绝对值体现:

# 特征重要性可视化 lr_feature_importance = pd.DataFrame({ 'Feature': X.columns, 'Importance': np.abs(lr.coef_) }).sort_values('Importance', ascending=False) plt.figure(figsize=(10, 6)) sns.barplot(x='Importance', y='Feature', data=lr_feature_importance) plt.title('线性回归特征重要性(系数绝对值)') plt.show()

3. 升级模型:随机森林回归

当线性回归表现不佳时,随机森林往往能带来显著提升。以下是实现步骤:

3.1 基础随机森林实现

from sklearn.ensemble import RandomForestRegressor # 初始化模型 rf = RandomForestRegressor(n_estimators=100, random_state=42) rf.fit(X_train, y_train) # 注意:随机森林不需要特征缩放 # 评估 y_pred_rf = rf.predict(X_test) rf_mse = mean_squared_error(y_test, y_pred_rf) rf_r2 = r2_score(y_test, y_pred_rf) print(f"随机森林性能:\nMSE: {rf_mse:.2f}\nR²: {rf_r2:.4f}")

性能对比:

指标线性回归基础随机森林
MSE24.297.91
0.66880.8921

3.2 特征重要性分析

随机森林提供了更可靠的特征重要性评估:

# 随机森林特征重要性 rf_feature_importance = pd.DataFrame({ 'Feature': X.columns, 'Importance': rf.feature_importances_ }).sort_values('Importance', ascending=False) plt.figure(figsize=(10, 6)) sns.barplot(x='Importance', y='Feature', data=rf_feature_importance) plt.title('随机森林特征重要性') plt.show()

与线性回归对比发现:

  • LSTAT在两种模型中都是最重要特征
  • RM的重要性在随机森林中更加突出
  • DIS(到就业中心距离)的重要性显著提升

3.3 可视化预测效果

# 预测结果对比 plt.figure(figsize=(10, 6)) plt.scatter(y_test, y_pred, alpha=0.5, label='线性回归') plt.scatter(y_test, y_pred_rf, alpha=0.5, label='随机森林', color='orange') plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r--') plt.legend() plt.xlabel('实际价格') plt.ylabel('预测价格') plt.title('模型预测效果对比') plt.show()

4. 高级优化:超参数调优

通过网格搜索可以进一步提升模型性能:

from sklearn.model_selection import GridSearchCV # 参数网格 param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [None, 10, 20], 'min_samples_split': [2, 5], 'min_samples_leaf': [1, 2] } # 网格搜索 grid_search = GridSearchCV( RandomForestRegressor(random_state=42), param_grid, cv=5, scoring='neg_mean_squared_error', n_jobs=-1 ) grid_search.fit(X_train, y_train) # 最佳模型 best_rf = grid_search.best_estimator_ y_pred_best = best_rf.predict(X_test) best_mse = mean_squared_error(y_test, y_pred_best) best_r2 = r2_score(y_test, y_pred_best) print(f"优化后性能:\nMSE: {best_mse:.2f}\nR²: {best_r2:.4f}") print("\n最佳参数组合:") print(grid_search.best_params_)

典型优化结果:

优化后性能: MSE: 7.23 R²: 0.9014 最佳参数组合: {'max_depth': 20, 'min_samples_leaf': 1, 'min_samples_split': 2, 'n_estimators': 200}

5. 模型部署与使用建议

将训练好的模型保存以便后续使用:

import joblib # 保存模型 joblib.dump(best_rf, 'boston_rf_model.pkl') # 加载模型 loaded_model = joblib.load('boston_rf_model.pkl') # 示例预测 sample = X_test.iloc[0:1] prediction = loaded_model.predict(sample)[0] print(f"\n样本预测:\n输入特征:\n{sample}\n预测价格: ${prediction*1000:.0f}")

实际应用中的建议:

  1. 数据更新:定期用新数据重新训练模型
  2. 监控:建立预测误差监控机制
  3. 解释性:使用SHAP值增强模型可解释性
  4. A/B测试:新旧模型并行运行对比实际效果
# SHAP值计算示例 import shap explainer = shap.TreeExplainer(best_rf) shap_values = explainer.shap_values(X_test) # 单个预测解释 shap.force_plot(explainer.expected_value, shap_values[0,:], X_test.iloc[0,:])

通过这次完整的模型优化旅程,我们从R²=0.67的线性回归出发,最终得到了R²=0.90的优化随机森林模型。这种性能提升在实际业务中可能意味着数百万美元的估值差异。

http://www.jsqmd.com/news/593462/

相关文章:

  • Linux网络配置实战:基于udhcpd与iptables的4G模组路由转发
  • C# 与 Dynamics 365 深度集成:从基础连接到高级自动化
  • Vectorizer:基于Potrace的高性能图像矢量化解决方案
  • 基于PLC的3x4立体车库系统设计:资料齐全,共12个车位共用载车板,通过升降横移实现存取车辆
  • 【RAG】【vector_stores001】阿里云OpenSearch向量存储完整案例
  • 从商业目标到技术实现:通用系统设计的四层逻辑框架
  • comsol方形锂电池电化学—热耦合模型充放电循环热仿真,三种模型 一维电化学模型耦合三维方形...
  • 【RAG】【vector_stores002】Google AlloyDB for PostgreSQL 向量存储完整案例
  • 别再只仿真了!用Multisim/Simulink仿真直流稳压电源(BUCK电路)后,这些关键参数和实物搭建要点你注意了吗?
  • d3d8to9:Direct3D 8到9的API转换解决方案及技术实现
  • 华为EulerOS 2.0(SP8)aarch64系统yum源配置实战:从备份到验证的完整指南
  • 如何快速掌握BiliTools:跨平台B站下载终极指南
  • 我亲测6款免费AI论文生成器,毕业论文/journal/职称稿一键出 - 麟书学长
  • 【实战】MCP 服务在 Nacos 中注册状态分析与优化
  • 魔兽争霸3终极优化指南:WarcraftHelper让你的经典游戏在现代系统上重焕新生
  • 告别手动移植!用ESP-IDF组件化方式管理你的Gui-Guider UI代码
  • Tabula:颠覆传统的PDF数据解放与智能提取工具
  • 单细胞分析新宠:miloR+KNN实战指南(附完整代码与避坑技巧)
  • OpCore-Simplify:黑苹果配置的智能革命——从手动调试到自动化生成的转变
  • 魔兽争霸III终极优化指南:告别卡顿闪退,畅玩经典游戏
  • 革命性图像矢量化全攻略:突破像素限制的高效解决方案
  • 大功率H桥电机驱动板电路设计方案 - ir2103驱动芯片应用方案
  • weixin282宠物店商城小程序设计与实现+ssm(文档+源码)_kaic
  • 别再只盯着报点率了:聊聊电容触摸屏算法里那些不为人知的‘软实力’
  • Harness Engineering 快速入门:让 AI Coding Agent 在你的项目里稳定工作
  • Excel处理地理数据进阶:除了度分秒转换,这些隐藏技巧让你效率翻倍
  • 2025届学术党必备的十大降AI率网站推荐榜单
  • Flightmare无人机仿真:从零开始的完整入门指南
  • YimMenu:重新定义GTA V游戏体验的全功能增强套件
  • 2026年4月市面上水果礼盒源头厂家,水果礼盒/香妃果礼盒/小苹果礼盒/鸡心果礼盒/海棠果礼盒,水果礼盒品牌推荐 - 品牌推荐师