Usage
microsoftml.rx_fast_trees(formula: str,
data: [revoscalepy.datasource.RxDataSource.RxDataSource,
pandas.core.frame.DataFrame], method: ['binary',
'regression'] = 'binary', num_trees: int = 100,
num_leaves: int = 20, learning_rate: float = 0.2,
min_split: int = 10, example_fraction: float = 0.7,
feature_fraction: float = 1, split_fraction: float = 1,
num_bins: int = 255, first_use_penalty: float = 0,
gain_conf_level: float = 0, unbalanced_sets: bool = False,
train_threads: int = 8, random_seed: int = None,
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_fast_trees 是 FastRank 的實作。 FastRank 是 MART 梯度提升演算法的高效實作。 梯度提升是一種用於迴歸問題的機器學習技術。 它以逐步方式建立每棵迴歸樹,使用預先定義的損失函數來衡量每一步的誤差,並在下一步進行修正。 所以這個預測模型其實是弱預測模型的集合。 在迴歸問題中,增強會逐步建立一系列此類樹,然後利用任意可微損失函數選擇最佳樹。
MART 學習一組迴歸樹,這是一種葉節點為純量值的決策樹。 決策樹(或迴歸樹)是一種類似二元樹的流程圖,在每個內部節點,根據輸入的特徵值之一,決定要繼續前往哪一個子節點。 在每個葉節點,會回傳一個值。 在內部節點中,決策基於測試 "x <= v",其中 x 是輸入樣本中特徵的值,是 v 該特徵的可能值之一。 迴歸樹能產生的函數都是分段常數函數。
樹群是透過在每一步計算一棵近似損失函數梯度的迴歸樹,並將它是數加入前一棵樹,以最小化新樹損失的係數所產生。 MART 在給定實例上產生的集合輸出為所有樹狀輸出的總和。
在二元分類問題中,輸出會透過某種校準方式轉換為機率。
在迴歸問題中,輸出即為函數的預測值。
在排名問題中,實例依集合的輸出值排序。
若 method 設為 "regression",則使用迴歸版本的 FastTree。 若設為 "ranking",則使用排名版本的 FastTree。 在排名的情況下,實例應依樹群的輸出排序。 這些版本設定的唯一差異在於校正設定,而校正僅用於分類。
Arguments
公式
revoscalepy.rx_formula 中描述的公式。
互動術語 和 F() 目前在 microsoftml 中不支援。
資料
一個資料來源物件或指定 .xdf 檔案或資料框架物件的字串。
方法
一個字串,用來指定快速樹的類型: "binary" 預設的快速樹二元分類或 "regression" 快速樹迴歸。
num_trees
指定在集合中要建立的決策樹總數。透過建立更多決策樹,你有可能獲得更好的覆蓋,但訓練時間會增加。 預設值是 100。
num_leaves
在任何樹中可建立的最大葉節點數(終端節點)。 較高的值可能增加樹的大小並獲得更好的精度,但有過度擬合並需要更長時間訓練的風險。 預設值為 20。
學習率
決定學習過程中每一步中,沿著梯度方向所採取的步驟大小。 這決定了學習者收斂到最佳解的速度或速度。 如果步長太大,可能會超出最佳解。 若步長過小,訓練收斂至最佳解需更長時間。
min_split
形成葉片所需的最低訓練次數。 也就是說,從子抽樣資料中,迴歸樹葉節點中允許的最少文件數量。 「分割」意指樹(節點)每一層的特徵被隨機分割。 預設值是 10。即使實例有加權,也只計算實例數量。
example_fraction
每棵樹隨機選擇的實例比例。 預設值為 0.7。
feature_fraction
每棵樹隨機選擇特徵的比例。 預設值為 1。
split_fraction
每次分割時隨機選擇的特徵比例。 預設值為 1。
num_bins
每個特徵最大可識別不同值(bin)數量。 若特徵值少於標示數字,則每個值會被放入獨立的箱中。 如果有更多數值,演算法會建立 numBins 分隔槽。
first_use_penalty
該特徵首先使用懲罰係數。 這是一種正則化形式,使用新特徵時會受到懲罰。 提高這個數值,讓樹狀結構不需要太多特徵。 預設值為 0。
gain_conf_level
樹擬合增益信心要求(應在範圍 [0,1))。 預設值為 0。
unbalanced_sets
若 True,則使用針對不平衡集合優化的導數。 僅當 等於 type 時 "binary"。
預設值是 False。
train_threads
訓練中使用的線程數量。 預設值為 8。
random_seed
指定隨機種子。 預設值是 None。
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 的運算上下文。
合奏團
集合的控制參數。
退貨
一個 FastTrees 帶有訓練模型的物件。
備註
此演算法為多執行緒,且會嘗試將整個資料集載入記憶體。
另請參閱
參考資料
二元分類範例
'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_fast_trees, 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)
trees_model = rx_fast_trees(
formula=" isCase ~ age + parity + education + spontaneous + induced ",
data=data_train)
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(trees_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))
輸出:
Not adding a normalizer.
Making per-feature arrays
Changing data from row-wise to column-wise
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Processed 186 instances
Binning and forming Feature objects
Reserved memory for tree learner: 7020 bytes
Starting to train ...
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0949161
Elapsed time: 00:00:00.0112103
Beginning processing data.
Rows Read: 62, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0230457
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 -4.722279 0.131369
1 False False -11.550012 0.009757
2 False False -7.312314 0.050935
3 True True 3.889991 0.825778
4 False False -6.361800 0.072782
迴歸範例
'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_trees, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset
airquality = get_dataset("airquality")
import sklearn
if sklearn.__version__ < "0.18":
from sklearn.cross_validation import train_test_split
else:
from sklearn.model_selection import train_test_split
airquality = airquality.as_df()
######################################################################
# Estimate a regression fast forest
# Use the built-in data set 'airquality' to create test and train data
df = airquality[airquality.Ozone.notnull()]
df["Ozone"] = df.Ozone.astype(float)
data_train, data_test, y_train, y_test = train_test_split(df, df.Ozone)
airFormula = " Ozone ~ Solar_R + Wind + Temp "
# Regression Fast Forest for train data
ff_reg = rx_fast_trees(airFormula, method="regression", data=data_train)
# Put score and model variables in data frame
score_df = rx_predict(ff_reg, data=data_test, write_model_vars=True)
print(score_df.head())
# Plot actual versus predicted values with smoothed line
# Supported in the next version.
# rx_line_plot(" Score ~ Ozone ", type=["p", "smooth"], data=score_df)
輸出:
'unbalanced_sets' ignored for method 'regression'
Not adding a normalizer.
Making per-feature arrays
Changing data from row-wise to column-wise
Beginning processing data.
Rows Read: 87, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Warning: Skipped 4 instances with missing features during training
Processed 83 instances
Binning and forming Feature objects
Reserved memory for tree learner: 21528 bytes
Starting to train ...
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0512720
Elapsed time: 00:00:00.0094435
Beginning processing data.
Rows Read: 29, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0229873
Finished writing 29 rows.
Writing completed.
Solar_R Wind Temp Score
0 115.0 7.4 76.0 26.003876
1 307.0 12.0 66.0 18.057747
2 230.0 10.9 75.0 10.896211
3 259.0 9.7 73.0 13.726607
4 92.0 15.5 84.0 37.972855