microsoftml.rx_fast_linear:帶有隨機雙座標上升的線性模型

使用量

microsoftml.rx_fast_linear()

說明

一個隨機雙座標上升(SDCA)線性二元分類與迴歸優化訓練器。

詳細資料

rx_fast_linear 是基於隨機雙座標上升(SDCA)方法的訓練器,這是一種針對凸目標函數的先進優化技術。 由於其半非同步實作並支援多執行緒,該演算法可擴展用於大型記憶體外資料集。 收斂的基礎是透過定期強制在獨立執行緒中強制原始更新與雙重更新同步來支撐。 同時也提供多種損失函數選擇。 SDCA 方法結合了邏輯斯迴歸與 SVM 演算法的多項最佳特性與能力。 欲了解更多關於SDCA的資訊,請參閱參考文獻部分的引用資料。

傳統優化演算法,如隨機梯度下降(SGD),直接優化經驗損失函數。 SDCA則選擇了另一種方法,來優化對偶問題。 對偶損失函數以每個例子的權重參數化。 每次迭代中,當讀取訓練資料集的訓練範例時,對應的範例權重會被調整,使對偶損失函數相對於當前範例得到最佳化。 SDCA不需要學習率來決定步長,這與各種梯度下降方法的要求不同。

rx_fast_linear 目前支援二元分類,包含三種類型的損失函數:對數損失、鉸鏈損失及平滑鉸鏈損失。 線性迴歸也支援平方損失函數。 彈性淨正則化可用 和 l1_weight 參數來指定l2_weight。 請注意,這 l2_weight 會影響收斂率。 一般來說, 越大 , l2_weightSDCA 收斂速度越快。

請注意,這是一個 rx_fast_linear 隨機且串流優化的演算法。 結果取決於訓練資料的順序。 為了可重現結果,建議將 設 shuffleFalse ,且 train_threads1

論點

公式

revoscalepy.rx_formula 中描述的公式。 互動術語 和 F() 目前在 microsoftml 中不支援。

資料

一個資料來源物件或指定 .xdf 檔案或資料框架物件的字串。

方法

以字串指定模型類型: "binary" 預設二元分類或 "regression" 線性迴歸。

loss_function

指定以優化的經驗損失函數。 二元分類時,有以下選項:

  • log_loss:對數損失。 此為預設值。

  • hinge_loss:SVM鉸鏈損失。 其參數代表邊界大小。

  • smooth_hinge_loss:平滑的鉸鏈損失。 其參數代表平滑常數。

對於線性迴歸,目前支援平方損失 squared_loss 。 當此參數設為 None 時,其預設值取決於學習類型:

以下範例將loss_function改為 hinge_lossrx_fast_linear(..., loss_function=hinge_loss())

l1_weight

指定 L1 正則化權重。 該值必須是非負或 為 None。 若指定 為 None ,實際值會根據資料集自動計算。 預設值為「無」。

l2_weight

指定 L2 正則化權重。 該值必須是非負或 為 None。 若指定 為 None ,實際值會根據資料集自動計算。 預設值為「無」。

train_threads

指定可用多少個並行執行緒來執行演算法。 當此參數設為 時,執行緒數量會根據程序可用的邏輯處理器數量及資料稀疏度決定。 設定為 在 1 單一執行緒中執行演算法。

convergence_tolerance

指定作為收斂標準的容忍閾值。 必須介於0到1之間。 預設值為 0.1。 若相對對偶性差距(即對偶缺口與原始損失的比值)低於指定的收斂容差,則該演算法被視為收斂。

max_iterations

指定訓練迭代次數的上限。 此參數必須為正或 為無。 若指定 為 None ,實際值會根據資料集自動計算。 每次迭代都需要完整地處理訓練資料。 訓練在迭代總數達到指定上限或損失函數收斂時結束,以較早者為準。

隨機播放

指定是否要洗牌訓練資料。 設定 True 為洗牌資料; False 不是洗牌。 預設值為 True。 SDCA 是一種隨機優化演算法。 如果開啟洗牌,訓練資料會在每次迭代中重新洗牌。

check_frequency

計算損失函數後的迭代次數,並檢查是否收斂。 指定的值必須是正整數或 為無。 若 為 None,則根據資料集自動計算實際值。 否則,例如若 checkFrequency = 5 指定 ,則計算損失函數,每 5 次迭代檢查收斂性。 損失函數的計算需要對訓練資料進行一次獨立的完整處理。

正常化

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

  • "Auto":若需要正規化,則會自動執行。 這是預設的選擇。

  • "No":不進行正規化。

  • "Yes":進行正規化。

  • "Warn":若需要正規化,會顯示警告訊息,但不會執行正規化。

