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

【数学建模学习笔记】机器学习回归:决策树回归

决策树回归:初学者指南

一、什么是决策树回归?

决策树回归是一种用 "树形结构" 预测连续数值(如房价、温度)的算法。它通过一系列规则(比如 "面积是否 > 50 平米?")将数据分成小群体,每个群体的平均值就是预测结果。

二、核心概念
  • 信息增益:判断哪个特征最适合划分数据(划分后数据 "混乱度" 下降越多,该特征越重要)。
  • Gini 指数:衡量数据纯度(值越小,群体内数据越相似)。
三、实战:用决策树回归预测房价

下面结合代码一步步实现,全程使用 Python 的scikit-learn库。

1. 准备工作:导入库和数据

首先导入需要的工具库,并读取房价数据:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split  # 划分训练集和测试集
from sklearn.preprocessing import StandardScaler      # 数据标准化
from sklearn.tree import DecisionTreeRegressor        # 决策树回归模型
from sklearn.metrics import mean_squared_error, r2_score  # 模型评估
import matplotlib.pyplot as plt                       # 可视化# 读取房价数据(在线Excel文件)
df = pd.read_excel('https://labfile.oss.aliyuncs.com/courses/40611/%E5%8E%9F%E5%A7%8B%E6%95%B0%E6%8D%AE_%E6%88%BF%E4%BB%B7%E9%A2%84%E6%B5%8B%EF%BC%88mini%E7%89%88%E6%95%B0%E6%8D%AE%EF%BC%89.xlsx')
df.head()  # 查看前5行数据
2. 数据预处理

原始数据需要处理才能输入模型,主要步骤包括:处理文字特征、填补缺失值、标准化。

# 1. 处理文字特征(将"户型""电梯"等文字转为数字)
df['户型'] = df['户型'].map({"高端装修": 3, "简单装修": 1, "精装修": 2})
df['电梯'] = df['电梯'].map({"无": 0, "有": 1})# 2. 处理缺失值(这里直接删除含缺失值的行,简单高效)
df = df.dropna()# 3. 重命名中文列(方便后续处理)
column_mapping = {'户型': 'Type', '电梯': 'Elevator', '面积': 'Area', '房龄': 'Age', '装修程度': 'Decoration', '容积率': 'Plot_Ratio', '绿化率': 'Greening_Rate', '房价': 'House_Price'
}
df.rename(columns=column_mapping, inplace=True)# 4. 分离特征(输入)和标签(输出)
X = df.loc[:, 'Type':'Greening_Rate']  # 特征:Type到Greening_Rate的所有列
y = df['House_Price']                  # 标签:房价(要预测的值)# 5. 标准化(让不同特征在同一尺度上)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)  # 标准化后的特征
3. 划分训练集和测试集
# 按8:2划分训练集(用于训练模型)和测试集(用于评估模型)
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42  # random_state=42保证结果可重复
)
4. 训练决策树回归模型
# 创建决策树回归器
regressor = DecisionTreeRegressor(random_state=42)  # random_state固定随机种子# 用训练集训练模型
regressor.fit(X_train, y_train)# 用测试集预测房价
y_pred = regressor.predict(X_test)  # y_pred是预测的房价,y_test是真实房价
5. 评估模型效果

均方误差(MSE) 和R² 得分评估模型:

# 计算均方误差(值越小,预测越准)
mse = mean_squared_error(y_test, y_pred)
# 计算R²得分(越接近1,模型解释力越强)
r2 = r2_score(y_test, y_pred)print(f'均方误差: {mse:.2f}')  # 输出:均方误差: 152.50
print(f'R²得分: {r2:.2f}')    # 输出:R²得分: 0.76(效果不错)
6. 分析特征重要性

看看哪些特征对房价影响最大:

# 获取特征重要性(每个特征的影响程度)
feature_importance = regressor.feature_importances_# 可视化特征重要性
plt.figure(figsize=(12, 8))
plt.barh(X.columns, feature_importance, color='skyblue')  # 水平柱状图
plt.xlabel('特征重要性')
plt.ylabel('特征名称')
plt.title('各特征对房价的影响')
plt.show()

运行后会看到:面积(Area) 和容积率(Plot_Ratio) 对房价影响最大。

四、总结

决策树回归的优点是简单易懂,能直观看出特征的重要性。通过上面的代码,我们完成了从数据处理到模型评估的全流程,并用房价数据验证了模型效果。实际使用时,可以通过调整树的深度(max_depth参数)避免过拟合,让模型更稳健。

http://www.dtcms.com/a/367219.html

相关文章:

  • Qt---状态机框架QState
  • Java ForkJoin
  • 办公任务分发项目 laravel vue mysql 第一章:核心功能构建 API
  • Dify 低代码平台技术详解与实践
  • 实验室智能化管理信息系统如何重塑实验室运作模式?
  • Linux系统shell脚本(三)
  • 解密注意力计算的并行机制:从多头并张量操作到CUDA内核优化
  • 【Luogu_P5839】 [USACO19DEC] Moortal Cowmbat G【动态规划】
  • C语言(长期更新)第14讲:指针详解(四)
  • 第六章 Cesium 实现简易河流效果
  • FastDDS:第三节(3.2小节)
  • 规则引擎开发现在已经演化成算法引擎了
  • #T1359. 围成面积
  • Java并发编程:sleep()与wait()核心区别详解
  • 通过Interface扫描获取所有其实现类
  • AI 浪潮下阿里云“高光”乍现,但离终局胜利尚远
  • MySQL主从复制进阶(GTID复制,半同步复制)
  • 搭建基于 Solon AI 的 Streamable MCP 服务并部署至阿里云百炼
  • 鸿蒙NEXT动画开发指南:组件与页面典型动画场景解析
  • ios按键精灵提示 “设备信息丢失”如何处理?
  • 在Ant Design Vue 中使用图片预览的插件
  • Elixir通过Onvif协议控制IP摄像机,扩展ExOnvif的摄像头停止移动 Stop 功能
  • 【RNN-LSTM-GRU】第五篇 序列模型实战指南:从选型到优化与前沿探索
  • 对于数据结构:链表的超详细保姆级解析
  • 从0到1搭建某铝箔智慧工厂网络:5G与WiFi 6助力智能制造
  • 2025年财会领域专业资格认证选择指南
  • AR眼镜在智能制造的应用方向和场景用例|阿法龙XR云平台
  • BERT家族进化史:从BERT到LLaMA,每一次飞跃都源于对“学习”的更深理解
  • 【深度学习】P1 引言:深度学习的万家灯火
  • 网络安全初级-渗透测试