0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

梯度提升方法(Gradient Boosting)算法案例

sekJ_AI_class_v ? 2019-09-23 08:52 ? 次閱讀

GradientBoost算法 python實現(xiàn),該系列文章主要是對《統(tǒng)計學(xué)習(xí)方法》的實現(xiàn)。

完整的筆記和代碼以上傳到Github,地址為(覺得有用的話,歡迎Fork,請給作者個Star):

https://github.com/Vambooo/lihang-dl

提升樹利用加法模型與前向分步算法實現(xiàn)學(xué)習(xí)的優(yōu)化過程,當損失函數(shù)為平方損失和指數(shù)損失函數(shù)時,每一步優(yōu)化都較為簡單。但對一般損失函數(shù)來說,每一步的優(yōu)化并不容易。Fredman為了解決這一問題,便提出了梯度提升(Gradient Boosting)方法。

梯度提升法利用最速下降的近似方法,這里的關(guān)鍵是利用損失函數(shù)的負梯度在當前模型的值r_{mi}作為回歸問題提升樹算法中的殘差的近似值,擬合一個回歸樹。

梯度提升方法(Gradient Boosting)算法

注:該步通過估計使損失函數(shù)極小化的常數(shù)值,得到一個根結(jié)點的樹。

梯度提升方法(Gradient Boosting)算法案例

Gradient Boost算法案例 python實現(xiàn)(馬疝病數(shù)據(jù))

(代碼可以左右滑動看)

import pandas as pdimport numpy as npimportmatplotlib.pyplotaspltfrom sklearn import ensemblefrom sklearn import linear_model

第一步:構(gòu)建數(shù)據(jù)

# 創(chuàng)建模擬數(shù)據(jù)xx = np.arange(0, 60)y=[ x / 2 + (x // 10) % 2 * 20 * x / 5 + np.random.random() * 10 for x in xx]
x = pd.DataFrame({'x': x})
# Plot mock dataplt.figure(figsize=(10, 5))plt.scatter(x, y)plt.show()

線性回歸模型來擬合數(shù)據(jù)

linear_regressor=linear_model.LinearRegression()linear_regressor.fit(x, y)
plt.figure(figsize=(10, 5))plt.title("Linear Regression")plt.scatter(x, y)plt.plot(x, linear_regressor.predict(x), color='r')plt.show()

線性回歸模型旨在將預(yù)測與實際產(chǎn)出之間的平方誤差最小化,從我們的殘差模式可以清楚地看出,殘差之和約為0:

梯度提升法使用一組串聯(lián)的決策樹來預(yù)測y

下面從只有一個估計量的梯度提升回歸模型和一個只有深度為1的樹開始:

params = {    'n_estimators': 1,    'max_depth': 1,    'learning_rate': 1,    'criterion': 'mse'}
gradient_boosting_regressor = ensemble.GradientBoostingRegressor(**params)
gradient_boosting_regressor.fit(x, y)
plt.figure(figsize=(10, 5))plt.title('Gradient Boosting model (1 estimators, Single tree split)')plt.scatter(x, y)plt.plot(x, gradient_boosting_regressor.predict(x), color='r')plt.show()

從上圖可以看到深度1決策樹在x<50??和x>50處被拆分,其中:

if x<50 ,y=56;

if x>=50,y=250.

這樣的拆分結(jié)果肯定是不好的,下面用一個估計量時,30-40之間的殘差很。猜想:如果使用兩個估計量,把第一棵樹的殘差輸入下一棵樹中,有怎樣的效果?驗證代碼如下:

params['n_estimators'] = 2
gradient_boosting_regressor = ensemble.GradientBoostingRegressor(**params)
gradient_boosting_regressor.fit(x, y)
plt.figure(figsize=(10, 5))plt.title('Gradient Boosting model (1 estimators, Single tree split)')plt.scatter(x, y)plt.plot(x, gradient_boosting_regressor.predict(x), color='r')plt.show()