正規化將不同資料範圍重新縮放到標準尺度。 特徵縮放確保資料點間距離成比例,並使梯度下降等各種優化方法能更快收斂。 若進行 MaxMin 正規化,則使用正規化器。 它在區間 [a, b] 內正規化,其中 -1 <= a <= 00 <= b <= 1b - a = 1。 此正規化器透過將零映射到零來保持稀疏性。

ml_transforms

指定一份在訓練前要對資料執行的 MicrosoftML 轉換清單,或是「若不執行轉換則 」。 參見 featurize_textcategoricalcategorical_hash和 ,以了解支援的轉換。 這些轉換會在指定的 Python 轉換後執行。 預設值是 None

ml_transform_vars

指定一個變數名稱的字元向量, ml_transforms 若不使用變數名稱,則指定為 None 。 預設值是 None

row_selection

不支援。 指定資料集中的列(觀察值),模型將使用資料集中的邏輯變數名稱(引號內)或使用資料集中變數的邏輯表達式。 例如:

  • row_selection = "old" 僅使用變數 old 值為 True的觀測值。

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10)僅使用變數值age介於20至65之間且變數值logincome大於10的觀測值。

列選擇是在處理任何資料轉換後執行的(參見參數 transformstransform_function)。 與所有表達式一樣, row_selection 可以在函 expression 式呼叫之外使用函式定義。

變換

不支援。 代表第一輪變數轉換的表達式。 與所有表達式一樣, transforms (或 row_selection)可以在函式呼叫之外使用函 expression 式定義。

transform_objects

不支援。 一個命名的清單,包含可被 transformstransform_functionrow_selection和 所引用的物件。

transform_function

變數轉換函數。

transform_variables

一個用於轉換函數所需的輸入資料集變數的字元向量。

transform_packages

不支援。 一個字元向量,指定額外 Python 套件(除 在 中 RxOptions.get_option("transform_packages")指定的套件外)可供並預載,用於變數轉換函數。 例如,在 revoscalepy 函式中透過其 transformstransform_function 參數明確定義的函數,或是透過 their formularow_selection 參數隱含定義的函式。 transform_packages參數也可能是 None,表示外部沒有RxOptions.get_option("transform_packages")套件被預先載入。

transform_environment

不支援。 一個由使用者定義的環境,作為所有內部開發環境的父環境,並用於變量資料轉換。 若 transform_environment = None,則會使用新的「雜湊」環境,並使用父 revoscalepy.baseenv。

blocks_per_read

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

report_progress

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

  • 0:沒有進展報告。

  • 1:已處理的列數會被列印並更新。

  • 2:處理的行數及時間報告。

  • 3:列數已處理,所有時間點都會被報告。

詳細資訊

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

compute_context

設定計算執行的上下文,並以有效的 revoscalepy 指定。RxComputeContext。 目前是局部且 revoscalepy。支援 RxInSqlServer 的運算上下文。

合奏團

集合的控制參數。

Returns

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

Note

此演算法為多執行緒,不會嘗試將整個資料集載入記憶體。

References

隨機雙座標上升縮放

正則化損失最小化的隨機雙座標上升方法

二元分類範例

'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

infert = get_dataset("infert")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

infertdf = infert.as_df()
infertdf["isCase"] = infertdf.case == 1
data_train, data_test, y_train, y_test = train_test_split(infertdf, infertdf.isCase)

forest_model = rx_fast_linear(
    formula=" isCase ~ age + parity + education + spontaneous + induced ",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(forest_model, data=data_test,
                     extra_vars_to_write=["isCase", "Score"])
                     
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))

輸出:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 8064.
Auto-tuning parameters: L2 = 2.666837E-05.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 568.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.5810985
Elapsed time: 00:00:00.0084876
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0292334
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
  isCase PredictedLabel     Score  Probability
0   True           True  0.990544     0.729195
1  False          False -2.307120     0.090535
2  False          False -0.608565     0.352387
3   True           True  1.028217     0.736570
4   True          False -3.913066     0.019588

迴歸範例

'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset

attitude = get_dataset("attitude")

import sklearn
if sklearn.__version__ < "0.18":
    from sklearn.cross_validation import train_test_split
else:
    from sklearn.model_selection import train_test_split

attitudedf = attitude.as_df()
data_train, data_test = train_test_split(attitudedf)

model = rx_fast_linear(
    formula="rating ~ complaints + privileges + learning + raises + critical + advance",
    method="regression",
    data=data_train)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
                     extra_vars_to_write=["rating"])
                     
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))

輸出:

Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 68180.
Auto-tuning parameters: L2 = 0.01.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 54.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.1114324
Elapsed time: 00:00:00.0090901
Beginning processing data.
Rows Read: 8, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0330772
Finished writing 8 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds 
   rating      Score
0    71.0  72.630440
1    67.0  56.995350
2    67.0  52.958641
3    72.0  80.894539
4    50.0  38.375427

損失函數