机器学习算法之梯度提升决策树(GBDT)回归

算法原理

问题引入

接着上篇博客聊到的回归树,我们说到要预测一个班级的同学的成绩,用平均数数不妨为一个还不错的值。我们假设这个班级除了他自己,还有3位同学(请忽略为什么这个班级人这么少。。。)的成绩为50,60,70。那么其他学生的平均成绩就为60,然后我们用60来预测学生的成绩。也就是[60,60,60]。每个同学的成绩的残差就是成绩减去预测值=[5,6,7]-[6,6,6]=[-10,0,10]。

进一步

为了让模型更加准确,一个思路是让模型的残差变小。如何减少残差呢?我们不妨对残差建立一颗回归树,然后预测出准确的残差。假设这棵树预测的残差是[-9, 0, 9],将上一轮的预测值和这一轮的预测值求和,没个同学的成绩为[60,60,60]+[-9,0,9]=[51,60,69],显然更加靠近[50,60,70],成绩的残差现在变成[-1,0,1],模型的准确性得到了提升。我们将上面得到的过程整理如下:
第1轮预测:60, 60, 60
第1轮残差:[-9, 0, 9]
第2轮预测:[60, 60, 60[ + [-9, 0, 9] = [51, 60, 69]
第2轮残差:[-1, 0, 1]
第3轮预测:[60, 60, 60] + [-9, 0, 9] + [-0.8, 0, 0.7] = [50.2, 6, 6.97]
第3轮残差:[-0.8, 0, 0.3]
而这个过程中让残差越来越小的模型即为GBDT。

算法完整过程

在这里插入图片描述

#coding=utf-8
from copy import copy
from random import randint, seed, random
from time import time
from regression import RegressionTree
from random import choice

# 统计程序运行时间函数
# fn代表运行的函数
def run_time(fn):
    def fun():
        start = time()
        fn()
        ret = time() - start
        if ret < 1e-6:
            unit = "ns"
            ret *= 1e9
        elif ret < 1e-3:
            unit = "us"
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值