microsoftml.rx_logistic_regression:羅吉斯迴歸

使用方式

microsoftml.rx_logistic_regression(formula: str,
    data: [revoscalepy.datasource.RxDataSource.RxDataSource,
    pandas.core.frame.DataFrame], method: ['binary',
    'multiClass'] = 'binary', l2_weight: float = 1,
    l1_weight: float = 1, opt_tol: float = 1e-07,
    memory_size: int = 20, init_wts_diameter: float = 0,
    max_iterations: int = 2147483647,
    show_training_stats: bool = False, sgd_init_tol: float = 0,
    train_threads: int = None, dense_optimizer: bool = False,
    normalize: ['No', 'Warn', 'Auto', 'Yes'] = 'Auto',
    ml_transforms: list = None, ml_transform_vars: list = None,
    row_selection: str = None, transforms: dict = None,
    transform_objects: dict = None, transform_function: str = None,
    transform_variables: list = None,
    transform_packages: list = None,
    transform_environment: dict = None, blocks_per_read: int = None,
    report_progress: int = None, verbose: int = 1,
    ensemble: microsoftml.modules.ensemble.EnsembleControl = None,
    compute_context: revoscalepy.computecontext.RxComputeContext.RxComputeContext = None)

描述

Machine Learning 羅吉斯回歸

詳細資料

羅吉斯回歸是一種分類方法,用來預測類別相依變數的值,其關聯性與假設有羅吉斯分佈的一或多個獨立變數。 如果相依變數只有兩個可能的值 (成功/失敗) ,則羅吉斯回歸為二進位。 如果相依變數具有兩個以上的可能值, (指定的診斷測試結果) ,則羅吉斯回歸是多項式。

使用的 rx_logistic_regression 優化技術是有限的記憶體 Broyden-Fletcher-Goldfarb-Shanno (L-BFGS) 。 L-BFGS 和一般 BFGS 演算法都會使用准 Newtonian 方法來估計 Newton 方法在 Newton 方法用來計算步驟的方程式中計算密集的 Hessian 矩陣。 但是 L-BFGS 近似值只會使用有限的記憶體數量來計算下一個步驟方向,因此特別適合大量變數的問題。 參數 memory_size 會指定要儲存的過去位置和漸層數目,以用於下一個步驟的計算。

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

  • l1_weight:使用高維度資料時,可以套用至疏鬆模型。 它會提取相對不重要到 0 的小型權數相關功能。

  • l2_weight:較適合非疏鬆的資料。 它會將大型權數提取至零。

將障礙加到正規化時,可克服一些套索的限制。 例如,當預測值數目大於樣本大小時,它可以改善其預測精確度。 如果 為 x = l1_weighty = l2_weightax + by = c 則會定義正規化詞彙的線性範圍。 x 和 y 的預設值都是 1 。 積極正規化可能會藉由排除模型中的重要變數,來危害預測容量。 因此,選擇正規化參數的最佳值對於羅吉斯回歸模型的效能很重要。

引數

公式

如revoscalepy.rx_formula互動詞彙 F() 中所述的公式, microsoftml目前不支援此公式。

資料

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

method

指定羅吉斯回歸類型的字元字串: "binary" 預設的二元分類羅吉斯回歸或 "multiClass" 多重羅吉斯回歸。

l2_weight

L2 正規化權數。 其值必須大於或等於 0 ,且預設值設定為 1

l1_weight

L1 正規化權數。 其值必須大於或等於 0 ,且預設值設定為 1

opt_tol

優化工具聚合的臨界值。 換句話說,如果反覆運算之間的改進少於臨界值,此演算法會停止,並傳回目前的模型。 較小的值較慢,但更精確。 預設值是 1e-07

memory_size

L-BFGS 的記憶體大小,指定要儲存以供下一個步驟計算的過去位置和漸層數目。 此優化參數會限制用來計算下一個步驟的大小和方向的記憶體數量。 當您指定較少的記憶體時,訓練是更快,但較不精確。 必須大於或等於 1 ,且預設值為 20

max_iterations

設定反覆運算數目上限。 在此步驟數目之後,即使演算法不符合聚合準則,演算法仍會停止。

show_training_stats

指定 True 以顯示定型資料和定型模型的統計資料,否則 False 為 。 預設值是 False。 如需模型統計資料的其他資訊,請參閱 summary.ml_model()

sgd_init_tol

設定為大於 0 的數位,以使用隨機漸層下降 () 來尋找初始參數。 非零值集會指定用來判斷聚合的容錯 SGD。 預設值指定 0 未使用 SGD。

init_wts_diameter

設定初始權數直徑,指定針對初始權數繪製值的範圍。 這些權數會從這個範圍內隨機初始化。 例如,如果將直徑指定為 d ,則權數會在 和 d/2 之間 -d/2 統一分佈。 預設值為 0 ,指定擁有權數都會初始化為 0

train_threads

要用於定型模型的執行緒數目。 這應該設定為電腦上的核心數目。 請注意,L-BFGS 多執行緒嘗試將資料集載入記憶體。 如果記憶體不足問題,請將 設定 train_threads1 以關閉多執行緒。 如果沒有,則會在內部決定要使用的執行緒數目。 預設值為 None

dense_optimizer

