文章目录
- 回归树
- 回归树结构
- 回归树的工作原理
- 优点与缺点
- 构建回归树模型
- 回归树模型参数介绍
- 训练模型
- 测试模型
- 总结
回归树
决策树是一种常用的机器学习算法,广泛应用于分类和回归任务中。当决策树用于回归任务时,我们称之为回归树(Regression Tree)。与分类树的主要区别在于,回归树的输出是连续的数值,而不是离散的类别标签。
回归树结构
回归树的工作原理
- 分裂节点的选择:
- 在构建回归树时,选择最佳分裂点(即特征值)和分裂规则的主要依据是减少数据集的残差平方和(Residual Sum of Squares, RSS)。具体来说,对于每个候选分裂点,算法会评估将数据集分为两部分后,这两部分数据各自的残差平方和之和是否比不分裂时更小。
- 通常使用最小二乘法来评估每个候选分裂点的质量。
- 生长与剪枝:
- 回归树通过递归地选择最佳分裂点来生长,直到满足某个停止条件(如节点内样本数少于某个阈值、树的最大深度达到预设值等)。
- 由于过拟合的风险,回归树在构建完成后通常需要进行剪枝。剪枝可以通过预剪枝(在树生长过程中提前停止)或后剪枝(树完全生长后再通过某种准则修剪)来实现。
- 预测:
- 对于新样本的预测,回归树会将其沿树向下传递,直到达到一个叶节点。该叶节点的平均值(或其他统计量,如中位数)将被用作该样本的预测值。
优点与缺点
优点:
- 易于理解和解释。
- 对异常值不敏感(因为树是基于分裂规则构建的,而不是直接拟合数据)。
- 可以处理非线性关系。
缺点:
- 可能过拟合,尤其是当树生长得过于复杂时。
- 对特征之间的交互建模能力有限。
- 相比于一些其他回归模型,可能不够精确。
构建回归树模型
与分类树不同,回归树的目标是预测一个连续值,而不是一个类别。
对于构建一个完整的模型,主要从以下两个方面进行:
- 训练模型
- 测试模型
回归树模型参数介绍
class sklearn.tree.DecisionTreeRegressor(
criterion='mse',splitter='best',max_depth=None,min_samples_split=2,
min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features=None,random_state=None,
max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None,presort=False)
criterion:节点分裂依据,默认:mse ----> 【按默认选择mse即可】
splitter:表示以最优的方式切分节点,默认best ----> 【按默认选择best即可】
max_depth:树的最大深度。----> 【通过交叉验证来进行选择】
min_samples_split :分裂一个内部节点需要的最小样本数,默认值是2。
min_samples_leaf :叶子节点最少样本数,默认值是1,
max_leaf_nodes:设置最多的叶子节点个数,达到要求就停止分裂【控制过拟合】 ----> 【设置此参数之后max_depth失效】★重要
训练模型
- 收集数据
链接:训练数据
提取码:7f7y
- 数据预处理
读取数据,将变量与标签分离:
import pandas as pd
#回归
data_1 = pd.read_csv("spambase.csv",encoding='gbk')
x = data_1.iloc[:,:-1] #取所有行的第一列到倒数第二列数据,左闭右开
y = data_1.iloc[:,-1] #取所有行的最后一列数据
- 构建模型
可以通过交叉验证遍历最大深度max_depth来提高模型效果:
from sklearn import tree
reg = tree.DecisionTreeRegressor() #尝试修改参数max_depth,测试模型效果
reg = reg.fit(x,y)
测试模型
因为回归树训练的是回归模型,所以在此我们要观测模型效果不是通过混淆矩阵,我们通过R的平方结果查看效果:
y_pr = reg.predict(x) #预测训练结果
print(y_pr)
score = reg.score(x,y) #查看预测结果分数
print(score)
-------------------
[1. 1. 1. ... 0. 0. 0.]
0.99863358578953
这样,我们就构建了一个完整的回归树模型啦!!!
总结
本篇介绍了:
- 回归树的过程
- 回归树模型中的参数:比如通过交叉验证遍历最大深度max_depth,提高模型效果。
- 如何构建回归模型