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
を指定します。 サポートされている変換については、featurizeText、categorical、categoricalHash に関する記事を参照してください。 これらの変換は、指定された 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 を超える観測値のみを使用します。 行の選択は、データ変換を処理した後に実行されます (引数 transforms
または transformFunc
を参照してください)。 すべての式と同様に、rowSelection
は、expression 関数を使用して関数呼び出しの外部で定義できます。
transforms
変数変換の最初のラウンドを表す、list(name = expression, ``...)
という形式の式。 すべての式と同様に、transforms
(または rowSelection
) は、expression 関数を使用して関数呼び出しの外部で定義できます。
transformObjects
transforms
、transformsFunc
、rowSelection
で参照できるオブジェクトを含む名前付きリスト。
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.
こちらもご覧ください
rxFastForest、rxFastLinear、rxLogisticRegression、rxNeuralNet、rxOneClassSvm、featurizeText、categorical、categoricalHash、rxPredict.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)