如上圖,當有連個估計量時,第二棵樹是在30處拆分的,如果我們繼續(xù)增加估計量,我們得到Y(jié)分布的一個越來越接近的近似值:

f, ax = plt.subplots(2, 2, figsize=(15, 10))
for idx, n_estimators in enumerate([5, 10, 20, 50]):    params['n_estimators'] = n_estimators
    gradient_boosting_regressor = ensemble.GradientBoostingRegressor(**params)
    gradient_boosting_regressor.fit(x, y)    subplot = ax[idx // 2][idx % 2]    subplot.set_title('Gradient Boosting model ({} estimators, Single tree split)'.format(n_estimators))    subplot.scatter(x, y)    subplot.plot(x, gradient_boosting_regressor.predict(x), color='r')plt.show()

上面是改變估計量,保持樹深度的效果,下面保持估計量為10,改變樹的深度.

params['n_estimators'] = 10
f, ax = plt.subplots(2, 2, figsize=(15, 10))
for idx, max_depth in enumerate([1, 2, 3, 5]):    params['max_depth'] = max_depth
    gradient_boosting_regressor = ensemble.GradientBoostingRegressor(**params)
    gradient_boosting_regressor.fit(x, y)    subplot = ax[idx // 2][idx % 2]    subplot.set_title('Gradient Boosting model (10 estimators, {} max tree splits)'.format(max_depth))    subplot.scatter(x, y)    subplot.plot(x, gradient_boosting_regressor.predict(x), color='r')plt.show()

上兩圖可以看到如何通過增加估計量和最大深度來擬合y值。不過有點過擬合了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4588

    瀏覽量

    92506
  • python
    +關(guān)注

    關(guān)注

    55

    文章

    4768

    瀏覽量

    84376

原文標題:機器學(xué)習(xí)筆記系列(十三) | GradientBoost算法 python實現(xiàn)

文章出處:【微信號:AI_class_vip,微信公眾號:人工智能學(xué)研社】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    《MATLAB優(yōu)化算法案例分析與應(yīng)用》

    《MATLAB優(yōu)化算法案例分析與應(yīng)用》清華大學(xué)出版社《MATLAB優(yōu)化算法案例分析與應(yīng)用》這本書,給大家推薦一下這本書清華大學(xué)出版社《MATLAB優(yōu)化算法案例分析與應(yīng)用》這本書,給大家推薦一下這本書
    發(fā)表于 10-10 12:34

    機器學(xué)習(xí)新手必學(xué)的三種優(yōu)化算法(牛頓法、梯度下降法、最速下降法)

    角度來理解它們。本文介紹的核心算法包括:牛頓法(Newton’s Method)最速下降法(Steep Descent)梯度下降法(Gradient Descent)如果想對這些算法
    發(fā)表于 05-07 08:30

    集成學(xué)習(xí)和Boosting提升方法

    李航《統(tǒng)計學(xué)習(xí)方法》——第八章Boosting提升方法【補充集成學(xué)習(xí)】+習(xí)題答案
    發(fā)表于 06-05 09:49

    梯度更新算法的選擇

    深度學(xué)習(xí)入門(四)梯度更新算法的選擇(附執(zhí)行代碼)
    發(fā)表于 06-09 11:02

    基礎(chǔ)算法案

    基礎(chǔ)算法案例1.特殊回文數(shù)問題描述:左邊往右邊看,右邊往左邊看,都是同一個數(shù)叫做回文數(shù),比如19291就是一個回文數(shù),那么我們輸入一個兩位及以上的數(shù)字,返回回文數(shù),案例如下:def is_pal
    發(fā)表于 07-23 06:51

    一種改進的梯度投影算法

    的Barzilai-Borwein (B-B)梯度投影(Barzilai-Borwein Gradient Projection for Sparse Reconstruction,GPSR-BB)算法的基礎(chǔ)上,采用預(yù)測校正
    發(fā)表于 11-27 18:09 ?0次下載

    機器學(xué)習(xí):隨機梯度下降和批量梯度下降算法介紹

    隨機梯度下降(Stochastic gradient descent) 批量梯度下降(Batch gradient descent) 梯度
    發(fā)表于 11-28 04:00 ?8807次閱讀
    機器學(xué)習(xí):隨機<b class='flag-5'>梯度</b>下降和批量<b class='flag-5'>梯度</b>下降<b class='flag-5'>算法</b>介紹

    一文看懂常用的梯度下降算法

    編輯:祝鑫泉 一 概述 梯度下降算法Gradient Descent Optimization )是神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練最常用的優(yōu)化算法。對于深度學(xué)習(xí)模型,基本都是采用
    發(fā)表于 12-04 18:17 ?1777次閱讀

    改進深度學(xué)習(xí)算法的光伏出力預(yù)測方法

    為提高光伏出力的預(yù)測精度,提出了一種改進深度學(xué)習(xí)算法的光伏出力預(yù)測方法。首先,針對傳統(tǒng)的深度學(xué)習(xí)算法采用批量梯度下降(batch gradient
    發(fā)表于 12-17 10:42 ?8次下載
    改進深度學(xué)習(xí)<b class='flag-5'>算法</b>的光伏出力預(yù)測<b class='flag-5'>方法</b>

    GBDT算法原理以及實例理解

    GBDT 的全稱是 Gradient Boosting Decision Tree,梯度提升樹,在傳統(tǒng)機器學(xué)習(xí)算法中,GBDT算的上TOP3
    的頭像 發(fā)表于 04-28 16:47 ?2.8w次閱讀
    GBDT<b class='flag-5'>算法</b>原理以及實例理解

    將淺層神經(jīng)網(wǎng)絡(luò)作為“弱學(xué)習(xí)者”的梯度Boosting框架

    1. 簡介 本文提出了一種新的梯度Boosting框架,將淺層神經(jīng)網(wǎng)絡(luò)作為“弱學(xué)習(xí)者”。在此框架下,我們考慮一般的損失函數(shù),并給出了分類、回歸和排序的具體實例。針對經(jīng)典梯度boosting
    的頭像 發(fā)表于 05-03 18:21 ?2643次閱讀
    將淺層神經(jīng)網(wǎng)絡(luò)作為“弱學(xué)習(xí)者”的<b class='flag-5'>梯度</b><b class='flag-5'>Boosting</b>框架

    基于并行Boosting算法的雷達目標跟蹤檢測系統(tǒng)

    基于并行Boosting算法的雷達目標跟蹤檢測系統(tǒng)
    發(fā)表于 06-30 14:25 ?31次下載

    基于 Boosting 框架的主流集成算法介紹(上)

    本文是決策樹的第三篇,主要介紹基于 Boosting 框架的主流集成算法,包括 XGBoost 和 LightGBM。 XGBoost
    的頭像 發(fā)表于 02-17 15:57 ?969次閱讀
    基于 <b class='flag-5'>Boosting</b> 框架的主流集成<b class='flag-5'>算法</b>介紹(上)

    基于 Boosting 框架的主流集成算法介紹(中)

    本文是決策樹的第三篇,主要介紹基于 Boosting 框架的主流集成算法,包括 XGBoost 和 LightGBM。 XGBoost
    的頭像 發(fā)表于 02-17 15:58 ?651次閱讀
    基于 <b class='flag-5'>Boosting</b> 框架的主流集成<b class='flag-5'>算法</b>介紹(中)

    基于 Boosting 框架的主流集成算法介紹(下)

    本文是決策樹的第三篇,主要介紹基于 Boosting 框架的主流集成算法,包括 XGBoost 和 LightGBM。 XGBoost
    的頭像 發(fā)表于 02-17 15:58 ?2710次閱讀
    基于 <b class='flag-5'>Boosting</b> 框架的主流集成<b class='flag-5'>算法</b>介紹(下)