分享方式:


rxFastForest:快速樹系

機器學習快速樹系

使用方式

  rxFastForest(formula = NULL, data, type = c("binary", "regression"),
    numTrees = 100, numLeaves = 20, minSplit = 10, exampleFraction = 0.7,
    featureFraction = 0.7, splitFraction = 0.7, numBins = 255,
    firstUsePenalty = 0, gainConfLevel = 0, 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。

minSplit

形成分葉所需的訓練執行個體數目下限。 也就是說,從子取樣資料中,迴歸樹的分葉中允許的文件數目下限。 「分割」意指樹狀結構的每個層級 (節點) 中的特徵是隨機分割的。 預設值是 10。

exampleFraction

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

featureFraction

要用於每個樹狀結構的隨機選擇特徵分數。 預設值為 0.7。

splitFraction

要用於每個分割的隨機選擇特徵分數。 預設值為 0.7。

numBins

每個特徵的相異值 (間隔) 數目上限。 預設值為 255。

firstUsePenalty

特徵會先使用懲罰係數。 預設值為 0。

gainConfLevel

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

trainThreads

要用於定型的執行緒數目。 如果指定了 NULL,則會在內部決定要使用的執行緒數目。 預設值是 NULL

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 中迴歸樹學習工具的隨機樹系和分位數迴歸樹系實作。 模型由決策樹的集團所組成。 決策樹系中的每個樹狀結構都會透過預測來輸出高斯分布。 系統會對樹狀結構整體執行彙總,以找出最接近模型中所有樹狀結構合併分佈的高斯分佈。

此決策樹系分類器由一整團的決策樹所組成。 一般而言,集團模型比單一決策樹的涵蓋範圍更廣、精確度更高。 決策樹系中的每個樹狀結構都會透過預測來輸出高斯分佈。 系統會對樹狀結構整體執行彙總,以找出最接近模型中所有樹狀結構合併分佈的高斯分佈。

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

FastForest:適用於快速樹系定型工具的類別 maml 學習工具規格物件。

備註

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

作者

Microsoft Corporation Microsoft Technical Support

參考資料

Wikipedia: Random forest

Quantile regression forest

From Stumps to Trees to Forests

另請參閱

rxFastTreesrxFastLinearrxLogisticRegressionrxNeuralNetrxOneClassSvmfeaturizeTextcategoricalcategoricalHashrxPredict.mlModel

範例


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

 # Create text file with per-instance results using rxPredict
 txtOutFile <- tempfile(pattern = "scoreOut", fileext = ".txt")
 txtOutDS <- RxTextData(file = txtOutFile)
 scoreDS <- rxPredict(forestModel, data = infert1,
    extraVarsToWrite = c("isCase", "Score"), outData = txtOutDS)

 # Print the fist ten rows   
 rxDataStep(scoreDS, numRows = 10)

 # Clean-up
 file.remove(txtOutFile)

 ######################################################################
 # Estimate a regression fast forest

 # 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 Forest for train data
 rxFastForestReg <- rxFastForest(airFormula, type = "regression", 
     data = trainAir)  

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

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