xgboost是序列生成cart樹,但是xgboost在處理特徵時可以做到並行處理,xgboost並行原理體現在最優切分點的選擇,假設樣本資料共m個特徵,對於某一輪cart樹的構建過程中,選擇最佳切分點演算法如下圖:
1. 紅色框表示根據每個特徵大小對訓練資料進行排序,儲存為block結構,block個數與特徵數量相等。
2. 綠色寬表示對每個block結構選擇最佳特徵切分點 ,節點切分標準是目標函式下降的程度,目標函式含義可參考上文 。
3. 黑色框表示比較每個block結構的最佳特徵切分點的目標函式下降的增益,選擇最佳切分點。
2. 切分點演算法之貪婪演算法
每乙個block結構的切分點演算法思路是相同的,因此,我重點介紹某一塊block結構的切分點演算法。
xgboost分位點演算法:根據特徵對樣本資料進行排序,然後特徵從小到大進行切分,比較每次切分後的目標函式大小,選擇下降最大的節點作為該特徵的最優切分點。最後比較不同block塊結構最優切分點的目標函式下降值,選擇下降最大的特徵作為最優切分點。
流程圖如下:
【例】下表表示樣本的某一列特徵數值
根據特徵大小對樣本重新排序:
貪婪演算法切分節點:
紅箭頭表示每一次的切分節點,選擇目標函式下降最大的點作為切分節點。
3. 切分點演算法之分位點演算法
若特徵是連續值,按照上述的貪婪演算法,運算量極大 。當樣本量足夠大的時候,使用特徵分位點來切分特徵。流程圖如下:
【例】下表表示樣本的某一列特徵數值,用三分位作為切分節點 。
根據特徵大小進行樣本排序:
用特徵的三分位點作切分節點:
紅箭頭表示每一次的切分節點,選擇目標函式下降最大的點作為切分節點。
4. 切分點演算法之權重分位點演算法
上節假設樣本權重相等,根據樣本的分位點來均分損失函式存在偏差,本節用樣本權重來均分損失函式。
損失函式如下:
對其變形得到:
xi損失函式可以看做是以以gi/hi作為label的均方誤差,乘以大小hi的權重,換句話說,xi對loss的貢獻權重為hi ,構建樣本權重的分位點等於誤差的均分。
上節假設樣本權重相等,特徵值的分位點作為切分點,本節假設樣本權重是hi,構建樣本權重的均分點步驟:
(1)根據特徵大小對樣本進行排序
(2)定義排序函式:
其中x,z表示特徵
(3)設定排序函式的分位點為切分點
【例】如下圖
特徵與對應的排序函式值的關係,如下表:
紅色箭頭表示以三分位點作為切分點。
最後,選擇最優切分點。
easyui treegrid節點擊擇
easyui treegrid本身不能實現選中父節點子節點全選,必須通過另外的方法來實現,這裡說下如何通過修改節點樣式新增checkbox來實現級聯選擇效果 首先需要格式化節點的樣式 formatter function value,row,index show方法如下 function show ...
CTreeCtrl 節點擊擇問題
一 問題說明 樹形控制項,單擊某個節點彈出相應的對話方塊 二 問題處理 起先使用了ctreectrl的onselchangedoperate這個事件,實際操作中出現了問題 二次單擊時對話方塊不能顯示,上網查詢資料,才明白二次單擊並不能觸發onselchangedoperate事件 所以最後選擇了on...
樹形DP 結點選擇
問題描述 有一棵 n 個節點的樹,樹上每個節點都有乙個正整數權值。如果乙個點被選擇了,那麼在樹上和它相鄰的點都不能被選擇。求選出的點的權值和最大是多少?輸入格式 第一行包含乙個整數 n 接下來的一行包含 n 個正整數,第 i 個正整數代表點 i 的權值。接下來一共 n 1 行,每行描述樹上的一條邊。...