microsoftml.rx_fast_trees:強化樹

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_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之間且變數值logincome大於10的觀測值。

列選擇是在處理任何資料轉換後執行的(參見參數 transformstransform_function)。 與所有表達式一樣, row_selection 可以在函 expression 式呼叫之外使用函式定義。

變換

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

transform_objects

不支援。 一個命名的清單,包含可被 transformstransform_functionrow_selection和 所引用的物件。

transform_function

變數轉換函數。

transform_variables

一個用於轉換函數所需的輸入資料集變數的字元向量。

transform_packages

不支援。 一個字元向量,指定額外 Python 套件(除 在 中 RxOptions.get_option("transform_packages")指定的套件外)可供並預載,用於變數轉換函數。 例如,在 revoscalepy 函式中透過其 transformstransform_function 參數明確定義的函數,或是透過 their 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:列數已處理,所有時間點都會被報告。

詳細資訊

一個整數值,用來指定想要輸出的量。 若 0,則計算過程中不會印出冗長輸出。 整數值 來自 14 提供越來越多的資訊。

compute_context

設定計算執行的上下文,並以有效的 revoscalepy 指定。RxComputeContext。 目前是局部且 revoscalepy。支援 RxInSqlServer 的運算上下文。

合奏團

集合的控制參數。

退貨

一個 FastTrees 帶有訓練模型的物件。

備註

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

另請參閱

rx_fast_forestrx_predict

參考資料

維基百科:梯度提升(梯度樹提升)

貪婪函數近似:梯度增強機。

二元分類範例

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