Machine Learning ロジスティック回帰
Usage
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/2 と d/2の間で均一に分散されます。 既定値は 0 で、すべての重みが 0に初期化されることを指定します。
maxIterations
イテレーションの最大数を設定します。 このステップ数の後、アルゴリズムは収束条件を満たしていない場合でも停止します。
showTrainingStats
トレーニング データとトレーニング済みモデルの統計情報を表示する TRUE を指定します。それ以外の場合は FALSE。 既定値は FALSE です。 モデル統計に関する追加情報は summary.mlModelをご覧ください。
sgdInitTol
確率的勾配降下法 (SGD) を使用して初期パラメーターを検索するには、0 より大きい数値に設定します。 0 以外の値セットは、SGD が収束を決定するために使用する許容値を指定します。 既定値は、SGD が使用されないことを指定 0 です。
trainThreads
モデルのトレーニングに使用するスレッドの数。 これは、マシン上のコア数に設定する必要があります。 L-BFGS マルチスレッドは、データセットをメモリに読み込もうとすることに注意してください。 メモリ不足の問題が発生した場合は、 trainThreads を 1 に設定してマルチスレッドをオフにします。 もし NULL 使用すべきスレッド数は内部で決定されます。 既定値は NULL です。
denseOptimizer
TRUE場合は、内部最適化ベクトルを強制的に密度化します。
FALSE場合は、ロジスティック回帰オプティマイザーが適切に検出されたスパースまたは高密度の内部状態を使用できるようにします。
denseOptimizerをTRUEに設定するには、内部オプティマイザーが密な内部状態を使用する必要があります。これは、一部の大規模な問題でガベージ コレクターの負荷を軽減するのに役立ちます。
normalize
使用する自動正規化の種類を指定します。
-
"auto": 正規化が必要な場合は、自動的に実行されます。 これが既定の選択肢です。 -
"no": 正規化は実行されません。 -
"yes": 正規化が実行されます。 -
"warn": 正規化が必要な場合は、警告メッセージが表示されますが、正規化は実行されません。
正規化では、さまざまなデータ範囲が標準スケールに再スケーリングされます。 特徴量スケーリングは、データ ポイント間の距離が比例することを保証し、勾配降下などのさまざまな最適化方法がはるかに高速に収束できるようにします。 正規化を実行する場合は、MaxMinノーマライザーが使用されます。 値は区間[a, b]で正規化され、-1 <= a <= 0および0 <= b <= 1およびb - a = 1。 このノーマライザーは、ゼロをゼロにマッピングすることで、スパーリティを維持します。
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 の範囲で、log変数のincomeの値が 10 より大きい観測値のみを使用します。 行の選択は、データ変換を処理した後に実行されます (引数 transforms または transformFuncを参照)。 すべての式と同様に、 rowSelection は関数呼び出しの外側で式関数を用いて定義できます。
transforms
変数変換の最初のラウンドを表す list(name = expression, ``...) の形の式です。 すべての式と同様に、 transforms (または rowSelection)は関数呼び出しの外側で式関数を用いて定義できます。
transformObjects
transforms、transformsFunc、およびrowSelectionで参照できるオブジェクトを含む名前付きリスト。
transformFunc
変数変換関数。 詳細はrxTransformを参照してください。
transformVars
変換関数に必要な入力データ セット変数の文字ベクトル。 詳細はrxTransformを参照してください。
transformPackages
変数変換関数で使用するために利用可能な追加のRパッケージ( rxGetOption("transformPackages")で指定されているもの以外)を指定する文字ベクトル。 例えば、 RevoScaleR 関数で transforms や transformFunc 引数で明示的に定義されたものや、 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 Compute Engineに渡されます。
詳細情報
ロジスティック回帰は、カテゴリ依存変数の値を、ロジスティック分布があると見なされる 1 つ以上の独立変数との関係から予測するために使用される分類方法です。 従属変数に使用可能な値が 2 つしかない場合 (成功/失敗)、ロジスティック回帰は 2 項です。 従属変数に 2 つ以上の可能な値 (血液型の診断テスト結果) がある場合、ロジスティック回帰は多項式です。
rxLogisticRegressionに使用される最適化手法は、制限付きメモリ Broyden-Fletcher-Goldfarb-Shanno (L-BFGS) です。 L-BFGS アルゴリズムと通常の BFGS アルゴリズムの両方で、準ニュートン法を使用して、Newton のメソッドでステップを計算するために使用される数式で計算負荷の高いヘシアン 行列を推定します。 ただし、L-BFGS 近似では、次のステップの方向を計算するために限られた量のメモリのみが使用されるため、多数の変数の問題に特に適しています。
memorySize パラメーターは、次のステップの計算で使用するために格納する過去の位置とグラデーションの数を指定します。
この学習者は、L1 (なげなわ) と L2 (リッジ) 正則化の線形組み合わせであるエラスティック ネット正則化を使用できます。 正則化は、データを補完する情報を提供し、極端な係数値でモデルを罰することでオーバーフィットを防ぐ制約を課すことで、不適切な問題をより引き起こしやすい方法です。 これにより、バイアス分散のトレードオフで最適な複雑さを選択することで、学習したモデルの一般化を向上させることができます。 正則化は、係数値に関連付けられているペナルティを仮説の誤差に追加することによって機能します。 極端な係数値を持つ正確なモデルは、より多くの罰を受けますが、より保守的な値を持つより正確でないモデルは、より少なく罰されます。 L1およびL2正則化は、特定の点で補完的である異なる効果および使用を有する。
l1Weight: 高次元データを操作する場合は、スパース モデルに適用できます。 それは比較的重要でない特徴の小さな重みを引き寄せます。
l2Weight: スパースではないデータに適しています。 大きな重りをゼロに引き寄せます。
正則化にリッジペナルティを加えることで、いくつかの投げ縄の効果が上がります
制限。 予測変数の数がサンプル サイズより大きい場合など、予測精度を向上させることができます。
x = l1Weight
y = l2Weight場合、ax + by = cは正則化項の線形スパンを定義します。 x と y の既定値はどちらも 1。 積極的な正則化は、モデルから重要な変数を除外することで予測能力に悪影響を与える可能性があります。 したがって、ロジスティック回帰モデルのパフォーマンスには、正則化パラメーターに最適な値を選択することが重要です。
価値
rxLogisticRegression:訓練済みモデルを持つ rxLogisticRegression オブジェクト。
LogisticReg: Logistic Reg Trainerのクラス maml 学習者仕様オブジェクト。
メモ
このアルゴリズムは、 trainThreads > 1 (マルチスレッド) 時にデータセット全体をメモリに読み込もうとします。
作成者
Microsoft CorporationMicrosoft Technical Support
関連項目
Training of L1-Regularized Log-Linear Models
and L2 Regularization for Machine Learning
こちらも参照ください
rxFastTrees、rxFastForest、rxFastLinear、rxNeuralNet、rxOneClassSvm、featurizeText、categorical、categoricalHash、rxPredict.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,]