rxFastLinear: 高速線形モデル -- 確率的双対座標上昇法

線形二項分類および回帰用の確率的双対座標上昇法 (SDCA) 最適化トレーナー。

rxFastLinear は、凸目的関数の最先端の最適化手法である、確率的双対座標上昇 (SDCA) 法に基づくトレーナーです。 マルチスレッドをサポートする半非同期の実装により、大規模なメモリ不足データセットでの使用に合わせてアルゴリズムをスケーリングできます。 別個のスレッドでのプライマルとデュアルの更新。 損失関数の複数の選択肢も用意されています。 SDCA 手法は、ロジスティック回帰アルゴリズムと SVM アルゴリズムの最良のプロパティと機能のいくつかを組み合わせたものです。 SDCA の詳細については、リファレンス セクションにある参照先を参照してください。

確率的勾配降下法 (SGD) などの従来の最適化アルゴリズムは、経験損失関数を直接最適化します。 SDCA はそうではなく、双対問題を最適化する別のアプローチを選択します。 双対損失関数は、例ごとの重みによってパラメーター化されます。 各反復において、トレーニング データ セットからトレーニング例が読み取られると、対応する例の重みが調整され、現在の例に対して双対損失関数が最適化されます。 さまざまな勾配降下法で必要とされるステップ サイズを特定するための学習率は、SDCA には必要ありません。

現在、rxFastLinear によって、対数損失、ヒンジ損失、平滑化されたヒンジ損失という 3 種類の損失関数を使用した二項分類がサポートされています。 線形回帰は、二乗損失関数でもサポートされています。 エラスティック ネット型の正則化は、l2Weight および l1Weight パラメーターによって指定できます。 l2Weight が収束率に影響することに注意してください。 一般に、l2Weight が大きいほど、SDCA の収束が高速になります。

rxFastLinear は確率的なストリーミング最適化アルゴリズムであることに注意してください。 結果はトレーニング データの順序によって異なります。 再現可能な結果を得るには、shuffleFALSE に、trainThreads1 に設定することをお勧めします。

使用方法

  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 を指定します。 サポートされている変換については、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 コンピューティング エンジンに直接渡される追加の引数。

rxFastLinear: トレーニング済みモデルが格納されている rxFastLinear オブジェクト。

FastLinear: 高速線形トレーナーに対する maml クラスの学習器仕様オブジェクト。

メモ

このアルゴリズムはマルチスレッドであり、データ セット全体をメモリに読み込もうとはしません。

作成者

Microsoft Corporation Microsoft Technical Support

リファレンス

Scaling Up Stochastic Dual Coordinate Ascent

Stochastic Dual Coordinate Ascent Methods for Regularized Loss Minimization

こちらもご覧ください

logLosshingeLosssmoothHingeLosssquaredLossrxFastTreesrxFastForestrxLogisticRegressionrxNeuralNetrxOneClassSvmfeaturizeTextcategoricalcategoricalHashrxPredict.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)