rxLogisticRegression:邏輯斯回歸

機器學習邏輯斯迴歸

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/2d/2與 之間。 預設值為 0,這表示所有權重都初始化為 0

maxIterations

設定最大迭代次數。 完成此步驟數後,即使未滿足收斂條件,演算法也會停止。

showTrainingStats

指定 TRUE 以顯示訓練資料與訓練模型的統計量;否則, FALSE。 預設值為 FALSE。 欲了解更多模型統計資訊,請參閱 summary.mlModel

sgdInitTol

設為大於0的數值,以使用隨機梯度下降法(SGD)來尋找初始參數。 非零值集合指定 SGD 用來判定收斂性的容差。 預設值是 0 指定不使用 SGD。

trainThreads

訓練模型時使用執行緒數量。 這應該設定為機器上的核心數量。 請注意,L-BFGS 多執行緒嘗試將資料集載入記憶體。 若出現記憶體不足問題,請設定 trainThreads 為 以 1 關閉多執行緒。 如果 NULL 執行緒數量是內部決定的。 預設值為 NULL

denseOptimizer

TRUE,則會強制內部優化向量的密度化。 若 FALSE,則可依其判斷使用稀疏或密集的內部狀態。 設定 denseOptimizerTRUE 需要內部優化器使用密集的內部狀態,這可能有助於減輕某些較大問題的垃圾回收器負載。

normalize

指定所使用的自動正規化類型:

  • "auto":若需要正規化,則會自動執行。 這是預設的選擇。
  • "no":不進行正規化。
  • "yes":進行正規化。
  • "warn":若需要正規化,會顯示警告訊息,但不會執行正規化。
    正規化將不同資料範圍重新縮放到標準尺度。 特徵縮放確保資料點間距離成比例,並使梯度下降等各種優化方法能更快收斂。 若進行 MaxMin 正規化,則使用正規化器。 它在區間 [a, b] 內正規化,其中 -1 <= a <= 00 <= b <= 1b - a = 1。 此正規化器透過將零映射到零來保持稀疏性。

mlTransforms

指定一份 MicrosoftML 轉換清單,在訓練 NULL 前或不執行轉換時,對資料執行。 請參閱 featurizeTextcategoricalcategoricalHash,了解支援的轉換。 這些轉換會在任一指定的 R 轉換後執行。 預設值為 NULL

mlTransformVars

指定一個變數名稱的字元向量,mlTransformsNULL若不使用變數名稱。 預設值為 NULL

rowSelection

指定資料集中的列(觀察值),模型將使用資料集中的邏輯變數名稱(引號內)或使用資料集中變數的邏輯表達式。 例如, rowSelection = "old" 只使用變數 old 值為 TRUE的觀測值。 rowSelection = (age > 20) & (age < 65) & (log(income) > 10)僅使用變數值age介於20至65之間且變數值logincome大於10的觀測值。 列選擇是在處理任何資料轉換後執行的(參見參數 transformstransformFunc)。 如同所有表達式, rowSelection 可以在函式呼叫之外使用 表達式函式來定義。

transforms

代表第一輪變數轉換的表達 list(name = expression, ``...) 式。 與所有表達式一樣, transforms (或 rowSelection)可以在函式呼叫之外,使用表達式函式來定義。

transformObjects

一個命名的清單,包含可被 transformstransformsFuncrowSelection和 所引用的物件。

transformFunc

變數轉換函數。 詳情請參見 rxTransform。

transformVars

一個用於轉換函數所需的輸入資料集變數的字元向量。 詳情請參見 rxTransform。

transformPackages

一個字元向量,指定額外的 R 套件(除 在 中 rxGetOption("transformPackages")指定的外)可供並預載,用於變數轉換函數。 例如,那些在 RevoScaleR 函式中透過其 transformstransformFunc 參數明確定義的,或是透過其 formularowSelection 參數隱含定義的。 transformPackages參數也可能為 NULL,表示外部沒有rxGetOption("transformPackages")套件被預先載入。

