'RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)'

R語言 算法 手術兩百年 大數據 技術 數據輪子 2019-08-07
"
RevoScaleR中的rxDTree函數使用基於二進制的遞歸分區算法來匹配基於樹的模型。得到的模型與推薦的R包rpart生成的模型相似。就像rpart一樣,rxDTree也支持分類樹和迴歸樹;差異由響應變量的性質決定:一個因子響應生成一個分類樹;數值響應生成迴歸樹。

rxDTree算法

決策樹是一種廣泛應用於分類和迴歸的有效算法。構建決策樹通常需要對所有連續變量進行排序,以便決定在何處分割數據。在處理大數據時,這個排序步驟會佔用大量的時間和內存。為了克服排序障礙,人們提出了各種技術,這些技術大致可分為兩類:執行數據預排序使用數據的近似彙總統計。儘管預排序技術更接近於標準的決策樹算法,但它們不能適應非常大的數據集。這些大數據決策樹通常以各種方式並行化,以支持大規模學習:數據並行性水平或垂直地劃分數據,以便不同的處理器可以看到不同的觀察結果或變量,任務並行性在不同的處理器上構建不同的樹節點。

rxDTree算法是一種具有水平數據並行性的近似決策樹算法,特別適用於處理非常大的數據集。它使用直方圖作為數據的近似緊湊表示,並以寬度優先的方式構建決策樹。該算法可以在並行設置中執行,如多核機器或具有主從架構的分佈式環境。每個worker只獲得數據觀察值的子集,但是可以看到到目前為止構建的完整樹。它根據所看到的數據構建一個直方圖,該直方圖基本上將數據壓縮到固定的內存中。然後,這個數據的近似描述被髮送到一個主節點,通信複雜度不變,與數據集的大小無關。主節點集成從每個工作人員接收到的信息,並決定拆分哪個終端樹節點以及如何拆分。由於直方圖是並行構建的,因此即使對於非常大的數據集,也可以快速構建直方圖。

使用rxDTree,您可以通過指定直方圖的最大箱數來控制時間複雜度和預測精度之間的平衡。該算法構建的直方圖在每個bin中觀察到的數量大致相等,並將箱的邊界作為候選分割為終端樹節點。由於只檢查了有限數量的分割位置,因此可能選擇了一個次最優的分割點,從而導致整個樹與用標準算法構造的樹不同。然而,分析表明,即使兩棵樹不完全相同,並行樹的錯誤率也接近串行樹的錯誤率。您可以在直方圖中設置箱的數量,以控制準確性和速度之間的權衡:大量的箱可以更準確地描述數據,從而獲得更準確的結果,而少量的箱可以降低時間複雜度和內存使用量。

當箱數等於或超過觀察數的整數預測器時,rxDTree算法產生與標準排序算法相同的結果。


一個簡單的分類樹

數據

kyphosis 數據集是從兒童接受外科脊柱矯正手術中來的,數據集有4列、81行(81個病例)。

kyphosis 數據集的各列含義

  • Kyphosis:採取手術後依然出現脊柱後凸(駝背)的因子
  • Age:單位是“月”
  • Number:代表進行手術的脊柱椎骨的數目
  • Start:在脊柱上從上往下數、參與手術的第一節椎骨所在的序號
"
RevoScaleR中的rxDTree函數使用基於二進制的遞歸分區算法來匹配基於樹的模型。得到的模型與推薦的R包rpart生成的模型相似。就像rpart一樣,rxDTree也支持分類樹和迴歸樹;差異由響應變量的性質決定:一個因子響應生成一個分類樹;數值響應生成迴歸樹。

rxDTree算法

決策樹是一種廣泛應用於分類和迴歸的有效算法。構建決策樹通常需要對所有連續變量進行排序,以便決定在何處分割數據。在處理大數據時,這個排序步驟會佔用大量的時間和內存。為了克服排序障礙,人們提出了各種技術,這些技術大致可分為兩類:執行數據預排序使用數據的近似彙總統計。儘管預排序技術更接近於標準的決策樹算法,但它們不能適應非常大的數據集。這些大數據決策樹通常以各種方式並行化,以支持大規模學習:數據並行性水平或垂直地劃分數據,以便不同的處理器可以看到不同的觀察結果或變量,任務並行性在不同的處理器上構建不同的樹節點。

rxDTree算法是一種具有水平數據並行性的近似決策樹算法,特別適用於處理非常大的數據集。它使用直方圖作為數據的近似緊湊表示,並以寬度優先的方式構建決策樹。該算法可以在並行設置中執行,如多核機器或具有主從架構的分佈式環境。每個worker只獲得數據觀察值的子集,但是可以看到到目前為止構建的完整樹。它根據所看到的數據構建一個直方圖,該直方圖基本上將數據壓縮到固定的內存中。然後,這個數據的近似描述被髮送到一個主節點,通信複雜度不變,與數據集的大小無關。主節點集成從每個工作人員接收到的信息,並決定拆分哪個終端樹節點以及如何拆分。由於直方圖是並行構建的,因此即使對於非常大的數據集,也可以快速構建直方圖。

使用rxDTree,您可以通過指定直方圖的最大箱數來控制時間複雜度和預測精度之間的平衡。該算法構建的直方圖在每個bin中觀察到的數量大致相等,並將箱的邊界作為候選分割為終端樹節點。由於只檢查了有限數量的分割位置,因此可能選擇了一個次最優的分割點,從而導致整個樹與用標準算法構造的樹不同。然而,分析表明,即使兩棵樹不完全相同,並行樹的錯誤率也接近串行樹的錯誤率。您可以在直方圖中設置箱的數量,以控制準確性和速度之間的權衡:大量的箱可以更準確地描述數據,從而獲得更準確的結果,而少量的箱可以降低時間複雜度和內存使用量。

