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

发布于:2025-09-06 ⋅ 阅读:(21) ⋅ 点赞:(0)

决策树回归:初学者指南

一、什么是决策树回归?

决策树回归是一种用 "树形结构" 预测连续数值(如房价、温度)的算法。它通过一系列规则(比如 "面积是否 > 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参数)避免过拟合,让模型更稳健。


网站公告

今日签到

点亮在社区的每一天
去签到