您的位置 > 南安普敦贴吧 > CDA專訪 > 具有貝葉斯優化的XGBoost和隨機森林

南安普敦大学全英排名:具有貝葉斯優化的XGBoost和隨機森林

南安普敦贴吧 www.uaxaaq.com.cn 來源:CDA原創 | 2019-09-28 | 發布:經管之家





作者 | Edwin Lisowski

編譯 | CDA數據分析師

XGBoost and Random Forest with Bayesian Optimisation


在這篇文章中,我們將介紹帶有貝葉斯優化算法的兩種流行的算法即XGBoost和隨機森林,并指出這些算法的優缺點。XGBoost(XGB)和隨機森林(RF)都是集成學習方法,并通過組合各個決策樹的輸出(我們假設基于樹的XGB或RF)來預測(分類或回歸)。

讓我們深入比較一下 - XGBoost與Random Forest

XGBoost或Gradient Boosting

XGBoost每次構建一個決策樹,每一個新的樹都修正以前訓練過的決策樹所產生的錯誤。

XGBoost應用程序的示例

在Addepto,我們使用XGBoost模型來解決異常檢測問題,例如在監督學習方法中。在這種情況下,XGB非常有用,因為數據集通常非常不平衡。此類數據集的示例是移動應用中的用戶/消費者交易,能量消耗或用戶行為。

優點

由于通過優化目標函數導出了增強樹,基本上XGB可以用來解決幾乎所有可以寫出漸變的目標函數。這包括排名和泊松回歸等內容,RF難以實現。

缺點

如果數據有噪聲,XGB模型對過度擬合更敏感。由于樹木是按順序建造的,因此培訓通常需要更長時間。GBM比RF更難調整。通常有三個參數:樹的數量,樹的深度和學習率,并且構建的每個樹通常是淺的。

隨機森林

隨機森林(RF)使用隨機數據樣本獨立訓練每棵樹。這種隨機性有助于使模型比單個決策樹更健壯。由于RF不太可能過度擬合訓練數據。

隨機森林應用示例

隨機森林差異性已被用于各種應用,例如,基于組織標記數據找到患者群。在以下兩種情況下,隨機森林模型對于這種應用非常有吸引力:

我們的目標是為具有強相關特征的高維問題提供高預測精度。

我們的數據集非常嘈雜,并且包含許多缺失值,例如,某些屬性是分類或半連續的。



優點

隨機森林中的模型調整比XGBoost更容易。在RF中,我們有兩個主要參數:每個節點要選擇的特征數量和決策樹的數量。RF比XGB更難裝配。

缺點

隨機森林算法的主要限制是大量的樹可以使算法對實時預測變慢。對于包含具有不同級別數的分類變量的數據,隨機森林偏向于具有更多級別的那些屬性。

貝葉斯優化是一種優化功能的技術,其評估成本很高。它建立目標函數的后驗分布,并使用高斯過程回歸計算該分布中的不確定性,然后使用獲取函數來決定采樣的位置。貝葉斯優化專注于解決問題:

max f(x)(x∈A)

超參數的尺寸(x∈Rd)經常在最成功的應用d <20。

通常設置甲IA超矩形(x∈R d:ai ≤ xi ≤ bi)。目標函數是連續的,這是使用高斯過程回歸建模所需的。它也缺乏像凹面或線性這樣的特殊結構,這使得利用這種結構來提高效率的技術徒勞無功。貝葉斯優化由兩個主要組成部分組成:用于對目標函數建模的貝葉斯統計模型和用于決定下一步采樣的采集函數。

據初始空間填充實驗設計評估目標后,它們被迭代地用于分配N個評估的預算的剩余部分,如下所示:

觀察初始點當n≤N時執行,使用所有可用的數據更新后驗概率分布設Xn是采集功能的最大化觀察yn= f(xn)返回一個解決方案:用最大的評估點

我們可以說貝葉斯優化是為黑盒無導數全局優化而設計來總結這個問題。它在機器學習中調整超參數非常受歡迎。

下面是整個優化的圖形摘要:具有后驗分布的高斯過程、觀察和置信區間以及效用函數,其中最大值表示下一個樣本點。



由于效用函數,貝葉斯優化在調整機器學習算法的參數方面比網格或隨機搜索技術更有效。它可以有效地平衡“探索”和“利用”,找到全局最優。

