Usage
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)
Description
機器學習邏輯斯迴歸
詳細資訊
邏輯迴歸是一種分類方法,用來根據類別依變數與一個或多個假設具有邏輯斯分布的自變數的關係來預測其價值。 若依變數只有兩個可能值(成功/失敗),則邏輯迴歸為二元。 若依變數有超過兩個可能值(根據診斷測試結果的血型),則邏輯迴歸為多項式迴歸。
該 rx_logistic_regression 優化技術為有限記憶體 Broyden-FletcherGoldfarb-Shanno(L-BFGS)。 L-BFGS 與一般 BFGS 演算法皆使用準牛頓方法來估計牛頓方法中計算密集的 Hessian 矩陣,該方程式用於計算步數。 但 L-BFGS 近似只使用有限的記憶體來計算下一步方向,因此特別適用於變數數量眾多的問題。 參數 memory_size 指定了過去位置和梯度的數量,用於計算下一步。
此學習者可使用彈性淨正則化:L1(套索)與L2(脊)正則化的線性組合。 正則化是一種方法,透過施加限制來補充資料,並防止過度擬合,懲罰極端係數值的模型,使問題更易處理。 這能透過選擇偏差與變異權衡中的最佳複雜度,提升所學模型的推廣性。 正則化的原理是將與係數值相關的懲罰加到假設的誤差上。 極端係數的準確模型會受到較多懲罰,而較保守的模型則較少。 L1 和 L2 正則化在某些方面具有不同的效果和用途,且在某些方面是互補的。
l1_weight:可用於稀疏模型,特別是在處理高維資料時。 它會拉取相對不重要的小權重特徵,向 0 方向延伸。l2_weight:對於非稀疏的資料來說更為理想。 它會把大重量拉向零。
將脊懲罰加到正則化中,克服了套索的一些限制。 例如,當預測因子數量超過樣本數時,它能提升預測準確度。
若 x = l1_weight 且 y = l2_weight, ax + by = c 則定義正則化項的線性張成。 x 和 y 的預設值都是 1。 積極的正則化會因排除重要變數而損害預測能力。 因此,選擇正則化參數的最佳值對邏輯迴歸模型的效能非常重要。
Arguments
公式
該公式依revoscalepy.rx_formula互動術語描述,目前 F()microsoftml 不支援。
資料
一個資料來源物件或指定 .xdf 檔案或資料框架物件的字串。
方法
一個字串,用來指定邏輯斯迴歸的類型: "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)來尋找初始參數。 非零值集合指定 SGD 用來判定收斂性的容差。
預設值是 0 指定不使用 SGD。
init_wts_diameter
設定初始權重直徑,指定初始權重取值的範圍。 這些權重會從此範圍內隨機初始化。 例如,若直徑指定為 d,則權重均勻分布於 -d/2d/2與 之間。 預設值為 0,這表示所有權重都初始化為 0。
train_threads
訓練模型時使用執行緒數量。
這應該設定為機器上的核心數量。 請注意,L-BFGS 多執行緒嘗試將資料集載入記憶體。 若出現記憶體不足問題,請設定 train_threads 為 以 1 關閉多執行緒。 如果 沒有 ,執行緒數量由內部決定。 預設值是 None。
dense_optimizer
若 True,則會強制內部優化向量的密度化。 若 False,則可依其判斷使用稀疏或密集的內部狀態。
設定 denseOptimizer 為 True 需要內部優化器使用密集的內部狀態,這可能有助於減輕某些較大問題的垃圾回收器負載。
正常化
指定所使用的自動正規化類型:
"Auto":若需要正規化,則會自動執行。 這是預設的選擇。"No":不進行正規化。"Yes":進行正規化。"Warn":若需要正規化,會顯示警告訊息,但不會執行正規化。
正規化將不同資料範圍重新縮放到標準尺度。 特徵縮放確保資料點間距離成比例,並使梯度下降等各種優化方法能更快收斂。 若進行 MaxMin 正規化,則使用正規化器。 它在區間 [a, b] 內正規化,其中 -1 <= a <= 0 和 0 <= b <= 1b - a = 1。 此正規化器透過將零映射到零來保持稀疏性。
ml_transforms
指定一份在訓練前要對資料執行的 MicrosoftML 轉換清單,或是「若不執行轉換則 無 」。 參見 featurize_text、 categorical、 categorical_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的觀測值。
列選擇是在處理任何資料轉換後執行的(參見參數 transforms 或 transform_function)。 與所有表達式一樣, row_selection 可以在函 expression 式呼叫之外使用函式定義。
變換
不支援。 代表第一輪變數轉換的表達式。 與所有表達式一樣, transforms (或 row_selection)可以在函式呼叫之外使用函 expression 式定義。
transform_objects
不支援。 一個命名的清單,包含可被 transforms、 transform_function、 row_selection和 所引用的物件。
transform_function
變數轉換函數。
transform_variables
一個用於轉換函數所需的輸入資料集變數的字元向量。
transform_packages
不支援。 一個字元向量,指定額外 Python 套件(除 在 中 RxOptions.get_option("transform_packages")指定的套件外)可供並預載,用於變數轉換函數。
例如,在 revoscalepy 函式中透過其 transforms 和 transform_function 參數明確定義的函數,或是透過 their formula 或 row_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,則計算過程中不會印出冗長輸出。 整數值 來自 1 , 4 提供越來越多的資訊。
compute_context
設定計算執行的上下文,並以有效的 revoscalepy 指定。RxComputeContext。 目前是局部且 revoscalepy。支援 RxInSqlServer 的運算上下文。
合奏團
集合的控制參數。
退貨
一個 LogisticRegression 帶有訓練模型的物件。
備註
當(多執行緒)時,此演算法會嘗試將整個資料集載入記憶體 train_threads > 1 。
另請參閱
參考資料
L1-Regularized Log-Linear 模型的可擴展訓練
二元分類範例
'''
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 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