日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

GBDT(回归树)原理详解与python代码实现

發(fā)布時間:2024/1/23 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GBDT(回归树)原理详解与python代码实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

GBDT算法

  • 1、算法原理
  • 2、對數(shù)據(jù)的要求
  • 3、算法的優(yōu)缺點
  • 4、算法需要注意的點
  • 5、python代碼實現(xiàn)(待更......)
    • 導(dǎo)入相關(guān)包
    • 讀取數(shù)據(jù)并預(yù)處理
    • 訓(xùn)練及評估

1、算法原理

步驟:

1、初始f0(x)f_0(x)f0?(x):

編號真實值f0(x)f_0(x)f0?(x)殘差
01.11.475-0.375
11.31.475-0.175
21.71.475-0.225
31.81.475-0.325

2、以殘差作為樣本真實值訓(xùn)練f1(x)f_1(x)f1?(x):

編號年齡體重標(biāo)簽值
0520-0.375
1730-0.175
22170-0.225
33060-0.325
劃分點小于劃分點樣本大于劃分點樣本SElSE_lSEl?SErSE_rSEr?SEsumSE_{sum}SEsum?
年齡5///0、1、2、300.3270.327
體重700、1、320.26000.260
  • 選出SEsumSE_{sum}SEsum?最小的分裂,以此類推,達到第一棵樹終止條件
  • 建成第一棵樹,重新使用樣本建第二棵樹(使用第一棵樹的殘差),建立的樹滿足終止條件
  • 預(yù)測f(x)=f0(x)+f1(x)+....+fn(x)?learning_ratef(x)=f_0(x)+f_1(x)+....+f_n(x)*learning\_ratef(x)=f0?(x)+f1?(x)+....+fn?(x)?learning_rate

2、對數(shù)據(jù)的要求

與cart類似 https://blog.csdn.net/weixin_41851055/article/details/106234426

3、算法的優(yōu)缺點

一、優(yōu)點:

  • 預(yù)測精度高
  • 適合低維數(shù)據(jù)
  • 能處理非線性數(shù)據(jù)與各種類型數(shù)據(jù)(離散(one_hot) or 連續(xù))

二、缺點:

  • 由于弱學(xué)習(xí)器之間存在依賴關(guān)系,難以并行訓(xùn)練數(shù)據(jù)
  • 數(shù)據(jù)維度較高會加大算法的計算復(fù)雜度

4、算法需要注意的點

GBDT分裂規(guī)則
選取使得誤差下降最多的(均方差則選SEsumSE_{sum}SEsum?最小的)。終止條件:節(jié)點分裂最小樣本數(shù)、樹最大深度、最大葉子節(jié)點數(shù)、min(loss)

GBDT如何正則化
1、Shrinkage(步長)+最大迭代次數(shù)
2、Subsample(子采樣):采用不放回采樣(值為1則全部使用)
3、正則化剪枝

GBDT梯度提升體現(xiàn)在哪
每一棵樹基于上一棵樹的loss進行梯度下降

GBDT如何做特征選擇(重要性)
每棵樹的加權(quán)平均

GBDT為什么用回歸樹而不用分類樹
GBDT主要以殘差逼近的方式,這一點和回歸樹輸出連續(xù)值不謀而合,如果為分類男+男+女=到底是男還是女

GBDT為什么較RF淺
1、GBDT主要降低bias(模型的泛化能力),串行保證了降低bias。即GBDT中基分類器需要低方差(variance)。即簡單的樹
2、RF主要降低variance(模型的穩(wěn)定性),因此RF中的基分類器需要低偏差的bias。即樹的深度較深

GBDT哪些部分可以并行
1、計算每個樣本的負梯度
2、分裂挑選最佳特征及節(jié)點分割時,對特征計算相應(yīng)誤差及均值時
3、更細每個樣本負梯度
4、最后預(yù)測將之前所有樹的結(jié)果相加

GBDT與RF的區(qū)別
1、RF的樹可回歸可分類,GBDT只能回歸樹
2、RF樹獨立,互不影響可并行;GBDT樹依賴,串行
3、RF由多棵樹表決,GBDT由多棵樹累加;RF對異常值不敏感,GBDT則很敏感(當(dāng)前錯誤影響下一棵樹)
5、RF不需要數(shù)據(jù)預(yù)處理,GBDT需要進行特征歸一化

GBDT如何用于分類
https://zhuanlan.zhihu.com/p/46445201

5、python代碼實現(xiàn)(待更…)

導(dǎo)入相關(guān)包

import pandas as pd import numpy as np from sklearn.ensemble import GradientBoostingClassifier from sklearn.metrics import roc_curve,auc from sklearn import metrics from sklearn.model_selection import GridSearchCV from sklearn.preprocessing import LabelEncoder

讀取數(shù)據(jù)并預(yù)處理

#讀取數(shù)據(jù) data = pd.read_excel(r'E:/wyz/Desktop/data/data.xlsx') #將數(shù)據(jù)集中的字符串轉(zhuǎn)化為代表類別的數(shù)字。因為sklearn的決策樹只識別數(shù)字 le = LabelEncoder() for col in data_model.columns: data_model[col] = le.fit_transform(data_model[col].astype(str)) #劃分數(shù)據(jù)集(3、7劃分) y = data_model['target'] x = data_model.drop('target', axis=1) x_train, x_test, y_train, y_test = train_test_split(x, y,random_state=0,train_size=0.7) #標(biāo)準(zhǔn)化數(shù)據(jù) ss_x = StandardScaler() ss_y = StandardScaler() x_train = ss_x.fit_transform(x_train) x_test = ss_x.transform(x_test)

訓(xùn)練及評估

model_GBDT = GradientBoostingClassifier(random_state=10) model_GBDT.fit(x_train,y_train) y_pred = gbm0.predict(x_train) y_predprob = model_GBDT.predict_proba(x_train)[:,1] print ("Accuracy : %.4g" % metrics.accuracy_score(y.values, y_pred)) print ("AUC Score (Train): %f" % metrics.roc_auc_score(y, y_predprob)) 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的GBDT(回归树)原理详解与python代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。