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)
Description
機器學習羅吉斯迴歸
詳細資料
羅吉斯迴歸是一種分類方法,可從其關聯性,到假設有羅吉斯分佈的一或多個獨立變數,預測類別相依變數的值。 若相依變數只有兩個可能的值 (成功/失敗),則羅吉斯迴歸為二元。 若相依變數具有兩個以上可能的值 (診斷測試結果給出的血型),則羅吉斯迴歸為多元。
限定記憶體 Broyden-Fletcher-Goldfarb-Shanno (L-BFGS) 是最適合 rx_logistic_regression
使用的技術。 L-BFGS 和一般 BFGS 演算法都使用 quasi-Newtonian 方法,估算 Newton 方法計算步驟時所用之方程式中密集計算的 Hessian 矩陣。 但 L-BFGS 近似值只會使用限定的記憶體數量計算下一個步驟方向,因此特別適合變數數量多的問題。
memory_size
參數可指定要儲存供計算下一個步驟時使用的通過位置和梯度數量。
此學習模組可以使用彈性網路正規化:L1 (lasso) 和 L2 (ridge) 正規化的線性組合。 正規化是一種方法,可藉由強制條件約束提供資訊來補充資料,並利用極端係數值避免模型過度學習,讓不良的問題變得容易處理。 這可藉由選取偏差方差權衡中的最佳複雜度,來改善所學習模型的一般化。 正規化的運作方式是將假設錯誤加上係數值相關聯的懲罰。 具有極端係數值的精確模型會受到較多懲罰,而具有較保守值的不精確模型受到較少懲罰。 L1 和 L2 正規化有不同的效果,而且在某些方面是互補的用法。
l1_weight
:使用高維度資料時,可以套用到疏鬆的模型。 會提取相對不重要到 0 的小型權數相關聯特徵。l2_weight
:不疏鬆資料的建議選項。 會提取大型權數至零。
在正規化中新增 ridge 懲罰,可克服一些 lasso 限制。 例如,當預測值數目大於樣本大小時,可以改善其預測精確度。
若是 x = l1_weight
和 y = l2_weight
,則 ax + by = c
會定義正規化項的線性範圍。 x 和 y 的預設值都是 1
。 積極正規化可能會因為排除了模型中的重要變數,而危害了預測能力。 因此,選擇正規化參數的最佳值,對於羅吉斯迴歸模型的效能很重要。
引數
公式
如 revoscalepy.rx_formula 互動項 F()
中所列的公式, microsoftml 目前不支援此公式。
data
指定 .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) 來尋找初始參數。 非零值集會指定容錯 SGD 用來判斷聚合。
預設值為 0
,指定不使用 SGD。
init_wts_diameter
設定初始權數直徑,指定要用於為初始權數繪製值的範圍。 這些權數會從這個範圍內隨機初始化。 例如,如果將直徑指定為 d
,則權數會在 -d/2
和 d/2
之間均勻分佈。 預設值為 0
,指定將所有權數全都初始化為 0
。
train_threads
要用於訓練模型的執行緒數。
這應該設定為電腦上的核心數目。 請注意,L-BFGS 多執行緒處理會嘗試將資料集載入至記憶體中。 若發生記憶體不足問題,請將 train_threads
設定為 1
,以關閉多執行緒處理。 若為 None,則要使用的執行緒數會由內部決定。 預設值為 None。
dense_optimizer
若為 True
,則會強制內部最佳化向量的緻密度。 如果為 False
,則會讓羅吉斯迴歸最佳化工具視需要使用疏鬆或密集的內部狀態。
將 denseOptimizer
設定為 True
會要要求內部最佳化工具使用密集的內部狀態。這有助於減輕一些較大問題的記憶體回收行程負載。
正規化
指定所使用的自動正規化類型:
"Auto"
:如果需要正規化,會自動執行。 這是預設選項。"No"
:不執行正規化。"Yes"
:執行正規化。"Warn"
:如果需要正規化,則會顯示警告訊息,但是不會執行正規化。
正規化會將不同的資料範圍重新調整為標準規模。 特徵擴縮可確保資料點之間的距離成比例,並使各種最佳化方法 (例如梯度下降) 能夠更快收斂。 如果執行正規化,會使用 MaxMin
正規化程式。 其會以區間 [a, b] 將值正規化,其中 -1 <= a <= 0
、0 <= b <= 1
且 b - a = 1
。 此正規化程式會藉由將零對應至零來保留稀疏性。
ml_transforms
指定在訓練之前要在資料上執行的 MicrosoftML 轉換清單,或者,若未執行任何轉換,則為 None。 請參閱 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 之間且income
變數log
值大於 10 的觀察值。
資料列選取會在處理任何資料轉換之後執行 (請參閱引數 transforms
或 transform_function
)。 如同所有運算式,可以在函數呼叫之外使用 expression
函數定義 row_selection
。
轉換
不支援。 代表第一輪變數轉換形式的運算式。 如同所有運算式,可以在函數呼叫之外使用 expression
函數定義 transforms
(或 row_selection
)。
transform_objects
不支援。 具名清單,其中包含 transforms
、transform_function
和 row_selection
可以參考的物件。
transform_function
變數轉換函數。
transform_variables
轉換函數所需之輸入資料集變數的字元向量。
transform_packages
不支援。 字元向量,用以指定其他 Python 套件 (除了 RxOptions.get_option("transform_packages")
中指定的套件以外) 以供使用,並且預先載入以供變數轉換函數使用。
例如,revoscalepy 函數中透過其 transforms
與 transform_function
引數明確定義的字元向量,或透過其 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
:報告已處理的資料列數與所有時間。
verbose
指定所需輸出數量的整數值。
若為 0
,則計算期間不會列印任何詳細資訊輸出。 整數值 1
到 4
提供越來越多的資訊量。
compute_context
設定用來執行計算的內容,以有效的 revoscalepy.RxComputeContext 指定。 目前支援本機和 revoscalepy.RxInSqlServer 計算內容。
ensemble
用於集成的控制參數。
傳回
具有已訓練模型的 LogisticRegression
物件。
注意
當 train_threads > 1
(多執行緒) 時,此演算法會嘗試將整個資料集載入記憶體。
另請參閱
參考資料
Wikipedia:L-BFGS(英文)
Wikipedia:Logistic regression (英文)
可調整訓練的 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 分類範例
'''
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