rxLogisticRegression: ロジスティック回帰

Machine Learning ロジスティック回帰

使用方法

  rxLogisticRegression(formula = NULL, data, type = c("binary", "multiClass"),
    l2Weight = 1, l1Weight = 1, optTol = 1e-07, memorySize = 20,
    initWtsScale = 0, maxIterations = 2147483647, showTrainingStats = FALSE,
    sgdInitTol = 0, trainThreads = NULL, denseOptimizer = FALSE,
    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"、多項ロジスティック回帰の場合は "multi"

l2Weight

L2 正則化の重み。 値は 0 以上である必要があり、既定値は 1 に設定されます。

l1Weight

L1 正則化の重み。 値は 0 以上である必要があり、既定値は 1 に設定されます。

optTol

オプティマイザーの収束のしきい値。 イテレーション間の改善がしきい値を下回った場合に、アルゴリズムが終了して現在のモデルが返されます。 値が小さいほど低速ですが、精度は高くなります。 既定値は 1e-07 です。

memorySize

L-BFGS のメモリ サイズ。次のステップの計算用に保存する過去の位置と傾きの数を指定します。 この最適化パラメーターによって、次のステップの規模と方向の計算に使用されるメモリ量が制限されます。 指定するメモリ量を小さくすると、トレーニングにかかる時間は短縮されますが、正確さが低下します。 1 以上である必要があり、既定値は 20 です。

initWtsScale

初期重みの値の範囲を指定する初期の重みの直径を設定します。 これらの重みは、この範囲内からランダムに初期化されます。 たとえば、直径が d に指定されている場合、重みは -d/2d/2 の間で一様に分布します。 既定値は 0 で、すべての重みが 0 に初期化されることを指定します。

maxIterations

イテレーションの最大数を設定します。 この数のステップを実行すると、収束条件を満たしていなくてもアルゴリズムは停止します。

showTrainingStats

トレーニング データとトレーニング済みモデルの統計を表示する場合は TRUE、それ以外の場合は FALSE を指定します。 既定値は FALSE です。 モデルの統計の詳細については、「summary.mlModel」を参照してください。

sgdInitTol

確率的勾配降下法 (SGD) を使用して初期パラメーターを検索する場合は、0 より大きい数値に設定します。 0 以外の値を設定すると、収束を決定するために SGD で使用される許容範囲が指定されます。 既定値は 0 であり、SGD を使用しないことを指定します。

trainThreads

モデルのトレーニングに使用するスレッドの数。 これは、コンピューターのコア数に設定する必要があります。 L-BFGS マルチスレッドでは、データ セットをメモリに読み込もうとすることに注意してください。 メモリ不足の問題が発生した場合は、trainThreads1 に設定してマルチスレッド処理をオフにします。 NULL が指定された場合、使用するスレッドの数は内部的に決定されます。 既定値は NULL です。

denseOptimizer

TRUE の場合、内部最適化ベクターを強制的に高密度化します。 FALSE の場合、ロジスティック回帰オプティマイザーで適切と見なされたスパースまたは高密度の内部状態を使用できるようにします。 denseOptimizerTRUE に設定するには、内部オプティマイザーで高密度の内部状態を使用する必要があります。これにより、大きな問題が発生した場合に、ガベージ コレクターの負荷を軽減することができます。

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 コンピューティング エンジンに直接渡される追加の引数。

説明

ロジスティック回帰は、ロジスティック分布を持つと見なされる 1 つ以上の独立変数とのリレーションシップから、カテゴリ従属変数の値を予測するために使用される分類方法です。 従属変数に有効な値が 2 つしかない場合 (成功/失敗)、ロジスティック回帰は二項です。 従属変数に 3 つ以上の値が含まれている場合 (血液型診断テストの結果)、ロジスティック回帰は多項です。

rxLogisticRegression で使用される最適化手法は、限定メモリ Broyden-Fletcher-Goldfarb-Shanno (L-BFGS) です。 L-BFGS アルゴリズムと通常の BFGS アルゴリズムでは、どちらも準ニュートン法を使用して、ステップを計算するためにニュートン法で使用される式の中で計算量の多いヘッセ行列を推定します。 ただし、L-BFGS 近似では、限られた量のメモリのみを使用して次のステップ方向を計算します。これにより、多数の変数に関する問題に特に適しています。 memorySize パラメーターでは、次のステップの計算で使用するために保存する過去の位置と傾きの数を指定します。

この学習器では、L1 (なげなわ) と L2 (ねじ山) の正則化の線形組み合わせであるエラスティック ネット型の正則化を使用できます。 正則化とは、データを補完するための情報を提供する制約を課すことで、不適切に表現された問題を扱いやすく表示でき、極端な係数の値を備えるモデルにペナルティを与えることでオーバーフィットを防止する手法です。 これにより、バイアスと変位のトレードオフに最適な複雑さを選択して、学習したモデルの一般化を向上させることができます。 正則化は、仮説の誤りに対し、係数値に関連付けられているペナルティを加算することによって機能します。 極端な係数の値を持った正確なモデルにはより大きなペナルティが与えられる一方、相対的に値が控えめで正確でないモデルに与えられるペナルティは小さくなります。 L1 と L2 の正則化には、特定の点で補完的に使用されるさまざまな効果と用途があります。

l1Weight: 高次元のデータを扱う際に、疎なモデルに適用できます。 比較的重要ではない特徴に関連する小さな重みを 0 に引き寄せます。

l2Weight: スパースでないデータに適しています。 大きな重みを 0 に引き寄せます。

ねじ山のペナルティを正則化に追加すると、いくらかのなげなわの
制限が解消されます。 たとえば予測子の数がサンプル サイズを超える場合などに、予測精度を向上させることができます。 x = l1Weight かつ y = l2Weight である場合、正則化項の線形包が ax + by = c で定義されます。 x と y の既定値は両方とも 1 です。 積極的な正則化では、モデルから重要な変数を除外することで予測能力に悪影響を与える可能性があります。 そのため、ロジスティック回帰モデルのパフォーマンスを向上させるために、正則化パラメーターに最適な値を選択することが重要です。

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

LogisticReg: ロジスティック回帰トレーナーに対する maml クラスの学習器仕様オブジェクト。

メモ

このアルゴリズムでは、trainThreads > 1 (マルチスレッド) の場合、データ セット全体をメモリに読み込もうとします。

作成者

Microsoft Corporation Microsoft Technical Support

リファレンス

Wikipedia: L-BFGS

regression

Training of L1-Regularized Log-Linear Models

and L2 Regularization for Machine Learning

こちらもご覧ください

rxFastTreesrxFastForestrxFastLinearrxNeuralNetrxOneClassSvmfeaturizeTextcategoricalcategoricalHashrxPredict.mlModel

使用例


 # Estimate a logistic regression model
 logitModel <- rxLogisticRegression(isCase ~ age + parity + education + spontaneous + induced,
                   transforms = list(isCase = case == 1),
                   data = infert)
 # Print a summary of the model
 summary(logitModel)

 # Score to a data frame
 scoreDF <- rxPredict(logitModel, 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)

 #######################################################################################
 # Multi-class logistic regression  
 testObs <- rnorm(nrow(iris)) > 0
 testIris <- iris[testObs,]
 trainIris <- iris[!testObs,]
 multiLogit <- rxLogisticRegression(
     formula = Species~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
     type = "multiClass", data = trainIris)

 # Score the model
 scoreMultiDF <- rxPredict(multiLogit, data = testIris, 
     extraVarsToWrite = "Species")    
 # Print the first rows of the data frame with scores
 head(scoreMultiDF)
 # Look at confusion matrix
 table(scoreMultiDF$Species, scoreMultiDF$PredictedLabel)

 # Look at the observations with incorrect predictions
 badPrediction = scoreMultiDF$Species != scoreMultiDF$PredictedLabel
 scoreMultiDF[badPrediction,]