如果 True 為 ,則會強制對內部優化向量進行反正規化。 如果 False 為 ,則啟用羅吉斯回歸優化器會使用疏鬆或密集的內部狀態,因為找到適當狀態。 將 設定 denseOptimizerTrue 需要內部優化器使用密集的內部狀態,這有助於減輕垃圾收集行程的負載,以因某些較大型的問題而降低負載。

normalize

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

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

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

  • "Yes":會執行正規化。

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

正規化會將不同的資料範圍調整為標準小數位數。 特徵調整可確保資料點之間的距離成正比,並啟用各種優化方法,例如漸層下降以更快交集。 如果執行正規化, MaxMin 則會使用正規化程式。 它會以間隔 [a, b] 將值正規化,其中 -1 <= a <= 0 和 和 b - a = 10 <= b <= 1 。 此正規化程式會藉由將零對應至零來保留疏疏性。

ml_transforms

指定在定型之前要對資料執行的 MicrosoftML 轉換清單,如果未執行任何轉換,則為 None 。 如需支援的轉換,請參閱 featurize_textcategoricalcategorical_hash 。 這些轉換會在任何指定的 Python 轉換之後執行。 預設值為 None

ml_transform_vars

指定要用於 ml_transforms 變數名稱的字元向量;如果沒有使用,則為 None 。 預設值為 None

row_selection

不支援。 指定資料列 (觀察) ,該資料集是由模型使用的資料 (列,該資料集的名稱是來自資料集的邏輯變數名稱,以引號) ,或使用資料集中的變數搭配邏輯運算式使用。 例如:

  • row_selection = "old" 只會使用變數值為 的 oldTrue 觀察值。

  • 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

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

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 的新 「hash」 環境。

blocks_per_read

指定要針對從資料來源讀取之每個資料區塊讀取的區塊數目。

report_progress

整數值,指定資料列處理進度的報告層級:

  • 0:不會報告任何進度。

  • 1:列印和更新已處理的資料列數目。

  • 2:已處理的資料列和時間會回報。

  • 3:已處理的資料列和所有計時都會回報。

verbose

指定所要輸出數量的整數值。 如果 0 為 ,則計算期間不會列印任何詳細資訊輸出。 從 14 中提供增加資訊量的整數值。

compute_coNtext

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

整體

控制系結的參數。

傳回

具有 LogisticRegression 定型模型的 物件。

注意

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

另請參閱

rx_predict

參考

Wikipedia:L-BFGS

Wikipedia:羅吉斯回歸

可調整L1-Regularized Log-Linear模型的定型

測試回合 - Machine Learning 的 L1 和 L2 正規化

二元分類範例

'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_logistic_regression, 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)

model = rx_logistic_regression(
    formula=" isCase ~ age + parity + education + spontaneous + induced ",
    data=data_train)

print(model.coef_)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(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.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Beginning optimization
num vars: 6
improvement criterion: Mean Improvement
L1 regularization selected 5 of 6 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0646405
Elapsed time: 00:00:00.0083991
OrderedDict([('(Bias)', -1.2366217374801636), ('spontaneous', 1.9391206502914429), ('induced', 0.7497404217720032), ('parity', -0.31517016887664795), ('age', -3.162723260174971e-06)])
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0287290
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: 0.001 seconds 
  isCase PredictedLabel     Score  Probability
0  False          False -1.341681     0.207234
1   True           True  0.597440     0.645070
2  False           True  0.544912     0.632954
3  False          False -1.289152     0.215996
4  False          False -1.019339     0.265156

MultiClass 分類範例

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

iris = get_dataset("iris")

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

irisdf = iris.as_df()
irisdf["Species"] = irisdf["Species"].astype("category")
data_train, data_test, y_train, y_test = train_test_split(irisdf, irisdf.Species)

model = rx_logistic_regression(
    formula="  Species ~ Sepal_Length + Sepal_Width + Petal_Length + Petal_Width ",
    method="multiClass",
    data=data_train)

print(model.coef_)
    
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
                     extra_vars_to_write=["Species", "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: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 112, Read Time: 0, Transform Time: 0
Beginning processing data.
LBFGS multi-threading will attempt to load dataset into memory. In case of out-of-memory issues, turn off multi-threading by setting trainThreads to 1.
Beginning optimization
num vars: 15
improvement criterion: Mean Improvement
L1 regularization selected 9 of 15 weights.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0493224
Elapsed time: 00:00:00.0080558
OrderedDict([('setosa+(Bias)', 2.074636697769165), ('versicolor+(Bias)', 0.4899507164955139), ('virginica+(Bias)', -2.564580202102661), ('setosa+Petal_Width', -2.8389241695404053), ('setosa+Petal_Length', -2.4824044704437256), ('setosa+Sepal_Width', 0.274869441986084), ('versicolor+Sepal_Width', -0.2645561397075653), ('virginica+Petal_Width', 2.6924400329589844), ('virginica+Petal_Length', 1.5976412296295166)])
Beginning processing data.
Rows Read: 38, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0331861
Finished writing 38 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: 0.001 seconds 
      Species   Score.0   Score.1   Score.2
0   virginica  0.044230  0.364927  0.590843
1      setosa  0.767412  0.210586  0.022002
2      setosa  0.756523  0.221933  0.021543
3      setosa  0.767652  0.211191  0.021157
4  versicolor  0.116369  0.498615  0.385016