成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

梯度提升算法決策過程的逐步可視化

人工智能 機器學(xué)習(xí)
梯度提升算法是最常用的集成機器學(xué)習(xí)技術(shù)之一,該模型使用弱決策樹序列來構(gòu)建強學(xué)習(xí)器。這也是XGBoost和LightGBM模型的理論基礎(chǔ),所以在這篇文章中,我們將從頭開始構(gòu)建一個梯度增強模型并將其可視化。

梯度提升算法是最常用的集成機器學(xué)習(xí)技術(shù)之一,該模型使用弱決策樹序列來構(gòu)建強學(xué)習(xí)器。這也是XGBoost和LightGBM模型的理論基礎(chǔ),所以在這篇文章中,我們將從頭開始構(gòu)建一個梯度增強模型并將其可視化。

梯度提升算法介紹

梯度提升算法(Gradient Boosting)是一種集成學(xué)習(xí)算法,它通過構(gòu)建多個弱分類器,然后將它們組合成一個強分類器來提高模型的預(yù)測準確率。

梯度提升算法的原理可以分為以下幾個步驟:

  1. 初始化模型:一般來說,我們可以使用一個簡單的模型(比如說決策樹)作為初始的分類器。
  2. 計算損失函數(shù)的負梯度:計算出每個樣本點在當前模型下的損失函數(shù)的負梯度。這相當于是讓新的分類器去擬合當前模型下的誤差。
  3. 訓(xùn)練新的分類器:用這些負梯度作為目標變量,訓(xùn)練一個新的弱分類器。這個弱分類器可以是任意的分類器,比如說決策樹、線性模型等。
  4. 更新模型:將新的分類器加入到原來的模型中,可以用加權(quán)平均或者其他方法將它們組合起來。
  5. 重復(fù)迭代:重復(fù)上述步驟,直到達到預(yù)設(shè)的迭代次數(shù)或者達到預(yù)設(shè)的準確率。

由于梯度提升算法是一種串行算法,所以它的訓(xùn)練速度可能會比較慢,我們以一個實際的例子來介紹:

假設(shè)我們有一個特征集Xi和值Yi,要計算y的最佳估計

圖片

我們從y的平均值開始

圖片

每一步我們都想讓F_m(x)更接近y|x。

圖片

在每一步中,我們都想要F_m(x)一個更好的y給定x的近似。

首先,我們定義一個損失函數(shù)

然后,我們向損失函數(shù)相對于學(xué)習(xí)者Fm下降最快的方向前進:

因為我們不能為每個x計算y,所以不知道這個梯度的確切值,但是對于訓(xùn)練數(shù)據(jù)中的每一個x_i,梯度完全等于步驟m的殘差:r_i!

所以我們可以用弱回歸樹h_m來近似梯度函數(shù)g_m,對殘差進行訓(xùn)練:

然后,我們更新學(xué)習(xí)器

這就是梯度提升,我們不是使用損失函數(shù)相對于當前學(xué)習(xí)器的真實梯度g_m來更新當前學(xué)習(xí)器F_{m},而是使用弱回歸樹h_m來更新它。

圖片

也就是重復(fù)下面的步驟

1、計算殘差:

圖片

2、將回歸樹h_m擬合到訓(xùn)練樣本及其殘差(x_i, r_i)上

3、用步長\alpha更新模型

圖片

看著很復(fù)雜對吧,下面我們可視化一下這個過程就會變得非常清晰了

決策過程可視化

這里我們使用sklearn的moons 數(shù)據(jù)集,因為這是一個經(jīng)典的非線性分類數(shù)據(jù)

import numpy as np
import sklearn.datasets as ds
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl

from sklearn import tree
from itertools import product,islice
import seaborn as snsmoonDS = ds.make_moons(200, noise = 0.15, random_state=16)
moon = moonDS[0]
color = -1*(moonDS[1]*2-1)

df =pd.DataFrame(moon, columns = ['x','y'])
df['z'] = color
df['f0'] =df.y.mean()
df['r0'] = df['z'] - df['f0']
df.head(10)

讓我們可視化數(shù)據(jù):

下圖可以看到,該數(shù)據(jù)集是可以明顯的區(qū)分出分類的邊界的,但是因為他是非線性的,所以使用線性算法進行分類時會遇到很大的困難。

那么我們先編寫一個簡單的梯度增強模型:

def makeiteration(i:int):
"""Takes the dataframe ith f_i and r_i and approximated r_i from the features, then computes f_i+1 and r_i+1"""
clf = tree.DecisionTreeRegressor(max_depth=1)
clf.fit(X=df[['x','y']].values, y = df[f'r{i-1}'])
df[f'r{i-1}hat'] = clf.predict(df[['x','y']].values)

