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