机器学习GBDT, XGBoost, LightGBM对比

本文对比了三种梯度提升算法:GBDT、XGBoost和LightGBM。GBDT通过学习残差来构建决策树;XGBoost在剪枝和正则项上更优,支持多种损失函数;LightGBM在速度、内存使用和准确性上具有优势,采用leaf-wise生长策略,并支持直接使用category特征。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 梯度提升决策树GBDT

GBDT(Gradient Boosting Decision Tree)的核心在于: 每一棵树学的是之前所有树结论和的残差(负梯度),这个残差就是一个加预测值后能得真实值的累加量。

在分类问题中,GBDT的损失函数跟逻辑回归一样,采用的对数似然函数。

在回归问题中,GBDT采用最小化误差平方(ls)。在每一个叶子节点都会得到一个预测值,该预测值等于属于这个节点的所有label的均值。分枝时穷举每一个feature的每个阈值找最好的分割点,衡量的标准就是用最小化误差平方。

import gzip
import pickle as pkl
from sklearn.model_selection import train_test_split

def load_data(path):
    f = gzip.open(path, 'rb')
    try:
        train_set, valid_set, test_set = pkl.load(f, encoding='latin1') #python3
    except:
        train_set, valid_set, test_set = pkl.load(f) #python2
    f.close()
    return train_set,valid_set,test_set
path = 'mnist.pkl.gz'
train_set,valid_set,test_set = load_data(path)

Xtrain,_,ytrain,_ = train_test_split(train_set[0], train_set[1], test_size=0.9)
Xtest,_,ytest,_ = train_test_split(test_set[0], test_set[1], test_size=0.9)
print(Xtrain.shape, ytrain.shape, Xtest.shape, ytest.shape)

(5000, 784) (5000,) (1000, 784) (1000,)

from sklearn.ensemble import GradientBoostingClassifier
import numpy as np
import time
from sklearn.metrics import mean_squared_error

gbc = GradientBoosetingClassifier(n_estimators=10, learning_rate=0.1, max_depth=3)
start_time = time.time()
gbc.fit(Xtrain, ytrain)
end_time = time.time()
print('The training time = {}'.format(end_time - start_time))

gbc_pred = gbc.predict(Xtest)
gb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值