rxFastTrees:快速樹狀結構

Machine Learning 快速樹狀結構

使用方式

  rxFastTrees(formula = NULL, data, type = c("binary", "regression"),
    numTrees = 100, numLeaves = 20, learningRate = 0.2, minSplit = 10,
    exampleFraction = 0.7, featureFraction = 1, splitFraction = 1,
    numBins = 255, firstUsePenalty = 0, gainConfLevel = 0,
    unbalancedSets = FALSE, trainThreads = 8, randomSeed = NULL,
    mlTransforms = NULL, mlTransformVars = NULL, rowSelection = NULL,
    transforms = NULL, transformObjects = NULL, transformFunc = NULL,
    transformVars = NULL, transformPackages = NULL, transformEnvir = NULL,
    blocksPerRead = rxGetOption("blocksPerRead"),
    reportProgress = rxGetOption("reportProgress"), verbose = 2,
    computeContext = rxGetOption("computeContext"),
    ensemble = ensembleControl(), ...)

引數

formula

如 rxFormula 中所說明的公式。 MicrosoftML 目前不支援互動字詞和 F()

data

指定 .xdf 檔案或資料框架物件的資料來源物件或字元字串。

type

指定快速樹狀結構類型的字元字串:"binary" 為預設的快速樹狀結構二元分類,或是 "regression" 為快速樹狀結構迴歸。

numTrees

指定要在集團中建立的決策樹總數。 藉由建立多個決策樹,您或許能夠有較佳的涵蓋範圍,但是定型時間會拉長。 預設值是 100。

numLeaves

可在任何樹狀結構中建立的分葉 (終端節點) 數目上限。 較大的值可能會增加樹狀結構的大小並提高精確度,但有可能會過度學習,且需要較長的定型時間。 預設值為 20。

learningRate

決定學習過程的每個步驟中,以梯度方向採取的步驟大小。 這將決定學習模組收斂到最佳解決方案的快慢。 如果步驟太大,您可能會超過最佳解決方案。 如果步長太小,定型需花較久時間收斂到最佳解決方案。

minSplit

形成分葉所需的定型執行個體數下限。 也就是說,從子取樣資料中,迴歸樹的分葉中允許的文件數目下限。 「分割」意指樹狀結構的每個層級 (節點) 中的特徵是隨機分割的。 預設值是 10。 雖然會對執行個體進行加權,不過只會計算執行個體數。

exampleFraction

要用於每個樹狀結構的隨機選擇執行個體比例。 預設值為 0.7。

featureFraction

要用於每個樹狀結構的隨機選擇功能分數。 預設值為 1。

splitFraction

要用於每個分割的隨機選擇功能分數。 預設值為 1。

numBins

每個特徵的相異值 (間隔) 數上限。 如果特徵的值少於指定數目,則每個值都會放在本身的間隔中。 如果有更多值,演算法會建立 numBins 間隔。

firstUsePenalty

特徵會先使用懲罰係數。 這是一種正規化形式,會在建立樹狀結構時因使用新特徵而招致懲罰。 增加此值來建立不使用許多特徵的樹狀結構。 預設值為 0。

gainConfLevel

樹狀結構調整增益的信賴需求 (應在範圍 [0,1] 內)。 預設值為 0。

unbalancedSets

如果為 TRUE,則會使用針對未平衡集合最佳化的衍生項目。 只有在 type 等於 "binary" 時適用。 預設值是 FALSE

trainThreads

要用於定型的執行緒數目。 預設值為 8。

randomSeed

指定隨機種子。 預設值是 NULL

mlTransforms

指定要在定型之前要在資料上執行的 MicrosoftML 轉換清單,或者未執行任何轉換時為 NULL。 請參閱 featurizeTextcategoricalcategoricalHash 以了解支援的轉換。 這些轉換會在任何指定的 R 轉換之後執行。 預設值是 NULL

mlTransformVars

指定要用於 mlTransforms 的變數名稱字元向量,或者,若不使用則為 NULL。 預設值是 NULL

rowSelection

指定資料集中要供模型使用的資料列 (觀測值),可以是來自資料集的邏輯變數名稱 (以引號括住),或是使用資料集中變數的邏輯運算式。 例如,rowSelection = "old" 將只會使用變數 old 值為 TRUE 的觀測值。 rowSelection = (age > 20) & (age < 65) & (log(income) > 10) 只會使用 age 變數值介於 20 到 65 之間且 income 變數 log 值大於 10 的觀察值。 資料列選取會在處理任何資料轉換之後執行 (請參閱引數 transformstransformFunc)。 如同所有運算式,rowSelection 可以使用運算式函數在函數呼叫之外定義。

transforms

代表第一輪變數轉換形式 list(name = expression, ``...) 的運算式。 如同所有運算式,transforms (或 rowSelection) 可以使用運算式函數在函數呼叫之外定義。

transformObjects

具名清單,其中包含 transformstransformsFuncrowSelection 可以參考的物件。

transformFunc

變數轉換函數。 如需詳細資料,請參閱 rxTransform。

transformVars

轉換函數所需之輸入資料集變數的字元向量。 如需詳細資料,請參閱 rxTransform。

transformPackages

