具有貝葉斯優化的XGBoost和隨機森林

2020-12-03 CDA數據分析師

作者 | 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 librariesimport pandas as pdimport numpy as npfrom bayes_opt import BayesianOptimizationfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import cross_val_score

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

#Bayesian optimizationdef bayesian_optimization(dataset, function, parameters):X_train, y_train, X_test, y_test = datasetn_iterations = 5gp_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 modeldef train(X_train, y_train, X_test, y_test, function, parameters):dataset = (X_train, y_train, X_test, y_test)cv_splits = 4best_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曲線:

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

相關焦點

  • 資料| 陳天奇介紹Xgboost原理的PPT
    https://xgboost.apachecn.org/  所有者:https://xgboost.apachecn.org/ 】內容簡介陳天奇介紹Xgboost原理的PPT,用於學習XGBoost是一個優化的分布式梯度增強庫,旨在實現高效,靈活和便攜。它在 Gradient Boosting 框架下實現機器學習算法。XGBoost提供並行樹提升(也稱為GBDT,GBM),可以快速準確地解決許多數據科學問題。相同的代碼在主要的分布式環境(Hadoop,SGE,MPI)上運行,並且可以解決數十億個示例之外的問題。
  • ...詳解線性回歸、樸素貝葉斯、隨機森林在R和Python中的實現應用...
    樸素貝葉斯(Naive Bayes)6. K最近鄰(kNN)7. K均值算法(K-Means)8. 隨機森林(Random Forest)9. 降維算法(Dimensionality Reduction Algorithms)10.
  • 大戰三回合:XGBoost、LightGBM和Catboost一決高低
    為了 PK 這三種算法之間的高低,我們給它們安排了一場「最浪漫的 Battle」,通過三輪 Battle 讓 XGBoost、Catboost 和 LightGBM 一絕高下!SHAP 值是在這些特徵之間的公平的信用分配,並且具有博弈論一致性的理論保證,這使得它們通常比整個數據集中的那些典型特徵的重要性更值得信賴。
  • 詳解線性回歸、樸素貝葉斯、隨機森林在R和Python中的...
    樸素貝葉斯(Naive Bayes)6. K最近鄰(kNN)7. K均值算法(K-Means)8. 隨機森林(Random Forest)9.隨機森林(Random Forest)隨機森林是決策樹的總體專有名詞。在隨機森林算法中,我們有一系列決策樹(因此,被稱為「森林」)。為了根據屬性將新對象進行分類,每一棵決策樹都給出一個分類,稱之為該決策樹為該分類「投票」。森林選擇(在所有樹中)獲得票數最多的分類。
  • XGboost算法在不同作業系統中安裝方法乾貨分享
    安裝Xgboost方法最近小編想安裝一下xgboost軟體包,用pip install xgboost 安裝有問題,今天將對主流作業系統下的安裝方法進行了匯總,用到的時候拿來即用,省事省力,內容包括三大主流作業系統的,其他系統的沒有環境,暫時不列舉。
  • 中信建投證券:xgboost中證500指數增強7月持倉組合發布
    xgboost模型是一種強學習模型,其是由眾多弱學習模型集成,其採用弱學習模型為CART,即分類與回歸樹。該模型重在擬合特徵和標籤間的非線性關係。組成該模型的眾多弱學習器之間的關係是補充彌補的關係,弱學習器的訓練有先後,每個新的弱學習器的學習目標都是之前已訓練好的弱學習器的殘差。
  • 從結構到性能,一文概述XGBoost、Light GBM和CatBoost的同與不同
    GOSS 保留所有的大梯度樣例,並在小梯度樣例上採取隨機抽樣。比如,假如有 50 萬行數據,其中 1 萬行數據的梯度較大,那麼我的算法就會選擇(這 1 萬行梯度很大的數據+x% 從剩餘 49 萬行中隨機抽取的結果)。如果 x 取 10%,那麼最後選取的結果就是通過確定分割值得到的,從 50 萬行中抽取的 5.9 萬行。
  • 擬合目標函數後驗分布的調參利器:貝葉斯優化
    本文簡單介紹了貝葉斯優化的基本思想和概念,更詳細的推導可查看文末提供的論文。超參數超參數是指模型在訓練過程中並不能直接從數據學到的參數。比如說隨機梯度下降算法中的學習速率,出於計算複雜度和算法效率等,我們並不能從數據中直接學習一個比較不錯的學習速度。
  • 機器學習算法的新女王——XGBoost
    隨機森林:這是一種基於Bagging的算法,有一個關鍵的區別,其中只有一個子集的特徵是隨機選擇的。換言之,每個面試官只會對面試者進行一些隨機選擇的資格測試(例如,測試編程技能的技術面試和評估非技術技能的行為面試)。 Boosting:這是一種替代方法,每個面試官都會根據前一位面試官的反饋來改變評估標準。
  • 數學之美:貝葉斯優化
    解決方案:貝葉斯優化。該方法提供了一個優雅的框架可用於來解決上述定義的問題,並且能夠在儘可能少的步驟中找到全局最小值。讓我們構造一個函數c(x)或者一個接收輸入x的模型,如下圖所示為c(x)的形狀。當然,優化器並不知道該函數,稱之為「目標函數」。貝葉斯優化通過代理優化的方式來完成任務。
  • XGBoost 重要關鍵參數及調優步驟
    5. subsample [default=1]構建每棵樹對樣本的採樣率,如果設置成0.5,XGBoost會隨機選擇一半的樣本作為訓練集。學習目標參數:這個參數用來控制理想的優化目標和每一步結果的度量方法。1、objective[默認reg:linear]這個參數定義需要被最小化的損失函數。
  • 以XGBoost為代表的集成算法體現的哲學思想與數學技巧
    為什麼隨機森林比單一決策樹更好?隨機森林背後的基本思想是將許多決策樹組合成一個單一的模型。單獨地,決策樹做出的預測可能不準確,但結合在一起,預測平均後更接近目標。森林中的每個決策樹在形成問題時都會考慮一個隨機的特徵子集,並且只訪問一組隨機的訓練數據點。
  • 一文讀懂貝葉斯推理問題:MCMC方法和變分推斷
    本文第一部分將討論貝葉斯推理問題,並介紹幾個機器學習應用的經典案例,當然,這些案例中會出現貝葉斯推理問題。第二部分將全面介紹用於解決該問題的MCMC技術,並詳細介紹其中的兩種算法:Metropolis-Hasting算法和吉布斯採樣(Gibbs Sampling)算法。最後,第三部分將介紹變分推斷,並了解如何通過優化參數化數族分布得到近似解。
  • 如何評價周志華深度森林模型,熱議會否取代深度學習 DNN
    首先,讓我們簡單回顧周志華和馮霽的論文《深度森林:探索深度神經網絡以外的方法》。了解更多請點擊閱讀新智元報導:。但是,很多數據是結構化的(銷售、推薦等等),並且xgboost模型比神經網絡模型更容易訓練。訓練神經網絡你需要非常昂貴的計算機或者昂貴的雲計算,而且即使用上了訓練起來也不容易。 易於部署是學術界忽略的一個重要因素。在非NLP和非圖像數據集上,通常最佳的 Kaggle 模型就是 xgboost 模型,而且開發 xgboost 花費的時間是開發好神經網絡模型的 1/10。
  • 陳天奇做的XGBoost為什麼能橫掃機器學習競賽平臺?
    Bagging:是一種集合元算法,通過多數投票機制將來自多決策樹的預測結合起來,也就是將弱分離器 f_i(x) 組合起來形成強分類器 F(x) 的一種方法隨機森林:基於Bagging算法。隨機選擇一個包含多種特性的子集來構建一個森林,或者決策樹的集合Boosting:通過最小化先前模型的誤差,同時增加高性能模型的影響,順序構建模型梯度上升:對於似然函數,要求最大值,叫做梯度上升
  • 【華泰金工林曉明團隊】金工: 人工智慧選股之隨機森林模型
    隨機森林是以Bagging並行方法集成一系列決策樹而訓練出的強分類器,可以較好地應用於分類和回歸的不同場景下。本篇報告我們將對隨機森林模型進行系統性的測試,並分析它們應用於多因子選股的異同,希望對本領域的投資者產生有實用意義的參考價值。
  • 實戰:用Python實現隨機森林
    如果你掌握單個決策樹、bagging決策樹和隨機特徵子集,那麼你就可以很好地理解隨機森林的工作原理。隨機森林結合了數百或數千個決策樹,在略微不同的觀察集上訓練每個決策樹,並且僅考慮有限數量的特徵來分割每個樹中的節點。隨機森林做出的最終預測是通過平均每棵樹的預測來做出的。
  • 貝葉斯優化之美:精妙算法背後的直覺
    我們的解決方案是貝葉斯優化,它提供了一個簡潔的框架來處理類似於場景描述的問題,以最精簡的步驟數找到全局最小值。構造一個函數c(x)的假設例子,或者給定輸入值x的模型的成本。當然,這個函數看起來是什麼樣子對優化器是隱藏的——這就是c(x)的真實形狀,行話中被稱為「目標函數」。貝葉斯優化通過代理優化方法來完成這項任務。
  • 巧妙算法背後的直覺:淺談貝葉斯優化之美
    編譯 | 蔣寶尚編輯 | 陳彩嫻假設有一個函數F(x),已知計算成本很高,且解析式和導數未知。問:如何找到全局最小值?毫無疑問,這是一個非常燒腦的任務,比機器學習所有的優化問題都燒腦,畢竟機器學習中的梯度下降就默認了導數可得。