分享方式:


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 中所說明的公式。 MicrosoftML 目前不支援互動字詞和 F()

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,則會讓羅吉斯迴歸最佳化工具視需要使用疏鬆或密集的內部狀態。 將 denseOptimizer 設定為 TRUE 需要內部最佳化工具使用密集的內部狀態,這有助於減輕一些較大問題的記憶體回收行程負載。

normalize

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

  • "auto":如果需要正規化,會自動執行。 這是預設選項。
  • "no":不執行正規化。
  • "yes":執行正規化。
  • "warn":如果需要正規化,則會顯示警告訊息,但是不會執行正規化。
    正規化會將不同的資料範圍重新調整為標準規模。 特徵擴縮可確保資料點之間的距離成比例,並使各種最佳化方法 (例如梯度下降) 能夠更快收斂。 如果執行正規化,會使用 MaxMin 正規化程式。 其會在間隔 [a, b] 中將數值正規化,其中 -1 <= a <= 00 <= b <= 1 以及 b - a = 1。 此正規化程式會藉由將零對應至零來保留稀疏性。

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 之間且 income 變數 log 值大於 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 的額外引數。

詳細資料

羅吉斯迴歸是一種分類方法,可從其關聯性,到假設有羅吉斯分佈的一或多個獨立變數,預測類別相依變數的值。 若相依變數只有兩個可能的值 (成功/失敗),則羅吉斯迴歸為二元。 若相依變數具有兩個以上可能的值 (診斷測試結果給出的血型),則羅吉斯迴歸為多元。

限定記憶體 Broyden-Fletcher-Goldfarb-Shanno (L-BFGS) 是最適合 rxLogisticRegression 使用的技術。 L-BFGS 和一般 BFGS 演算法都使用 quasi-Newtonian 方法,估算 Newton 方法計算步驟時所用之方程式中密集計算的 Hessian 矩陣。 但 L-BFGS 近似值只會使用限定的記憶體數量計算下一個步驟方向,因此特別適合變數數量多的問題。 memorySize 參數可指定要儲存供計算下一個步驟時使用的通過位置和梯度數量。

此學習模組可以使用彈性網路正規化:L1 (lasso) 和 L2 (ridge) 正規化的線性組合。 正規化是一種方法,可藉由強制條件約束提供資訊來補充資料,並利用極端係數值避免模型過度學習,讓不良的問題變得容易處理。 這可藉由選取偏差方差權衡中的最佳複雜度,來改善所學習模型的一般化。 正規化的運作方式是將假設錯誤加上係數值相關聯的懲罰。 具有極端係數值的精確模型會受到較多懲罰,而具有較保守值的不精確模型受到較少懲罰。 L1 和 L2 正規化有不同的效果,而且在某些方面是互補的用法。

l1Weight:使用高維度資料時,可以套用到疏鬆的模型。 會提取相對不重要到 0 的小型權數相關聯特徵。

l2Weight:不疏鬆資料的建議選項。 會提取大型權數至零。

在正規化中新增 ridge 懲罰,可克服一些 lasso 的
限制。 例如,當預測值數目大於樣本大小時,可以改善其預測精確度。 若是 x = l1Weighty = 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,]