當箱數等於或超過觀察數的整數預測器時,rxDTree算法產生與標準排序算法相同的結果。


一個簡單的分類樹

數據

kyphosis 數據集是從兒童接受外科脊柱矯正手術中來的,數據集有4列、81行(81個病例)。

kyphosis 數據集的各列含義

  • Kyphosis:採取手術後依然出現脊柱後凸(駝背)的因子
  • Age:單位是“月”
  • Number:代表進行手術的脊柱椎骨的數目
  • Start:在脊柱上從上往下數、參與手術的第一節椎骨所在的序號
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

# fit decision tree
kyphTree <- rxDTree(Kyphosis ~ Age + Start + Number, data = kyphosis,
\tcp=0.01)

# fitted decision tree model object
kyphTree

# plot the tree
library(RevoTreeView)
plot(createTreeView(kyphTree))
"
RevoScaleR中的rxDTree函數使用基於二進制的遞歸分區算法來匹配基於樹的模型。得到的模型與推薦的R包rpart生成的模型相似。就像rpart一樣,rxDTree也支持分類樹和迴歸樹;差異由響應變量的性質決定:一個因子響應生成一個分類樹;數值響應生成迴歸樹。

rxDTree算法

決策樹是一種廣泛應用於分類和迴歸的有效算法。構建決策樹通常需要對所有連續變量進行排序,以便決定在何處分割數據。在處理大數據時,這個排序步驟會佔用大量的時間和內存。為了克服排序障礙,人們提出了各種技術,這些技術大致可分為兩類:執行數據預排序使用數據的近似彙總統計。儘管預排序技術更接近於標準的決策樹算法,但它們不能適應非常大的數據集。這些大數據決策樹通常以各種方式並行化,以支持大規模學習:數據並行性水平或垂直地劃分數據,以便不同的處理器可以看到不同的觀察結果或變量,任務並行性在不同的處理器上構建不同的樹節點。

rxDTree算法是一種具有水平數據並行性的近似決策樹算法,特別適用於處理非常大的數據集。它使用直方圖作為數據的近似緊湊表示,並以寬度優先的方式構建決策樹。該算法可以在並行設置中執行,如多核機器或具有主從架構的分佈式環境。每個worker只獲得數據觀察值的子集,但是可以看到到目前為止構建的完整樹。它根據所看到的數據構建一個直方圖,該直方圖基本上將數據壓縮到固定的內存中。然後,這個數據的近似描述被髮送到一個主節點,通信複雜度不變,與數據集的大小無關。主節點集成從每個工作人員接收到的信息,並決定拆分哪個終端樹節點以及如何拆分。由於直方圖是並行構建的,因此即使對於非常大的數據集,也可以快速構建直方圖。

使用rxDTree,您可以通過指定直方圖的最大箱數來控制時間複雜度和預測精度之間的平衡。該算法構建的直方圖在每個bin中觀察到的數量大致相等,並將箱的邊界作為候選分割為終端樹節點。由於只檢查了有限數量的分割位置,因此可能選擇了一個次最優的分割點,從而導致整個樹與用標準算法構造的樹不同。然而,分析表明,即使兩棵樹不完全相同,並行樹的錯誤率也接近串行樹的錯誤率。您可以在直方圖中設置箱的數量,以控制準確性和速度之間的權衡:大量的箱可以更準確地描述數據,從而獲得更準確的結果,而少量的箱可以降低時間複雜度和內存使用量。

當箱數等於或超過觀察數的整數預測器時,rxDTree算法產生與標準排序算法相同的結果。


一個簡單的分類樹

數據

kyphosis 數據集是從兒童接受外科脊柱矯正手術中來的,數據集有4列、81行(81個病例)。

kyphosis 數據集的各列含義

  • Kyphosis:採取手術後依然出現脊柱後凸(駝背)的因子
  • Age:單位是“月”
  • Number:代表進行手術的脊柱椎骨的數目
  • Start:在脊柱上從上往下數、參與手術的第一節椎骨所在的序號
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

# fit decision tree
kyphTree <- rxDTree(Kyphosis ~ Age + Start + Number, data = kyphosis,
\tcp=0.01)

# fitted decision tree model object
kyphTree

