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

使用方式

microsoftml.rx_fast_linear()

Description

適用於線性二元分類與迴歸的隨機對偶梯度上升 (SDCA) 最佳化定型器。

詳細資料

rx_fast_linear 是以隨機對偶梯度上升 (SDCA) 法為基礎的定型器,這是適用於凸目標函數的最新最佳化技術。 由於支援多執行緒的半非同步實作,可調整此演算法以用於記憶體不足的大型資料集。 透過在個別執行緒中定期於主要更新與對偶更新之間強制進行同步處理來保證收斂。 同時也提供數個損失函數的選項。 SDCA 方法結合了羅吉斯迴歸和 SVM 演算法的數個最佳屬性和功能。 如需 SDCA 的詳細資訊,請參閱參考區段中的引文。

傳統最佳化演算法,例如隨機梯度下降 (SGD),是直接將經驗損失函數最佳化。 SDCA 則選擇將雙重問題最佳化的不同方法。 雙重損失函數會由個別範例權數進行參數化。 在每個反覆項目中,讀取定型資料集的定型範例時,會調整對應的範例權數,以便針對目前範例進行雙重損失函數的最佳化。 SDCA 不需學習速率即可判斷各種梯度下降方法所需的步驟大小。

rx_fast_linear 目前支援三種損失函數的二元分類:記錄遺失、轉軸遺失和平滑轉軸遺失。 線性迴歸也支援平方損失函數。 彈性網路正規化可由 l2_weightl1_weight 參數指定。 請注意,l2_weight 會影響聚合率。 一般而言,l2_weight 愈大,SDCA 就會愈快聚合。

請注意,rx_fast_linear 是一種隨機和串流最佳化演算法。 結果取決於定型資料的順序。 如需可重現的結果,建議將 shuffle 設定為 False,並將 train_threads 設定為 1

引數

formula

此公式描述於 revoscalepy.rx_formula 中。 microsoftml 目前不支援互動字詞和 F()

data

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

method

使用字元字串指定模型類型:用於預設二元分類的 "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,則會根據資料集自動計算實際值。 預設值為 None

l2_weight

指定 L2 正規化權數。 此值必須是非負數或 None。 如果指定 None,則會根據資料集自動計算實際值。 預設值為 None

train_threads

指定可以使用多少個並行執行緒來執行演算法。 當此參數設定為 None 時,使用的執行緒數目取決於可供處理序使用的邏輯處理器數目,以及資料的稀疏性。 將其設定為 1,以在單一執行緒中執行演算法。

convergence_tolerance

指定用來作為收斂準則的容錯閾值。 該值必須介於 0 和 1 之間。 預設值是 0.1。 如果相對的對偶間隙 (對偶間隙與主要損失之間的比率) 低於指定的收斂容許誤差,則此演算法會被視為已收斂。

max_iterations

指定定型反覆運算次數的上限。 此參數必須是正數或 None。 如果指定 None,則會根據資料集自動計算實際值。 每次反覆運算都需要完整傳遞定型資料。 定型會在反覆運算總次數達到指定上限之後或在損失函數收斂時 (先發生者) 終止。

隨機播放

指定是否要隨機顯示定型資料。 設定為 True 表示隨機顯示資料,設定為 False 表示不隨機顯示。 預設值是 True。 SDCA 是隨機最佳化演算法。 如果開啟隨機顯示,則會在每次反覆運算時隨機顯示定型資料。

check_frequency

計算並檢查損失函數之後的反覆運算次數,以判斷其是否已收斂。 指定的值必須是正整數或 None。 如果為 None,則會根據資料集自動計算實際值。 否則,舉例來說,若指定 checkFrequency = 5,則會計算損失函數,且每隔 5 次反覆運算檢查一次收斂。 損失函數的計算需要單獨完整傳遞定型資料。

normalize

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

  • "Auto":如果需要正規化,會自動執行。 這是預設選項。

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

  • "Yes":執行正規化。

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

正規化會將不同的資料範圍重新調整為標準規模。 特徵擴縮可確保資料點之間的距離成比例,並使各種最佳化方法 (例如梯度下降) 能夠更快收斂。 如果執行正規化,會使用 MaxMin 正規化程式。 其會以區間 [a, b] 將值正規化,其中 -1 <= a <= 00 <= b <= 1b - a = 1。 此正規化程式會藉由將零對應至零來保留稀疏性。

ml_transforms

指定在訓練之前要在資料上執行的 MicrosoftML 轉換清單,或者,若未執行任何轉換,則為 None。 請參閱 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 之間且 income 變數 log 值大於 10 的觀察值。

資料列選取會在處理任何資料轉換之後執行 (請參閱引數 transformstransform_function)。 如同所有運算式,可以在函數呼叫之外使用 expression 函數定義 row_selection

轉換

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

transform_objects

不支援。 具名清單,其中包含 transformstransform_functionrow_selection 可以參考的物件。

transform_function

變數轉換函數。

transform_variables

轉換函數所需之輸入資料集變數的字元向量。

transform_packages

不支援。 字元向量,用以指定其他 Python 套件 (除了 RxOptions.get_option("transform_packages") 中指定的套件以外) 以供使用,並且預先載入以供變數轉換函數使用。 例如,revoscalepy 函數中透過其 transformstransform_function 引數明確定義的字元向量,或透過其 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:報告已處理的資料列數與所有時間。

verbose

指定所需輸出數量的整數值。 若為 0,則計算期間不會列印任何詳細資訊輸出。 整數值 14 提供越來越多的資訊量。

compute_context

設定用來執行計算的內容,以有效的 revoscalepy.RxComputeContext 指定。 目前支援本機和 revoscalepy.RxInSqlServer 計算內容。

ensemble

用於集成的控制參數。

傳回

具有已訓練模型的 FastLinear 物件。

注意

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

另請參閱

hinge_loss, log_loss, smoothed_hinge_loss, squared_loss, rx_predict

參考資料

擴大隨機對偶梯度上升 \(英文\)

用於將正規化損失最小化的隨機對偶梯度上升法 \(英文\)

二元分類範例

'''
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

損失函數