rxFastForest: 高速フォレスト

Machine Learning 高速フォレスト

使用方法

  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 で記述されている式。 現在、相互作用項と F()MicrosoftML ではサポートされていません。

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 の間で、変数 incomelog の値が 10 を超える観測値のみを使用します。 行の選択は、データ変換を処理した後に実行されます (引数 transforms または transformFunc を参照してください)。 すべての式と同様に、rowSelection は、expression 関数を使用して関数呼び出しの外部で定義できます。

transforms

変数変換の最初のラウンドを表す、list(name = expression, ``...) という形式の式。 すべての式と同様に、transforms (または rowSelection) は、expression 関数を使用して関数呼び出しの外部で定義できます。

transformObjects

transformstransformsFuncrowSelection で参照できるオブジェクトを含む名前付きリスト。

transformFunc

変数変換関数。 詳細については、「rxTransform」を参照してください。

transformVars

変換関数に必要な入力データ セット変数の文字ベクトル。 詳細については、「rxTransform」を参照してください。

transformPackages

変数変換関数で使用するために事前に読み込まれる追加の R パッケージ (rxGetOption("transformPackages") で指定されているもの以外) を指定する文字ベクトル。 たとえば、transforms および transformFunc 引数を使用して RevoScaleR 関数で明示的に定義されているものや、formula または rowSelection 引数を使用して暗黙的に定義されているものなどです。 引数 transformPackages には NULL を指定することもできます。これは、rxGetOption("transformPackages") 以外のパッケージを事前に読み込まないことを示します。

transformEnvir

内部で開発され、変数データ変換に使用される、すべての環境の親として機能するユーザー定義環境。 transformEnvir = NULL の場合は、baseenv() を親とする新しい "ハッシュ" 環境が代わりに使用されます。

blocksPerRead

データ ソースから読み取るデータのチャンクごとに、読み取るブロックの数を指定します。

reportProgress

行処理の進行状況に関するレポートのレベルを指定する整数値。

  • 0: 進行状況はレポートされません。
  • 1: 処理された行の数が出力され、更新されます。
  • 2: 処理された行とタイミングがレポートされます。
  • 3: 処理された行とすべてのタイミングがレポートされます。

verbose

必要な出力の量を指定する整数値。 0 の場合、計算中に詳細は出力されません。 1 から 4 の整数値を指定すると、情報の量が増えます。

computeContext

有効な RxComputeContext で指定されている、計算が実行されるコンテキストを設定します。 現在は、ローカルと RxInSqlServer コンピューティング コンテキストがサポートされています。

ensemble

アンサンブルの制御パラメーター。

...

Microsoft コンピューティング エンジンに直接渡される追加の引数。

詳細

デシジョン ツリーは、入力に対して一連の単純なテストを実行する
ノンパラメトリック モデルです。 この決定手順では、入力が処理されているインスタンスに似ているトレーニング データセット内の出力にマップされます。 適切なリーフ ノードに到達して出力決定が返されるまで、各インスタンスをツリーの分岐を通じて再帰的にマップする類似性の尺度に基づいて、バイナリ ツリー データ構造の各ノードで決定が行われます。

デシジョン ツリーには、次のようないくつかの利点があります。

トレーニング時と予測時における計算とメモリ使用量の両方の点で効率に優れている。

非線形の決定境界を表すことができる。

統合された特徴選択と分類が行われる。

ノイズの多い特徴が存在する状況での回復性がある。

高速フォレスト回帰は、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)