eta = 0.9
df[f'f{i}'] = df[f'f{i-1}'] + eta*df[f'r{i-1}hat']
df[f'r{i}'] = df['z'] - df[f'f{i}']
rmse = (df[f'r{i}']**2).sum()
clfs.append(clf)
rmses.append(rmse)

上面代碼執(zhí)行3個簡單步驟:

將決策樹與殘差進行擬合:

clf.fit(X=df[['x','y']].values, y = df[f'r{i-1}'])
df[f'r{i-1}hat'] = clf.predict(df[['x','y']].values)

然后,我們將這個近似的梯度與之前的學(xué)習(xí)器相加:

df[f'f{i}'] = df[f'f{i-1}'] + eta*df[f'r{i-1}hat']

最后重新計算殘差:

df[f'r{i}'] = df['z'] - df[f'f{i}']

步驟就是這樣簡單,下面我們來一步一步執(zhí)行這個過程。

第1次決策

圖片

Tree Split for 0 and level 1.563690960407257

圖片

第2次決策

Tree Split for 1 and level 0.5143677890300751

第3次決策

Tree Split for 0 and level -0.6523728966712952

圖片

第4次決策

圖片

Tree Split for 0 and level 0.3370491564273834

圖片

第5次決策

圖片

Tree Split for 0 and level 0.3370491564273834

圖片

第6次決策

圖片

Tree Split for 1 and level 0.022058885544538498

圖片

第7次決策

圖片

Tree Split for 0 and level -0.3030575215816498

圖片

第8次決策

圖片

Tree Split for 0 and level 0.6119407713413239

圖片

第9次決策

圖片

可以看到通過9次的計算,基本上已經(jīng)把上面的分類進行了區(qū)分

圖片

我們這里的學(xué)習(xí)器都是非常簡單的決策樹,只沿著一個特征分裂!但整體模型在每次決策后邊的越來越復(fù)雜,并且整體誤差逐漸減小。

plt.plot(rmses)

圖片

這也就是上圖中我們看到的能夠正確區(qū)分出了大部分的分類

如果你感興趣可以使用下面代碼自行實驗:

??https://github.com/trenaudie/GradientBoostingVisualized/blob/main/fromScratch.ipynb??


責(zé)任編輯:華軒 來源: DeepHub IMBA
相關(guān)推薦

2017-09-11 13:33:44

大數(shù)據(jù)數(shù)據(jù)可視化決策樹

2016-09-30 16:12:47

GBDT算法決策樹

2020-03-11 14:39:26

數(shù)據(jù)可視化地圖可視化地理信息

2020-11-02 13:54:41

Python可視化決策樹

2018-07-13 15:53:26

大數(shù)據(jù)

2017-09-15 10:23:06

可視化Bug數(shù)據(jù)分析

2017-10-14 13:54:26

數(shù)據(jù)可視化數(shù)據(jù)信息可視化

2009-04-21 14:26:41

可視化監(jiān)控IT管理摩卡

2022-08-26 09:15:58

Python可視化plotly

2018-07-05 11:47:49

施耐德

2017-11-21 13:00:20

機器學(xué)習(xí)決策樹可視化

2022-09-08 11:19:53

Vue可視化插件

2018-10-17 12:03:45

可視化設(shè)計圖表

2011-10-21 09:50:03

NHibernate

2015-08-20 10:06:36

可視化

2024-08-20 14:31:16

2010-06-09 15:09:57

IP網(wǎng)絡(luò)

2017-02-23 09:42:53

大數(shù)據(jù)數(shù)據(jù)可視化技術(shù)誤區(qū)

2022-03-01 10:29:44

Kubernetes容器

2022-07-08 15:00:04

農(nóng)業(yè)噴灌項目鴻蒙
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 九色视频网站 | www.99re| 天天干夜夜拍 | 狠狠操狠狠色 | 在线观看日韩av | 欧美日韩国产中文字幕 | 色免费看 | 国产精品视频久久久久 | 亚洲九九 | 免费同性女女aaa免费网站 | 天天av网| www.日本国产| 一区免费| 欧美精品一区二区免费视频 | 成人精品一区二区三区 | 91视频在线看 | 国产欧美日韩在线一区 | 久久久亚洲综合 | 国产精品视频网 | 中文字幕日韩一区 | 国产精品一二三区在线观看 | 午夜影院在线 | 国产精品久久久久久久久久尿 | 懂色一区二区三区免费观看 | 亚洲入口 | 成人一级黄色毛片 | 日韩成人中文字幕 | 中文字字幕一区二区三区四区五区 | 91高清在线观看 | 久久综合香蕉 | 日韩欧美国产一区二区三区 | a欧美 | 日本福利视频免费观看 | 国产精品三级久久久久久电影 | 免费成人在线网站 | 久久99久久 | 国产一级毛片精品完整视频版 | 中文字幕精品一区二区三区精品 | 午夜在线视频一区二区三区 | 91在线精品秘密一区二区 | 欧洲精品在线观看 |