rxFastLinear: 高速線形モデル -- 確率的双対座標上昇法
線形二項分類および回帰用の確率的双対座標上昇法 (SDCA) 最適化トレーナー。
rxFastLinear
は、凸目的関数の最先端の最適化手法である、確率的双対座標上昇 (SDCA) 法に基づくトレーナーです。 マルチスレッドをサポートする半非同期の実装により、大規模なメモリ不足データセットでの使用に合わせてアルゴリズムをスケーリングできます。
別個のスレッドでのプライマルとデュアルの更新。 損失関数の複数の選択肢も用意されています。 SDCA 手法は、ロジスティック回帰アルゴリズムと SVM アルゴリズムの最良のプロパティと機能のいくつかを組み合わせたものです。
SDCA の詳細については、リファレンス セクションにある参照先を参照してください。
確率的勾配降下法 (SGD) などの従来の最適化アルゴリズムは、経験損失関数を直接最適化します。 SDCA はそうではなく、双対問題を最適化する別のアプローチを選択します。 双対損失関数は、例ごとの重みによってパラメーター化されます。 各反復において、トレーニング データ セットからトレーニング例が読み取られると、対応する例の重みが調整され、現在の例に対して双対損失関数が最適化されます。 さまざまな勾配降下法で必要とされるステップ サイズを特定するための学習率は、SDCA には必要ありません。
現在、rxFastLinear
によって、対数損失、ヒンジ損失、平滑化されたヒンジ損失という 3 種類の損失関数を使用した二項分類がサポートされています。
線形回帰は、二乗損失関数でもサポートされています。 エラスティック ネット型の正則化は、l2Weight
および l1Weight
パラメーターによって指定できます。 l2Weight
が収束率に影響することに注意してください。 一般に、l2Weight
が大きいほど、SDCA の収束が高速になります。
rxFastLinear
は確率的なストリーミング最適化アルゴリズムであることに注意してください。 結果はトレーニング データの順序によって異なります。 再現可能な結果を得るには、shuffle
を FALSE
に、trainThreads
を 1
に設定することをお勧めします。
使用方法
rxFastLinear(formula = NULL, data, type = c("binary", "regression"),
lossFunction = NULL, l2Weight = NULL, l1Weight = NULL,
trainThreads = NULL, convergenceTolerance = 0.1, maxIterations = NULL,
shuffle = TRUE, checkFrequency = NULL, normalize = "auto",
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 = 1,
computeContext = rxGetOption("computeContext"),
ensemble = ensembleControl(), ...)
引数
formula
rxFormula で記述されている式。 現在、相互作用項と F()
は MicrosoftML ではサポートされていません。
data
.xdf ファイルまたはデータ フレーム オブジェクトを指定するデータ ソース オブジェクトまたは文字列。
type
文字列を使用してモデルの種類を指定します: 既定の二項分類の場合は "binary"
、または線形回帰の場合は "regression"
。
lossFunction
最適化する経験損失関数を指定します。 二項分類の場合、次の選択肢があります。
- logLoss: 対数損失。 既定値です。
- hingeLoss: SVM ヒンジ損失。 このパラメーターは、マージン サイズを表します。
- smoothHingeLoss: 平滑化されたヒンジ損失。 このパラメーターは、平滑化定数を表します。
線形回帰では、二乗損失 squaredLoss が現在サポートされています。 このパラメーターがNULL
に設定されている場合、既定値は学習の種類によって異なります。 - 二項分類の場合は logLoss。
- 線形回帰の場合は squaredLoss。
l2Weight
L2 正則化の重みを指定します。 この値は、負以外または NULL
とする必要があります。 NULL
を指定した場合、実際の値はデータ セットに基づいて自動的に計算されます。 既定値は NULL
です。
l1Weight
L1 正則化の重みを指定します。 この値は、負以外または NULL
とする必要があります。 NULL
を指定した場合、実際の値はデータ セットに基づいて自動的に計算されます。 既定値は NULL
です。
trainThreads
アルゴリズムを実行するために使用できる同時実行スレッドの数を指定します。 このパラメーターが NULL
に設定されている場合、使用されるスレッドの数は、プロセスで使用できる論理プロセッサの数と、データの密度に基づいて決定されます。 アルゴリズムを 1 つのスレッドで実行するには、1
に設定します。
convergenceTolerance
収束条件として使用される許容しきい値を指定します。 0 から 1 の範囲である必要があります。 既定値は 0.1
です。 このアルゴリズムは、相対的な双対ギャップ (双対ギャップとプライマル損失の間の比率) が指定した収束許容値を下回った場合に、収束していると見なされます。
maxIterations
トレーニングの反復数の上限を指定します。 このパラメーターは正の値または NULL
にする必要があります。 NULL
を指定した場合、実際の値はデータ セットに基づいて自動的に計算されます。 反復のたびにトレーニング データを完全に渡す必要があります。 反復の合計数が指定した上限に達した後、または損失関数が収束したときのいずれか早い方でトレーニングが終了します。
shuffle
トレーニング データをシャッフルするかどうかを指定します。 データをシャッフルするには TRUE
、シャッフルしない場合は FALSE
を設定します。 既定値は TRUE
です。 SDCA は確率的最適化アルゴリズムです。 シャッフルがオンになっている場合、反復のたびにトレーニング データがシャッフルされます。
checkFrequency
損失関数が計算され、収束したかどうかを判断するためにチェックされるまでの反復回数。 正の整数または NULL
を値として指定する必要があります。 NULL
の場合、実際の値はデータ セットに基づいて自動的に計算されます。 それ以外の場合、たとえば checkFrequency = 5
を指定すると、5 回反復するごとに損失関数が計算され、収束がチェックされます。 損失関数の計算のためには、個別にトレーニング データを完全に渡す必要があります。
normalize
使用される自動正規化の種類を指定します。
"auto"
: 正規化が必要な場合は、自動的に実行されます。 これが既定値です。"no"
: 正規化は実行されません。"yes"
: 正規化が実行されます。"warn"
: 正規化が必要な場合は警告メッセージが表示されますが、正規化は実行されません。
正規化では、異なるデータ範囲が標準スケールに再スケーリングされます。 特徴のスケーリングにより、データ ポイント間の距離が比例し、勾配降下などのさまざまな最適化方法がはるかに高速に収束するようになります。 正規化が実行される場合は、MaxMin
ノーマライザーが使用されます。 区間 [a, b] で値を正規化します。ただし、-1 <= a <= 0
かつ0 <= b <= 1
かつb - a = 1
です。 このノーマライザーでは、0 から 0 にマッピングすることで、低密度を維持します。
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 コンピューティング エンジンに直接渡される追加の引数。
値
rxFastLinear
: トレーニング済みモデルが格納されている rxFastLinear
オブジェクト。
FastLinear
: 高速線形トレーナーに対する maml
クラスの学習器仕様オブジェクト。
メモ
このアルゴリズムはマルチスレッドであり、データ セット全体をメモリに読み込もうとはしません。
作成者
Microsoft Corporation Microsoft Technical Support
リファレンス
Scaling Up Stochastic Dual Coordinate Ascent
Stochastic Dual Coordinate Ascent Methods for Regularized Loss Minimization
こちらもご覧ください
logLoss、hingeLoss、smoothHingeLoss、squaredLoss、rxFastTrees、rxFastForest、rxLogisticRegression、rxNeuralNet、rxOneClassSvm、featurizeText、categorical、categoricalHash、rxPredict.mlModel。
使用例
# Train a binary classiication model with rxFastLinear
res1 <- rxFastLinear(isCase ~ age + parity + education + spontaneous + induced,
transforms = list(isCase = case == 1),
data = infert,
type = "binary")
# Print a summary of the model
summary(res1)
# Score to a data frame
scoreDF <- rxPredict(res1, data = infert,
extraVarsToWrite = "isCase")
# Compute and plot the Radio Operator Curve and AUC
roc1 <- rxRoc(actualVarName = "isCase", predVarNames = "Probability", data = scoreDF)
plot(roc1)
rxAuc(roc1)
#########################################################################
# rxFastLinear Regression
# Create an xdf file with the attitude data
myXdf <- tempfile(pattern = "tempAttitude", fileext = ".xdf")
rxDataStep(attitude, myXdf, rowsPerRead = 50, overwrite = TRUE)
myXdfDS <- RxXdfData(file = myXdf)
attitudeForm <- rating ~ complaints + privileges + learning +
raises + critical + advance
# Estimate a regression model with rxFastLinear
res2 <- rxFastLinear(formula = attitudeForm, data = myXdfDS,
type = "regression")
# Score to data frame
scoreOut2 <- rxPredict(res2, data = myXdfDS,
extraVarsToWrite = "rating")
# Plot the rating versus the score with a regression line
rxLinePlot(rating~Score, type = c("p","r"), data = scoreOut2)
# Clean up
file.remove(myXdf)