XGBoost可以幫助用戶分析問題,可以在軟件解決很多科學問題,您可以在設計數據處理軟件以及設計科學統計軟件的時候添加XGBoost,讓軟件幫助用戶分析龐大的數據,只要您的內存足夠軟件就可以處理任意體積的數據,可以對幾百萬種數據處理,可以解決幾十億問題,無論是數學問題還是科學問題都可以通過這款軟件配置相關的算法提升計算能力,您將軟件移植到各種環境運行,可以添加到不同的計算平臺運行,分布式的運行方案,可以讓您在不同的平臺處理數據,XGBoost的模型和數據也是可以移植的,這意味著您可以使用R訓練模型,同時使用Java或C ++運行,這在生產系統中更為常見!
XGBoost軟件功能
XGBoost是經過優化的分布式梯度提升庫,旨在高效,靈活且可移植。它在Gradient Boosting框架下實現了機器學習算法。XGBoost提供了并行樹增強(也稱為GBDT,GBM),可快速準確地解決許多數據科學問題。相同的代碼在主要的分布式環境(Hadoop,SGE,MPI)上運行,并且可以解決數十億個示例之外的問題。
現在,我們提供了一個簡單的界面,可通過指定一系列增強來對切片樹模型進行切片。可以通過切片接口將樹分為多個子。
另外,提早停止的回調現在支持`save_best`選項。啟用后,XGBoost將在最佳增強回合中保存(持久)模型,并丟棄最佳回合后適合的樹。
特征(列)的加權子采樣(#52)
現在可以通過加權子采樣對要素(列)進行采樣,其中更有可能在樣本中選擇權重較高的要素。加權二次采樣使您可以通過選擇樹拆分中的一組特定功能來對領域知識進行編碼。此外,通過將零權重分配給特定特征,可以防止將其用于任何拆分中。
XGBoost新版特色
能改進
多核CPU上的各種能改進
-將DMatx的構建時間優化了3.7倍。
-CPU能最多可提高3.6倍。
-優化CPU圖減少所有稀疏數據
-為BuildHist分配線程本地內存,從而使速度提高了1.7倍。
-禁用用于創建DMatx的超線程(#6386)。這樣可以將DMatx創建速度提高2倍。
-中靜態表皮的簡單修復
統一線程配置,以輕松利用所有CPU內核
[jvm-packages]清除確定分區的計算方式
通過實現侵入指針類(#6129)來加快ON序列化。從而使能提高1.5到2倍。
XGBoost教程
功能交互約束
決策樹是發現自變量(功能)之間相互作用的強大工具。由于子節點的條件是根據父節點的條件來確定的,因此遍歷路徑中一起出現的變量將相互交互。例如,下圖中突出顯示的紅色路徑包含三個變量:(x_1), (x_7), 和 (x_{10}),因此突出顯示的(在突出顯示的葉節點處)是 (x_1), (x_7), 和 (x_{10})。
當樹的深度大于1時,許多變量將在最小化訓練損失的唯一基上進行交互,并且結果決策樹可能捕獲了虛假的關系(噪聲),而不是概括了不同數據集的合法關系。功能交互約束 使用戶可以決定允許哪些變量進行交互,哪些不進行交互。
潛在的好處包括:
通過專注于有效的交互,無論是通過特定領域的知識還是通過對交互進行排名的算法,都能獲得更好的能
中的噪音更少;更好的概括
用戶可以更好地控制模型的適用范圍。例如,由于規章限制,即使交互表現良好,用戶也可能希望排除一些交互
一個簡單的例子
特征交互約束是根據允許交互的變量組來表達的。例如,約束 表明變量[0, 1](x_0) 和 (x_1)允許彼此交互,但沒有其他變量。同樣, 表示[2, 3, 4](x_2), (x_3), 和 (x_4)允許彼此交互,但沒有其他變量。一組功能交互約束表示為嵌套列表,例如 ,其中每個內部列表是一組允許彼此交互的功能索引。[[0, 1], [2, 3, 4]]
在下面的圖中,左側決策樹違反第一約束(的),而正確的決定樹符合所述第一和第二約束條件兩者(,)。[0, 1][0, 1][2, 3, 4]
執行功能互動的制約作用XGBoost
在XGBoost中強制執行功能交互約束非常簡單。在這里,我們將給出一個使用Python的示例,但相同的基本思想可以推廣到其他平臺。
假設以下代碼適合您的模型,但沒有要素交互約束:
,使用要素交互約束進行擬合僅需要添加一個參數:
樹木構造算法的選擇。要使用功能的互動的約束,一定要設定的tree_method參數為以下之一:exact,hist,appx或gpu_hist。支持gpu_hist和appx僅在1.0.0中添加。
高級主題
交互約束背后的直覺很簡單。用戶具有關于不同特征之間關系的先驗知識,并將其編碼為模型構建期間的約束。但是圍繞指定約束也有一些微妙之處。采取約束作為一個例子,第二特征出現在兩個不同的交互集和這樣的聯合組特征允許與交互,是。在下圖中,根在feature處。因為它的所有后代都應該能夠與之交互,所以在第二層,所有4個特征都是合法的分割候選者,可以進行進一步的分割,而無需考慮指定的約束集。[[1, 2], [2, 3, 4]][1, 2][2, 3, 4]2{1, 3, 4}2
這導致了特征交互約束的一些有趣的含義。以 作為另一個例子。假設我們的訓練數據集中只有3個可用功能用于表示,那么細心的讀者可能會發現上述約束與相同。由于無論在根節點中選擇哪個功能進行拆分,其所有后代都必須將每個功能都包括在內作為合法的拆分候選,以避免違反交互約束。[[0, 1], [0, 1, 2], [1, 2]][0, 1, 2]
在最后一個示例中,我們使用并選擇特征作為根節點的拆分。在構建樹的第二層,是唯一合法的拆分候選對象,因為它屬于同一約束集,因此它本身就是唯一的候選對象。按照下面示例樹的增長路徑,第二層的節點在feature處分割。但是由于事實也屬于第二約束集,因此在第三層,我們需要將所有要素都包括在內以符合其上升要求。[[0, 1], [1, 3, 4]]01011[1, 3, 4]