指定其他 R 套件 (rxGetOption("transformPackages") 中指定的套件之外) 以供使用的字元向量,並預先載入以供變數轉換函數使用。 例如,RevoScaleR 函數中透過其 transformstransformFunc 引數明確定義,或透過其 formularowSelection 引數隱含定義的字元向量。 transformPackages 引數也可能是 NULL,表示 rxGetOption("transformPackages") 以外沒有預先載入任何套件。

transformEnvir

使用者定義的環境,作為內部開發之所有環境的父系且用於變數資料轉換。 如果為 transformEnvir = NULL,則會改用具有父代 baseenv() 的新「雜湊」環境。

blocksPerRead

指定要針對從資料來源讀取之每個資料區塊讀取的區塊數目。

reportProgress

指定資料列處理進度報告層級的整數值:

  • 0:未報告進度。
  • 1:已列印和更新處理的資料列數目。
  • 2:報告已處理的資料列數目與時間。
  • 3:已處理資料列且已報告所有時間。

verbose

指定要輸出數量的整數值。 若為 0,則計算期間不會列印任何詳細資訊輸出。 整數值 14 提供越來越多的資訊量。

computeContext

設定執行計算的內容,以有效的 RxComputeContext 指定。 目前支援本機和 RxInSqlServer 計算內容。

ensemble

用於集成的控制參數。

...

直接傳遞至 Microsoft Compute Engine 的額外引數。

詳細資料

rxFastTrees 是 FastRank 的實作。 FastRank 是 MART 梯度提升演算法的有效實作。 梯度提升是一種適用於迴歸問題的機器學習技術。 它會逐步建置迴歸樹,利用預先定義的損失函數來測量每一步中的錯誤,並於下一步更正。 因此,預測模型實際上是多個較弱預測模型組成的集團。 在迴歸問題中,提升會以逐步方式建置一系列這類樹狀結構,然後使用任意可微分損失函數來選取最佳樹狀結構。

MART 會學習迴歸樹狀結構,這是其分葉中具有純量值的決策樹。 決策 (或迴歸) 樹狀結構是類似二進位樹狀目錄的流程圖,使用者可以按照其中一個輸入的特徵值,決定繼續使用兩個子節點中的哪一個。 在每個分葉節點都會傳回一個值。 在內部的節點,決策是以測試 "x <= v" 為依據,其中 x 是輸入範例中的功能值,而 v 是此功能其中一個可能的值。 迴歸樹狀結構可產生的函數是所有分段常數函數。

集團樹狀結構的產生方式是在每一步中計算迴歸樹,以大致估計損失函數的梯度,然後將可使新樹狀結構的損失最小化的係數加入至前一個樹狀結構。 MART 在給定實例上產生的集團輸出是樹狀輸出的總和。

針對二元分類問題,輸出會透過某些校正方式來轉換為機率。

針對迴歸問題,輸出就是函數的預測值。

針對排名問題,執行個體會依集團的輸出值排序。

如果 type 設為 "regression",則會使用 FastTree 的迴歸版本。 如果設為 "ranking",則會使用 FastTree 的順位版本。 若使用順位版本,執行個體應該會按照樹狀結構集團的輸出排序。 這類版本的唯一設定差異為校正設定,只有分類才需要此設定。

rxFastTrees:具有定型模型的 rxFastTrees 物件。

FastTree:適用於快速樹狀結構定型工具的類別 maml 學習工具規格物件。

備註

此演算法為多執行緒,且一律會嘗試將整個資料集載入記憶體中。

作者

Microsoft Corporation Microsoft Technical Support

參考資料

Wikipedia: Gradient boosting (Gradient tree boosting)

Greedy function approximation: A gradient boosting machine.

另請參閱

rxFastForestrxFastLinearrxLogisticRegressionrxNeuralNetrxOneClassSvmfeaturizeTextcategoricalcategoricalHashrxPredict.mlModel

範例


 # Estimate a binary classification tree
 infert1 <- infert
 infert1$isCase = (infert1$case == 1)
 treeModel <- rxFastTrees(formula = isCase ~ age + parity + education + spontaneous + induced,
         data = infert1)

 # Create xdf file with per-instance results using rxPredict
 xdfOut <- tempfile(pattern = "scoreOut", fileext = ".xdf")
 scoreDS <- rxPredict(treeModel, data = infert1,
    extraVarsToWrite = c("isCase", "Score"), 
    outData = xdfOut)

 rxDataStep(scoreDS, numRows = 10)

 # Clean-up
 file.remove(xdfOut)

 ######################################################################
 # Estimate a regression fast tree

 # Use the built-in data set 'airquality' to create test and train data
 DF <- airquality[!is.na(airquality$Ozone), ]  
 DF$Ozone <- as.numeric(DF$Ozone)
 randomSplit <- rnorm(nrow(DF))
 trainAir <- DF[randomSplit >= 0,]
 testAir <- DF[randomSplit < 0,]
 airFormula <- Ozone ~ Solar.R + Wind + Temp

 # Regression Fast Tree for train data
 fastTreeReg <- rxFastTrees(airFormula, type = "regression", 
     data = trainAir)  

 # Put score and model variables in data frame
 fastTreeScoreDF <- rxPredict(fastTreeReg, data = testAir, 
     writeModelVars = TRUE)

 # Plot actual versus predicted values with smoothed line
 rxLinePlot(Score ~ Ozone, type = c("p", "smooth"), data = fastTreeScoreDF)