為了呈現貝葉斯優化,我們使用用Python編寫的BayesianOptimization庫來調整隨機森林和XGBoost分類算法的超參數。我們需要通過pip安裝它:

pip install bayesian-optimization

現在讓我們訓練我們的模型。首先我們導入所需的庫:

#Import libraries

import pandas as pd

import numpy as np

from bayes_opt import BayesianOptimization

from sklearn.ensemble import RandomForestClassifier

from sklearn.model_selection import cross_val_score

我們定義了一個函數來運行貝葉斯優化給定數據,優化函數及其超參數:

#Bayesian optimization

def bayesian_optimization(dataset, function, parameters):

X_train, y_train, X_test, y_test = dataset

n_iterations = 5

gp_params = {"alpha": 1e-4}

BO = BayesianOptimization(function, parameters)

BO.maximize(n_iter=n_iterations, **gp_params)

return BO.max

我們定義了優化函數,即隨機森林分類器及其超參數nestimators,maxdepth和minsamplessplit。另外,我們使用給定數據集上的交叉驗證分數的平均值:

def rfc_optimization(cv_splits):

def function(n_estimators, max_depth, min_samples_split):

return cross_val_score(

RandomForestClassifier(

n_estimators=int(max(n_estimators,0)),

max_depth=int(max(max_depth,1)),

min_samples_split=int(max(min_samples_split,2)),

n_jobs=-1,

random_state=42,

class_weight="balanced"),

X=X_train,

y=y_train,

cv=cv_splits,

scoring="roc_auc",

n_jobs=-1).mean()

parameters = {"n_estimators": (10, 1000),

"max_depth": (1, 150),

"min_samples_split": (2, 10)}

return function, parameters

類似地,我們為XGBoost分類器定義函數和超參數:

def xgb_optimization(cv_splits, eval_set):

def function(eta, gamma, max_depth):

return cross_val_score(

xgb.XGBClassifier(

objective="binary:logistic",

learning_rate=max(eta, 0),

gamma=max(gamma, 0),

max_depth=int(max_depth),

seed=42,

nthread=-1,

scale_pos_weight = len(y_train[y_train == 0])/

len(y_train[y_train == 1])),

X=X_train,

y=y_train,

cv=cv_splits,

scoring="roc_auc",

fit_params={

"early_stopping_rounds": 10,

"eval_metric": "auc",

"eval_set": eval_set},

n_jobs=-1).mean()

parameters = {"eta": (0.001, 0.4),

"gamma": (0, 20),

"max_depth": (1, 2000)}

return function, parameters

現在基于選擇的分類器,我們可以優化它并訓練模型:

#Train model

def train(X_train, y_train, X_test, y_test, function, parameters):

dataset = (X_train, y_train, X_test, y_test)

cv_splits = 4

best_solution = bayesian_optimization(dataset, function, parameters)

params = best_solution["params"]

model = RandomForestClassifier(

n_estimators=int(max(params["n_estimators"], 0)),

max_depth=int(max(params["max_depth"], 1)),

min_samples_split=int(max(params["min_samples_split"], 2)),

n_jobs=-1,

random_state=42,

class_weight="balanced")

model.fit(X_train, y_train)

return model

我們使用AdventureWorksDW2017 SQL Server數據庫的視圖[dbo].[vTargetMail]作為示例數據,我們可以依據個人數據預測人們是否購買自行車。作為貝葉斯優化的結果,我們提取出了連續樣本:



我們可以看到貝葉斯優化在第23步中找到了最佳參數,在測試數據集上得出0.8622 AUC分數。如果要檢查更多樣品,這個結果可能會更高。我們優化的隨機森林模型具有以下ROC AUC曲線:



我們提出了一種使用貝葉斯優化在機器學習中調整超參數的簡單方法,貝葉斯優化是一種更快的方法,可以找到最優值,而且比網格或隨機搜索方法更先進。

完 謝謝觀看

本文已經過優化顯示,查看原文請點擊以下鏈接:
查看原文:https://www.cda.cn/view/27175.html
京ICP備11001960號  京ICP證090565號 京公網安備1101084107號 論壇法律顧問:王進律師知識產權?;ど?/a>免責及隱私聲明   主辦單位:南安普敦贴吧 版權所有
聯系QQ:2881989700  郵箱:[email protected]
合作咨詢電話:(010)62719935 廣告合作電話:13661292478(劉老師)

投訴電話:(010)68466864 不良信息處理電話:(010)68466864