没有合适的资源?快使用搜索试试~ 我知道了~
回归树的原理与Python实现
3 下载量 154 浏览量
2021-01-27
15:01:53
上传
评论
收藏 174KB PDF 举报
温馨提示
试读
2页
来源于知乎,本文就回归树的基本原理进行讲解,并手把手、肩并肩地带您实现这一算法。我们用人话而不是大段的数学公式来讲讲回归树是怎么一回事。如果预测某个连续变量的大小,最简单的模型之一就是用平均值。比如同事的平均年龄是28岁,那么新来了一批同事,在不知道这些同事的任何信息的情况下,直觉上用平均值28来预测是比较准确的,至少比0岁或者100岁要靠谱一些。我们不妨证明一下我们的直觉:1.定义损失函数L,其中y_hat是对y预测值,使用MSE来评估损失:2.对y_hat求导:3.令导数等于0,最小化MSE,则:4.所以,5.结论,如果要用一个常量来预测y,用y的均值是一个最佳的选择。仍然
资源详情
资源评论
资源推荐
回归树的原理与回归树的原理与Python实现实现
1. 原理篇
我们用人话而不是大段的数学公式来讲讲回归树是怎么一回事。
1.1 最简单的模型
如果预测某个连续变量的大小,最简单的模型之一就是用平均值。比如同事的平均年龄是28岁,那么新来了一批同事,在不知道这些同事的任何
信息的情况下,直觉上用平均值28来预测是比较准确的,至少比0岁或者100岁要靠谱一些。我们不妨证明一下我们的直觉:
1.定义损失函数L,其中y_hat是对y预测值,使用MSE来评估损失:
2.对y_hat求导:
3.令导数等于0,最小化MSE,则:
4.所以,
5.结论,如果要用一个常量来预测y,用y的均值是一个最佳的选择。
1.2 加一点难度
仍然是预测同事年龄,这次我们预先知道了同事的职级,假设职级的范围是整数1-10,如何能让这个信息帮助我们更加准确的预测年龄呢?
一个思路是根据职级把同事分为两组,这两组分别应用我们之前提到的“平均值”模型。比如职级小于5的同事分到A组,大于或等于5的分到B
组,A组的平均年龄是25岁,B组的平均年龄是35岁。如果新来了一个同事,职级是3,应该被分到A组,我们就预测他的年龄是25岁。
1.3 最佳分割点
还有一个问题待解决,如何取一个最佳的分割点对不同职级的同事进行分组呢? 我们尝试所有m个可能的分割点P_i,沿用之前的损失函数,对
A、B两组分别计算Loss并相加得到L_i。最小的L_i所对应的P_i就是我们要找的“最佳分割点”。
1.4 运用多个变量
再复杂一些,如果我们不仅仅知道了同事的职级,还知道了同事的工资(貌似不科学),该如何预测同事的年龄呢?
我们可以分别根据职级、工资计算出职级和工资的最佳分割点P_1, P_2,对应的Loss L_1, L_2。然后比较L_1和L2,取较小者。假设L_1 <
L_2,那么按照P_1把不同职级的同事分为A、B两组。在A、B组内分别计算工资所对应的分割点,再分为C、D两组。这样我们就得到了AC, AD,
BC, BD四组同事以及对应的平均年龄用于预测。
1.5 答案揭晓
如何实现这种1 to 2, 2 to 4, 4 to 8的算法呢?
熟悉数据结构的同学自然会想到二叉树,这种树被称为回归树,顾名思义利用树形结构求解回归问题。
2. 实现篇
本人用全宇宙最简单的编程语言——Python实现了回归树算法,没有依赖任何第三方库,便于学习和使用。简单说明一下实现过程,更详细的注
释请参考本人github上的代码。
2.1 创建Node类
初始化,存储预测值、左右结点、特征和分割点
2.2 创建回归树类
初始化,存储根节点和树的高度。
2.3 计算分割点、MSE
根据自变量X、因变量y、X元素中被取出的行号idx,列号feature以及分割点split,计算分割后的MSE。注意这里为了减少计算量,用到了方差公
式:
2.4 计算最佳分割点
遍历特征某一列的所有的不重复的点,找出MSE最小的点作为最佳分割点。如果特征中没有不重复的元素则返回None。
2.5 选择最佳特征
遍历所有特征,计算最佳分割点对应的MSE,找出MSE最小的特征、对应的分割点,左右子节点对应的均值和行号。如果所有的特征都没有不重
复元素则返回None
weixin_38629939
- 粉丝: 11
- 资源: 926
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0