transformEnvir

一個由使用者定義的環境,作為所有內部開發環境的父環境,並用於變量資料轉換。 若 transformEnvir = NULL,則會使用帶有父 baseenv() 節點的新「雜湊」環境。

blocksPerRead

指定從資料來源讀取的每一塊資料要讀取的區塊數量。

reportProgress

一個整數值,用來指定對資料列處理進度的報告層級:

  • 0:沒有進展報告。
  • 1:已處理的列數會被列印並更新。
  • 2:處理的行數及時間報告。
  • 3:列數已處理,所有時間點都會被報告。

verbose

一個整數值,用來指定想要輸出的量。 若 0,則計算過程中不會印出冗長輸出。 整數值 來自 14 提供越來越多的資訊。

computeContext

設定計算執行的上下文,並以有效的 RxComputeContext 指定。 目前支援本地及 RxInSqlServer 運算環境。

ensemble

集合的控制參數。

...

額外的參數則直接傳達給 Microsoft Compute Engine。

詳細資料

邏輯迴歸是一種分類方法,用來根據類別依變數與一個或多個假設具有邏輯斯分布的自變數的關係來預測其價值。 若依變數只有兩個可能值(成功/失敗),則邏輯迴歸為二元。 若依變數有超過兩個可能值(根據診斷測試結果的血型),則邏輯迴歸為多項式迴歸。

rxLogisticRegression 優化技術為有限記憶體 Broyden-FletcherGoldfarb-Shanno(L-BFGS)。 L-BFGS 與一般 BFGS 演算法皆使用準牛頓方法來估計牛頓方法中計算密集的 Hessian 矩陣,該方程式用於計算步數。 但 L-BFGS 近似只使用有限的記憶體來計算下一步方向,因此特別適用於變數數量眾多的問題。 參數 memorySize 指定了過去位置和梯度的數量,用於計算下一步。

此學習者可使用彈性淨正則化:L1(套索)與L2(脊)正則化的線性組合。 正則化是一種方法,透過施加限制來補充資料,並防止過度擬合,懲罰極端係數值的模型,使問題更易處理。 這能透過選擇偏差與變異權衡中的最佳複雜度,提升所學模型的推廣性。 正則化的原理是將與係數值相關的懲罰加到假設的誤差上。 極端係數的準確模型會受到較多懲罰,而較保守的模型則較少。 L1 和 L2 正則化在某些方面具有不同的效果和用途,且在某些方面是互補的。

l1Weight:可用於稀疏模型,特別是在處理高維資料時。 它會拉取相對不重要的小權重特徵,指向 0。

l2Weight:對於非稀疏的資料來說更為理想。 它會把很大的重量拉向零。

將脊線懲罰加到正則化上,可以克服部分套索
限制。 例如,當預測因子數量超過樣本數時,它能提升預測準確度。 若 x = l1Weighty = l2Weightax + by = c 則定義正則化項的線性張成。 x 和 y 的預設值都是 1。 積極的正則化會因排除重要變數而損害預測能力。 因此,選擇正則化參數的最佳值對邏輯迴歸模型的效能非常重要。

價值觀

rxLogisticRegression:一個 rxLogisticRegression 帶有訓練模型的物件。

LogisticReg:Logistic Reg 培訓器學習者分類物件 maml

Notes

當(多執行緒)時,此演算法會嘗試將整個資料集載入記憶體 trainThreads > 1

作者 ()

Microsoft 公司Microsoft Technical Support

References

Wikipedia: L-BFGS

regression

Training of L1-Regularized Log-Linear Models

and L2 Regularization for Machine Learning

參見

rxFastTreesrxFastForestrxFastLinearrxNeuralNetrxOneClassSvmfeaturizeTextcategorical、categoricalHashrxPredict.mlModel

Examples


 # 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,]