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

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 の間で、変数 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 は FastRank の実装です。 FastRank は、MART 勾配ブースティング アルゴリズムの効率的な実装です。 勾配ブースティングは、回帰問題のための機械学習手法です。 事前定義された損失関数を使用して各段階のエラーを計測し、次の段階でそれを修正するという方法で各回帰ツリーを段階的に構築します。 したがって、この予測モデルは実際、弱い予測モデルのアンサンブルになります。 回帰の問題では、ブースティングによってこのような一連のツリーが段階的に構築され、任意の微分可能な損失関数を使用して最適なツリーが選択されます。

MART では回帰ツリーのアンサンブルを学習します。これは、そのリーフにスカラー値を持つデシジョン ツリーです。 デシジョン (または回帰) ツリーはバイナリ ツリーのようなフロー チャートです。内部の各ノードで、入力されたいずれかの特徴の値に基づいて、2 つの子ノードのうちでいずれを継続するかを決定します。 各リーフ ノードでは、値が返されます。 内部ノードで、意思決定は、テスト "x <= v" に基づいて行われます。ここで、x は入力サンプルの特徴の値で、v はこの特徴の有効な値の 1 つです。 回帰ツリーによって生成することができる関数はすべて区分的定数関数です。

ツリーのアンサンブルは、損失関数の勾配に近似する回帰ツリーを各ステップで計算し、それを新しいツリーの損失を最小限に抑える係数を付けて前のツリーに追加することで生成されます。 特定のインスタンスで 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)