# plot the tree
library(RevoTreeView)
plot(createTreeView(kyphTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

根據我們對kyphosis 數據的瞭解,更多的椎體參與到手術中,術後併發症後凸的可能性似乎更大。同樣,術後併發症後凸的可能性對年齡的依賴似乎是非線性的:它首先隨年齡增長而增加,峰值在5-9歲之間,然後再次下降。

rxDTree模型似乎證實了Start < 8.5的早期結論,19個觀察對象中有11個出現後凸,而29個Start >= 14.5的受試者中沒有一個出現後凸。在剩下的33名受試者中,年齡是主要的分裂因素,正如我們之前所觀察到的,5至9歲是發生後凸的最高概率。

返回的對象kyphTree是類rxDTree的一個對象。rxDTree類是在rpart類的基礎上建模的,因此rxDTree類的對象具有rpart對象的最基本組件:frame、cptable、split等。然而,在默認情況下,rxDTree對象不會從類rpart繼承。但是,您可以使用rxAddInheritance函數將rpart繼承添加到rxDTree對象。

一個簡單的迴歸樹

數據

mtcars數據來源於1974年美國《汽車趨勢》雜誌,包括32輛汽車(1973-74型)的油耗和10個方面的汽車設計和性能。

一個包含11個變量的32個觀察值的數據框架。

  • 英里/加侖
  • 圓筒數
  • 位移(cuin .)
  • 總馬力
  • 後橋比
  • 重量(1000磅)
  • 1/4英里的時間
  • V/S
  • 傳輸(0 =自動,1 =手動)
  • 前向齒輪齒數
  • 化油器的碳水化合物數

作為迴歸樹的一個簡單例子,考慮mtcars數據集,讓我們使用排量(disp)作為預測因子來擬合油耗(mpg):

mtcarTree <- rxDTree(mpg ~ disp, data=mtcars)
mtcarTree
plot(createTreeView(mtcarTree))
"
RevoScaleR中的rxDTree函數使用基於二進制的遞歸分區算法來匹配基於樹的模型。得到的模型與推薦的R包rpart生成的模型相似。就像rpart一樣,rxDTree也支持分類樹和迴歸樹;差異由響應變量的性質決定:一個因子響應生成一個分類樹;數值響應生成迴歸樹。

rxDTree算法

決策樹是一種廣泛應用於分類和迴歸的有效算法。構建決策樹通常需要對所有連續變量進行排序,以便決定在何處分割數據。在處理大數據時,這個排序步驟會佔用大量的時間和內存。為了克服排序障礙,人們提出了各種技術,這些技術大致可分為兩類:執行數據預排序使用數據的近似彙總統計。儘管預排序技術更接近於標準的決策樹算法,但它們不能適應非常大的數據集。這些大數據決策樹通常以各種方式並行化,以支持大規模學習:數據並行性水平或垂直地劃分數據,以便不同的處理器可以看到不同的觀察結果或變量,任務並行性在不同的處理器上構建不同的樹節點。

rxDTree算法是一種具有水平數據並行性的近似決策樹算法,特別適用於處理非常大的數據集。它使用直方圖作為數據的近似緊湊表示,並以寬度優先的方式構建決策樹。該算法可以在並行設置中執行,如多核機器或具有主從架構的分佈式環境。每個worker只獲得數據觀察值的子集,但是可以看到到目前為止構建的完整樹。它根據所看到的數據構建一個直方圖,該直方圖基本上將數據壓縮到固定的內存中。然後,這個數據的近似描述被髮送到一個主節點,通信複雜度不變,與數據集的大小無關。主節點集成從每個工作人員接收到的信息,並決定拆分哪個終端樹節點以及如何拆分。由於直方圖是並行構建的,因此即使對於非常大的數據集,也可以快速構建直方圖。

使用rxDTree,您可以通過指定直方圖的最大箱數來控制時間複雜度和預測精度之間的平衡。該算法構建的直方圖在每個bin中觀察到的數量大致相等,並將箱的邊界作為候選分割為終端樹節點。由於只檢查了有限數量的分割位置,因此可能選擇了一個次最優的分割點,從而導致整個樹與用標準算法構造的樹不同。然而,分析表明,即使兩棵樹不完全相同,並行樹的錯誤率也接近串行樹的錯誤率。您可以在直方圖中設置箱的數量,以控制準確性和速度之間的權衡:大量的箱可以更準確地描述數據,從而獲得更準確的結果,而少量的箱可以降低時間複雜度和內存使用量。

當箱數等於或超過觀察數的整數預測器時,rxDTree算法產生與標準排序算法相同的結果。


一個簡單的分類樹

數據

kyphosis 數據集是從兒童接受外科脊柱矯正手術中來的,數據集有4列、81行(81個病例)。

kyphosis 數據集的各列含義

  • Kyphosis:採取手術後依然出現脊柱後凸(駝背)的因子
  • Age:單位是“月”
  • Number:代表進行手術的脊柱椎骨的數目
  • Start:在脊柱上從上往下數、參與手術的第一節椎骨所在的序號
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

# fit decision tree
kyphTree <- rxDTree(Kyphosis ~ Age + Start + Number, data = kyphosis,
\tcp=0.01)

# fitted decision tree model object
kyphTree

# plot the tree
library(RevoTreeView)
plot(createTreeView(kyphTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

根據我們對kyphosis 數據的瞭解,更多的椎體參與到手術中,術後併發症後凸的可能性似乎更大。同樣,術後併發症後凸的可能性對年齡的依賴似乎是非線性的:它首先隨年齡增長而增加,峰值在5-9歲之間,然後再次下降。

rxDTree模型似乎證實了Start < 8.5的早期結論,19個觀察對象中有11個出現後凸,而29個Start >= 14.5的受試者中沒有一個出現後凸。在剩下的33名受試者中,年齡是主要的分裂因素,正如我們之前所觀察到的,5至9歲是發生後凸的最高概率。

返回的對象kyphTree是類rxDTree的一個對象。rxDTree類是在rpart類的基礎上建模的,因此rxDTree類的對象具有rpart對象的最基本組件:frame、cptable、split等。然而,在默認情況下,rxDTree對象不會從類rpart繼承。但是,您可以使用rxAddInheritance函數將rpart繼承添加到rxDTree對象。

一個簡單的迴歸樹

數據

mtcars數據來源於1974年美國《汽車趨勢》雜誌,包括32輛汽車(1973-74型)的油耗和10個方面的汽車設計和性能。

一個包含11個變量的32個觀察值的數據框架。

  • 英里/加侖
  • 圓筒數
  • 位移(cuin .)
  • 總馬力
  • 後橋比
  • 重量(1000磅)
  • 1/4英里的時間
  • V/S
  • 傳輸(0 =自動,1 =手動)
  • 前向齒輪齒數
  • 化油器的碳水化合物數

作為迴歸樹的一個簡單例子,考慮mtcars數據集,讓我們使用排量(disp)作為預測因子來擬合油耗(mpg):

mtcarTree <- rxDTree(mpg ~ disp, data=mtcars)
mtcarTree
plot(createTreeView(mtcarTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

大型汽車(發動機排量大於163.5立方英寸的汽車)和小型汽車之間存在明顯的差異。

大數據樹模型

數據

作為大型數據分類樹的一個例子,考慮以下使用7%的完整航空公司數據子樣本的簡單模型(使用變量ArrDel15表示延遲15分鐘或更長時間的航班)在這裡下載數據:https://packages.revolutionanalytics.com/datasets/
# Large Data Tree Models

bigDataDir <- "C:/Data"
sampleAirData <- file.path(bigDataDir, "AirOnTime7Pct.xdf")\t
airlineTree <- rxDTree(ArrDel15 ~ CRSDepTime + DayOfWeek, data = sampleAirData,
blocksPerRead = 30, maxDepth = 5, cp = 1e-5)

默認的cp等於0會產生大量的分割;指定cp = 1e-5會在這個模型中產生一組更易於管理的分割。

plot(createTreeView(airlineTree))
"
RevoScaleR中的rxDTree函數使用基於二進制的遞歸分區算法來匹配基於樹的模型。得到的模型與推薦的R包rpart生成的模型相似。就像rpart一樣,rxDTree也支持分類樹和迴歸樹;差異由響應變量的性質決定:一個因子響應生成一個分類樹;數值響應生成迴歸樹。

rxDTree算法

決策樹是一種廣泛應用於分類和迴歸的有效算法。構建決策樹通常需要對所有連續變量進行排序,以便決定在何處分割數據。在處理大數據時,這個排序步驟會佔用大量的時間和內存。為了克服排序障礙,人們提出了各種技術,這些技術大致可分為兩類:執行數據預排序使用數據的近似彙總統計。儘管預排序技術更接近於標準的決策樹算法,但它們不能適應非常大的數據集。這些大數據決策樹通常以各種方式並行化,以支持大規模學習:數據並行性水平或垂直地劃分數據,以便不同的處理器可以看到不同的觀察結果或變量,任務並行性在不同的處理器上構建不同的樹節點。

rxDTree算法是一種具有水平數據並行性的近似決策樹算法,特別適用於處理非常大的數據集。它使用直方圖作為數據的近似緊湊表示,並以寬度優先的方式構建決策樹。該算法可以在並行設置中執行,如多核機器或具有主從架構的分佈式環境。每個worker只獲得數據觀察值的子集,但是可以看到到目前為止構建的完整樹。它根據所看到的數據構建一個直方圖,該直方圖基本上將數據壓縮到固定的內存中。然後,這個數據的近似描述被髮送到一個主節點,通信複雜度不變,與數據集的大小無關。主節點集成從每個工作人員接收到的信息,並決定拆分哪個終端樹節點以及如何拆分。由於直方圖是並行構建的,因此即使對於非常大的數據集,也可以快速構建直方圖。

使用rxDTree,您可以通過指定直方圖的最大箱數來控制時間複雜度和預測精度之間的平衡。該算法構建的直方圖在每個bin中觀察到的數量大致相等,並將箱的邊界作為候選分割為終端樹節點。由於只檢查了有限數量的分割位置,因此可能選擇了一個次最優的分割點,從而導致整個樹與用標準算法構造的樹不同。然而,分析表明,即使兩棵樹不完全相同,並行樹的錯誤率也接近串行樹的錯誤率。您可以在直方圖中設置箱的數量,以控制準確性和速度之間的權衡:大量的箱可以更準確地描述數據,從而獲得更準確的結果,而少量的箱可以降低時間複雜度和內存使用量。

當箱數等於或超過觀察數的整數預測器時,rxDTree算法產生與標準排序算法相同的結果。


一個簡單的分類樹

數據

kyphosis 數據集是從兒童接受外科脊柱矯正手術中來的,數據集有4列、81行(81個病例)。

kyphosis 數據集的各列含義

  • Kyphosis:採取手術後依然出現脊柱後凸(駝背)的因子
  • Age:單位是“月”
  • Number:代表進行手術的脊柱椎骨的數目
  • Start:在脊柱上從上往下數、參與手術的第一節椎骨所在的序號
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

# fit decision tree
kyphTree <- rxDTree(Kyphosis ~ Age + Start + Number, data = kyphosis,
\tcp=0.01)

# fitted decision tree model object
kyphTree

# plot the tree
library(RevoTreeView)
plot(createTreeView(kyphTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

根據我們對kyphosis 數據的瞭解,更多的椎體參與到手術中,術後併發症後凸的可能性似乎更大。同樣,術後併發症後凸的可能性對年齡的依賴似乎是非線性的:它首先隨年齡增長而增加,峰值在5-9歲之間,然後再次下降。

rxDTree模型似乎證實了Start < 8.5的早期結論,19個觀察對象中有11個出現後凸,而29個Start >= 14.5的受試者中沒有一個出現後凸。在剩下的33名受試者中,年齡是主要的分裂因素,正如我們之前所觀察到的,5至9歲是發生後凸的最高概率。

返回的對象kyphTree是類rxDTree的一個對象。rxDTree類是在rpart類的基礎上建模的,因此rxDTree類的對象具有rpart對象的最基本組件:frame、cptable、split等。然而,在默認情況下,rxDTree對象不會從類rpart繼承。但是,您可以使用rxAddInheritance函數將rpart繼承添加到rxDTree對象。

一個簡單的迴歸樹

數據

mtcars數據來源於1974年美國《汽車趨勢》雜誌,包括32輛汽車(1973-74型)的油耗和10個方面的汽車設計和性能。

一個包含11個變量的32個觀察值的數據框架。

  • 英里/加侖
  • 圓筒數
  • 位移(cuin .)
  • 總馬力
  • 後橋比
  • 重量(1000磅)
  • 1/4英里的時間
  • V/S
  • 傳輸(0 =自動,1 =手動)
  • 前向齒輪齒數
  • 化油器的碳水化合物數

作為迴歸樹的一個簡單例子,考慮mtcars數據集,讓我們使用排量(disp)作為預測因子來擬合油耗(mpg):

mtcarTree <- rxDTree(mpg ~ disp, data=mtcars)
mtcarTree
plot(createTreeView(mtcarTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

大型汽車(發動機排量大於163.5立方英寸的汽車)和小型汽車之間存在明顯的差異。

大數據樹模型

數據

作為大型數據分類樹的一個例子,考慮以下使用7%的完整航空公司數據子樣本的簡單模型(使用變量ArrDel15表示延遲15分鐘或更長時間的航班)在這裡下載數據:https://packages.revolutionanalytics.com/datasets/
# Large Data Tree Models

bigDataDir <- "C:/Data"
sampleAirData <- file.path(bigDataDir, "AirOnTime7Pct.xdf")\t
airlineTree <- rxDTree(ArrDel15 ~ CRSDepTime + DayOfWeek, data = sampleAirData,
blocksPerRead = 30, maxDepth = 5, cp = 1e-5)

默認的cp等於0會產生大量的分割;指定cp = 1e-5會在這個模型中產生一組更易於管理的分割。

plot(createTreeView(airlineTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

plot(airlineTree$cptable[,'nsplit'], airlineTree$cptable[,"xerror"],
type='b',
xlab="nsplit",
ylab="xerror")
"
RevoScaleR中的rxDTree函數使用基於二進制的遞歸分區算法來匹配基於樹的模型。得到的模型與推薦的R包rpart生成的模型相似。就像rpart一樣,rxDTree也支持分類樹和迴歸樹;差異由響應變量的性質決定:一個因子響應生成一個分類樹;數值響應生成迴歸樹。

rxDTree算法

決策樹是一種廣泛應用於分類和迴歸的有效算法。構建決策樹通常需要對所有連續變量進行排序,以便決定在何處分割數據。在處理大數據時,這個排序步驟會佔用大量的時間和內存。為了克服排序障礙,人們提出了各種技術,這些技術大致可分為兩類:執行數據預排序使用數據的近似彙總統計。儘管預排序技術更接近於標準的決策樹算法,但它們不能適應非常大的數據集。這些大數據決策樹通常以各種方式並行化,以支持大規模學習:數據並行性水平或垂直地劃分數據,以便不同的處理器可以看到不同的觀察結果或變量,任務並行性在不同的處理器上構建不同的樹節點。

rxDTree算法是一種具有水平數據並行性的近似決策樹算法,特別適用於處理非常大的數據集。它使用直方圖作為數據的近似緊湊表示,並以寬度優先的方式構建決策樹。該算法可以在並行設置中執行,如多核機器或具有主從架構的分佈式環境。每個worker只獲得數據觀察值的子集,但是可以看到到目前為止構建的完整樹。它根據所看到的數據構建一個直方圖,該直方圖基本上將數據壓縮到固定的內存中。然後,這個數據的近似描述被髮送到一個主節點,通信複雜度不變,與數據集的大小無關。主節點集成從每個工作人員接收到的信息,並決定拆分哪個終端樹節點以及如何拆分。由於直方圖是並行構建的,因此即使對於非常大的數據集,也可以快速構建直方圖。

使用rxDTree,您可以通過指定直方圖的最大箱數來控制時間複雜度和預測精度之間的平衡。該算法構建的直方圖在每個bin中觀察到的數量大致相等,並將箱的邊界作為候選分割為終端樹節點。由於只檢查了有限數量的分割位置,因此可能選擇了一個次最優的分割點,從而導致整個樹與用標準算法構造的樹不同。然而,分析表明,即使兩棵樹不完全相同,並行樹的錯誤率也接近串行樹的錯誤率。您可以在直方圖中設置箱的數量,以控制準確性和速度之間的權衡:大量的箱可以更準確地描述數據,從而獲得更準確的結果,而少量的箱可以降低時間複雜度和內存使用量。

當箱數等於或超過觀察數的整數預測器時,rxDTree算法產生與標準排序算法相同的結果。


一個簡單的分類樹

數據

kyphosis 數據集是從兒童接受外科脊柱矯正手術中來的,數據集有4列、81行(81個病例)。

kyphosis 數據集的各列含義

  • Kyphosis:採取手術後依然出現脊柱後凸(駝背)的因子
  • Age:單位是“月”
  • Number:代表進行手術的脊柱椎骨的數目
  • Start:在脊柱上從上往下數、參與手術的第一節椎骨所在的序號
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

# fit decision tree
kyphTree <- rxDTree(Kyphosis ~ Age + Start + Number, data = kyphosis,
\tcp=0.01)

# fitted decision tree model object
kyphTree

# plot the tree
library(RevoTreeView)
plot(createTreeView(kyphTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

根據我們對kyphosis 數據的瞭解,更多的椎體參與到手術中,術後併發症後凸的可能性似乎更大。同樣,術後併發症後凸的可能性對年齡的依賴似乎是非線性的:它首先隨年齡增長而增加,峰值在5-9歲之間,然後再次下降。

rxDTree模型似乎證實了Start < 8.5的早期結論,19個觀察對象中有11個出現後凸,而29個Start >= 14.5的受試者中沒有一個出現後凸。在剩下的33名受試者中,年齡是主要的分裂因素,正如我們之前所觀察到的,5至9歲是發生後凸的最高概率。

返回的對象kyphTree是類rxDTree的一個對象。rxDTree類是在rpart類的基礎上建模的,因此rxDTree類的對象具有rpart對象的最基本組件:frame、cptable、split等。然而,在默認情況下,rxDTree對象不會從類rpart繼承。但是,您可以使用rxAddInheritance函數將rpart繼承添加到rxDTree對象。

一個簡單的迴歸樹

數據

mtcars數據來源於1974年美國《汽車趨勢》雜誌,包括32輛汽車(1973-74型)的油耗和10個方面的汽車設計和性能。

一個包含11個變量的32個觀察值的數據框架。

  • 英里/加侖
  • 圓筒數
  • 位移(cuin .)
  • 總馬力
  • 後橋比
  • 重量(1000磅)
  • 1/4英里的時間
  • V/S
  • 傳輸(0 =自動,1 =手動)
  • 前向齒輪齒數
  • 化油器的碳水化合物數

作為迴歸樹的一個簡單例子,考慮mtcars數據集,讓我們使用排量(disp)作為預測因子來擬合油耗(mpg):

mtcarTree <- rxDTree(mpg ~ disp, data=mtcars)
mtcarTree
plot(createTreeView(mtcarTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

大型汽車(發動機排量大於163.5立方英寸的汽車)和小型汽車之間存在明顯的差異。

大數據樹模型

數據

作為大型數據分類樹的一個例子,考慮以下使用7%的完整航空公司數據子樣本的簡單模型(使用變量ArrDel15表示延遲15分鐘或更長時間的航班)在這裡下載數據:https://packages.revolutionanalytics.com/datasets/
# Large Data Tree Models

bigDataDir <- "C:/Data"
sampleAirData <- file.path(bigDataDir, "AirOnTime7Pct.xdf")\t
airlineTree <- rxDTree(ArrDel15 ~ CRSDepTime + DayOfWeek, data = sampleAirData,
blocksPerRead = 30, maxDepth = 5, cp = 1e-5)

默認的cp等於0會產生大量的分割;指定cp = 1e-5會在這個模型中產生一組更易於管理的分割。

plot(createTreeView(airlineTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

plot(airlineTree$cptable[,'nsplit'], airlineTree$cptable[,"xerror"],
type='b',
xlab="nsplit",
ylab="xerror")
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

隨著分割次數的增加,我們看到交叉驗證錯誤(xerror)穩步下降,但請注意,在nsplit=11左右,更改的速度顯著放緩。最優模型很可能就在這裡。

"
RevoScaleR中的rxDTree函數使用基於二進制的遞歸分區算法來匹配基於樹的模型。得到的模型與推薦的R包rpart生成的模型相似。就像rpart一樣,rxDTree也支持分類樹和迴歸樹;差異由響應變量的性質決定:一個因子響應生成一個分類樹;數值響應生成迴歸樹。

rxDTree算法

決策樹是一種廣泛應用於分類和迴歸的有效算法。構建決策樹通常需要對所有連續變量進行排序,以便決定在何處分割數據。在處理大數據時,這個排序步驟會佔用大量的時間和內存。為了克服排序障礙,人們提出了各種技術,這些技術大致可分為兩類:執行數據預排序使用數據的近似彙總統計。儘管預排序技術更接近於標準的決策樹算法,但它們不能適應非常大的數據集。這些大數據決策樹通常以各種方式並行化,以支持大規模學習:數據並行性水平或垂直地劃分數據,以便不同的處理器可以看到不同的觀察結果或變量,任務並行性在不同的處理器上構建不同的樹節點。

rxDTree算法是一種具有水平數據並行性的近似決策樹算法,特別適用於處理非常大的數據集。它使用直方圖作為數據的近似緊湊表示,並以寬度優先的方式構建決策樹。該算法可以在並行設置中執行,如多核機器或具有主從架構的分佈式環境。每個worker只獲得數據觀察值的子集,但是可以看到到目前為止構建的完整樹。它根據所看到的數據構建一個直方圖,該直方圖基本上將數據壓縮到固定的內存中。然後,這個數據的近似描述被髮送到一個主節點,通信複雜度不變,與數據集的大小無關。主節點集成從每個工作人員接收到的信息,並決定拆分哪個終端樹節點以及如何拆分。由於直方圖是並行構建的,因此即使對於非常大的數據集,也可以快速構建直方圖。

使用rxDTree,您可以通過指定直方圖的最大箱數來控制時間複雜度和預測精度之間的平衡。該算法構建的直方圖在每個bin中觀察到的數量大致相等,並將箱的邊界作為候選分割為終端樹節點。由於只檢查了有限數量的分割位置,因此可能選擇了一個次最優的分割點,從而導致整個樹與用標準算法構造的樹不同。然而,分析表明,即使兩棵樹不完全相同,並行樹的錯誤率也接近串行樹的錯誤率。您可以在直方圖中設置箱的數量,以控制準確性和速度之間的權衡:大量的箱可以更準確地描述數據,從而獲得更準確的結果,而少量的箱可以降低時間複雜度和內存使用量。

當箱數等於或超過觀察數的整數預測器時,rxDTree算法產生與標準排序算法相同的結果。


一個簡單的分類樹

數據

kyphosis 數據集是從兒童接受外科脊柱矯正手術中來的,數據集有4列、81行(81個病例)。

kyphosis 數據集的各列含義

  • Kyphosis:採取手術後依然出現脊柱後凸(駝背)的因子
  • Age:單位是“月”
  • Number:代表進行手術的脊柱椎骨的數目
  • Start:在脊柱上從上往下數、參與手術的第一節椎骨所在的序號
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

# fit decision tree
kyphTree <- rxDTree(Kyphosis ~ Age + Start + Number, data = kyphosis,
\tcp=0.01)

# fitted decision tree model object
kyphTree

# plot the tree
library(RevoTreeView)
plot(createTreeView(kyphTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

根據我們對kyphosis 數據的瞭解,更多的椎體參與到手術中,術後併發症後凸的可能性似乎更大。同樣,術後併發症後凸的可能性對年齡的依賴似乎是非線性的:它首先隨年齡增長而增加,峰值在5-9歲之間,然後再次下降。

rxDTree模型似乎證實了Start < 8.5的早期結論,19個觀察對象中有11個出現後凸,而29個Start >= 14.5的受試者中沒有一個出現後凸。在剩下的33名受試者中,年齡是主要的分裂因素,正如我們之前所觀察到的,5至9歲是發生後凸的最高概率。

返回的對象kyphTree是類rxDTree的一個對象。rxDTree類是在rpart類的基礎上建模的,因此rxDTree類的對象具有rpart對象的最基本組件:frame、cptable、split等。然而,在默認情況下,rxDTree對象不會從類rpart繼承。但是,您可以使用rxAddInheritance函數將rpart繼承添加到rxDTree對象。

一個簡單的迴歸樹

數據

mtcars數據來源於1974年美國《汽車趨勢》雜誌,包括32輛汽車(1973-74型)的油耗和10個方面的汽車設計和性能。

一個包含11個變量的32個觀察值的數據框架。

  • 英里/加侖
  • 圓筒數
  • 位移(cuin .)
  • 總馬力
  • 後橋比
  • 重量(1000磅)
  • 1/4英里的時間
  • V/S
  • 傳輸(0 =自動,1 =手動)
  • 前向齒輪齒數
  • 化油器的碳水化合物數

作為迴歸樹的一個簡單例子,考慮mtcars數據集,讓我們使用排量(disp)作為預測因子來擬合油耗(mpg):

mtcarTree <- rxDTree(mpg ~ disp, data=mtcars)
mtcarTree
plot(createTreeView(mtcarTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

大型汽車(發動機排量大於163.5立方英寸的汽車)和小型汽車之間存在明顯的差異。

大數據樹模型

數據

作為大型數據分類樹的一個例子,考慮以下使用7%的完整航空公司數據子樣本的簡單模型(使用變量ArrDel15表示延遲15分鐘或更長時間的航班)在這裡下載數據:https://packages.revolutionanalytics.com/datasets/
# Large Data Tree Models

bigDataDir <- "C:/Data"
sampleAirData <- file.path(bigDataDir, "AirOnTime7Pct.xdf")\t
airlineTree <- rxDTree(ArrDel15 ~ CRSDepTime + DayOfWeek, data = sampleAirData,
blocksPerRead = 30, maxDepth = 5, cp = 1e-5)

默認的cp等於0會產生大量的分割;指定cp = 1e-5會在這個模型中產生一組更易於管理的分割。

plot(createTreeView(airlineTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

plot(airlineTree$cptable[,'nsplit'], airlineTree$cptable[,"xerror"],
type='b',
xlab="nsplit",
ylab="xerror")
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

隨著分割次數的增加,我們看到交叉驗證錯誤(xerror)穩步下降,但請注意,在nsplit=11左右,更改的速度顯著放緩。最優模型很可能就在這裡。

RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

# prune model
airlineTreePruned <- prune.rxDTree(airlineTree, cp=2.097651e-04)

plot(createTreeView(airlineTreePruned))
"
RevoScaleR中的rxDTree函數使用基於二進制的遞歸分區算法來匹配基於樹的模型。得到的模型與推薦的R包rpart生成的模型相似。就像rpart一樣,rxDTree也支持分類樹和迴歸樹;差異由響應變量的性質決定:一個因子響應生成一個分類樹;數值響應生成迴歸樹。

rxDTree算法

決策樹是一種廣泛應用於分類和迴歸的有效算法。構建決策樹通常需要對所有連續變量進行排序,以便決定在何處分割數據。在處理大數據時,這個排序步驟會佔用大量的時間和內存。為了克服排序障礙,人們提出了各種技術,這些技術大致可分為兩類:執行數據預排序使用數據的近似彙總統計。儘管預排序技術更接近於標準的決策樹算法,但它們不能適應非常大的數據集。這些大數據決策樹通常以各種方式並行化,以支持大規模學習:數據並行性水平或垂直地劃分數據,以便不同的處理器可以看到不同的觀察結果或變量,任務並行性在不同的處理器上構建不同的樹節點。

rxDTree算法是一種具有水平數據並行性的近似決策樹算法,特別適用於處理非常大的數據集。它使用直方圖作為數據的近似緊湊表示,並以寬度優先的方式構建決策樹。該算法可以在並行設置中執行,如多核機器或具有主從架構的分佈式環境。每個worker只獲得數據觀察值的子集,但是可以看到到目前為止構建的完整樹。它根據所看到的數據構建一個直方圖,該直方圖基本上將數據壓縮到固定的內存中。然後,這個數據的近似描述被髮送到一個主節點,通信複雜度不變,與數據集的大小無關。主節點集成從每個工作人員接收到的信息,並決定拆分哪個終端樹節點以及如何拆分。由於直方圖是並行構建的,因此即使對於非常大的數據集,也可以快速構建直方圖。

使用rxDTree,您可以通過指定直方圖的最大箱數來控制時間複雜度和預測精度之間的平衡。該算法構建的直方圖在每個bin中觀察到的數量大致相等,並將箱的邊界作為候選分割為終端樹節點。由於只檢查了有限數量的分割位置,因此可能選擇了一個次最優的分割點,從而導致整個樹與用標準算法構造的樹不同。然而,分析表明,即使兩棵樹不完全相同,並行樹的錯誤率也接近串行樹的錯誤率。您可以在直方圖中設置箱的數量,以控制準確性和速度之間的權衡:大量的箱可以更準確地描述數據,從而獲得更準確的結果,而少量的箱可以降低時間複雜度和內存使用量。

當箱數等於或超過觀察數的整數預測器時,rxDTree算法產生與標準排序算法相同的結果。


一個簡單的分類樹

數據

kyphosis 數據集是從兒童接受外科脊柱矯正手術中來的,數據集有4列、81行(81個病例)。

kyphosis 數據集的各列含義

  • Kyphosis:採取手術後依然出現脊柱後凸(駝背)的因子
  • Age:單位是“月”
  • Number:代表進行手術的脊柱椎骨的數目
  • Start:在脊柱上從上往下數、參與手術的第一節椎骨所在的序號
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

# fit decision tree
kyphTree <- rxDTree(Kyphosis ~ Age + Start + Number, data = kyphosis,
\tcp=0.01)

# fitted decision tree model object
kyphTree

# plot the tree
library(RevoTreeView)
plot(createTreeView(kyphTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

根據我們對kyphosis 數據的瞭解,更多的椎體參與到手術中,術後併發症後凸的可能性似乎更大。同樣,術後併發症後凸的可能性對年齡的依賴似乎是非線性的:它首先隨年齡增長而增加,峰值在5-9歲之間,然後再次下降。

rxDTree模型似乎證實了Start < 8.5的早期結論,19個觀察對象中有11個出現後凸,而29個Start >= 14.5的受試者中沒有一個出現後凸。在剩下的33名受試者中,年齡是主要的分裂因素,正如我們之前所觀察到的,5至9歲是發生後凸的最高概率。

返回的對象kyphTree是類rxDTree的一個對象。rxDTree類是在rpart類的基礎上建模的,因此rxDTree類的對象具有rpart對象的最基本組件:frame、cptable、split等。然而,在默認情況下,rxDTree對象不會從類rpart繼承。但是,您可以使用rxAddInheritance函數將rpart繼承添加到rxDTree對象。

一個簡單的迴歸樹

數據

mtcars數據來源於1974年美國《汽車趨勢》雜誌,包括32輛汽車(1973-74型)的油耗和10個方面的汽車設計和性能。

一個包含11個變量的32個觀察值的數據框架。

  • 英里/加侖
  • 圓筒數
  • 位移(cuin .)
  • 總馬力
  • 後橋比
  • 重量(1000磅)
  • 1/4英里的時間
  • V/S
  • 傳輸(0 =自動,1 =手動)
  • 前向齒輪齒數
  • 化油器的碳水化合物數

作為迴歸樹的一個簡單例子,考慮mtcars數據集,讓我們使用排量(disp)作為預測因子來擬合油耗(mpg):

mtcarTree <- rxDTree(mpg ~ disp, data=mtcars)
mtcarTree
plot(createTreeView(mtcarTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

大型汽車(發動機排量大於163.5立方英寸的汽車)和小型汽車之間存在明顯的差異。

大數據樹模型

數據

作為大型數據分類樹的一個例子,考慮以下使用7%的完整航空公司數據子樣本的簡單模型(使用變量ArrDel15表示延遲15分鐘或更長時間的航班)在這裡下載數據:https://packages.revolutionanalytics.com/datasets/
# Large Data Tree Models

bigDataDir <- "C:/Data"
sampleAirData <- file.path(bigDataDir, "AirOnTime7Pct.xdf")\t
airlineTree <- rxDTree(ArrDel15 ~ CRSDepTime + DayOfWeek, data = sampleAirData,
blocksPerRead = 30, maxDepth = 5, cp = 1e-5)

默認的cp等於0會產生大量的分割;指定cp = 1e-5會在這個模型中產生一組更易於管理的分割。

plot(createTreeView(airlineTree))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

plot(airlineTree$cptable[,'nsplit'], airlineTree$cptable[,"xerror"],
type='b',
xlab="nsplit",
ylab="xerror")
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

隨著分割次數的增加,我們看到交叉驗證錯誤(xerror)穩步下降,但請注意,在nsplit=11左右,更改的速度顯著放緩。最優模型很可能就在這裡。

RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

# prune model
airlineTreePruned <- prune.rxDTree(airlineTree, cp=2.097651e-04)

plot(createTreeView(airlineTreePruned))
RevoScaleR 中函數rxDTree 擬合決策樹模型(R語言/ MLS)

"

相關推薦

推薦中...