rxFastLinear:快速線性模型 -- 隨機雙座標上升
適用於線性二元分類及迴歸的隨機雙座標上升 (SDCA) 最佳化定型器。
rxFastLinear
是以隨機雙座標上升 (SDCA) 方法為基礎的定型器,這是適用於凸面目標函數的最新最佳化技術。 由於支援多執行緒的半非同步實作,可調整演算法以用於大型記憶體不足資料集。
不同執行緒中的原始和雙重更新。 也提供數個損失函數的選擇。 SDCA 方法結合了羅吉斯迴歸和 SVM 演算法的數個最佳屬性和功能。
如需 SDCA 的詳細資訊,請參閱參考區段中的引文。
傳統最佳化演算法,例如隨機梯度下降 (SGD),是直接將經驗損失函數最佳化。 SDCA 則選擇將雙重問題最佳化的不同方法。 雙重損失函數會由個別範例權數進行參數化。 在每個反覆項目中,讀取定型資料集的定型範例時,會調整對應的範例權數,以便針對目前範例進行雙重損失函數的最佳化。 SDCA 不需學習速率即可判斷各種梯度下降方法所需的步驟大小。
rxFastLinear
目前支援三種損失函數的二元分類:記錄遺失、轉軸遺失和平滑轉軸遺失。
線性迴歸也支援平方損失函數。 彈性網路正規化可由 l2Weight
和 l1Weight
參數指定。 請注意,l2Weight
會影響聚合率。 一般而言,l2Weight
愈大,SDCA 就會愈快聚合。
請注意,rxFastLinear
是隨機和串流最佳化演算法。 其結果取決於定型資料的順序。 若要可重現的結果,建議將 shuffle
設定為 FALSE
,並將 trainThreads
設定為 1
。
使用方式
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 中所述的公式。 MicrosoftML 目前不支援互動字詞及 F()
。
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
,以在單一執行緒中執行演算法。
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
。 此正規化程式會藉由將零對應至零來保留稀疏性。
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 之間且 income
變數 log
值大於 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 的額外引數。
值
rxFastLinear
:具有定型模型的 rxFastLinear
物件。
FastLinear
:適用於快速線性定型器的 maml
學習工具規格物件類別。
備註
此演算法為多執行緒,不會嘗試將整個資料集載入記憶體中。
作者
Microsoft Corporation Microsoft Technical Support
參考資料
Scaling Up Stochastic Dual Coordinate Ascent
Stochastic Dual Coordinate Ascent Methods for Regularized Loss Minimization
另請參閱
logLoss, hingeLoss, smoothHingeLoss, squaredLoss, rxFastTrees, rxFastForest, rxLogisticRegression, rxNeuralNet, rxOneClassSvm, featurizeText, categorical, categoricalHash, rxPredict.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)