microsoftml.rx_fast_trees:提升式樹狀

使用方式

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

Machine Learning 快速樹狀結構

詳細資料

rx_fast_trees 是 FastRank 的實作。 FastRank 是 MART 梯度提升演算法的有效實作。 梯度提升是一種適用於迴歸問題的機器學習技術。 它會逐步建置迴歸樹,利用預先定義的損失函數來測量每一步中的錯誤,並於下一步更正。 因此,預測模型實際上是多個較弱預測模型組成的集團。 在迴歸問題中,提升會以逐步方式建置一系列這類樹狀結構,然後使用任意可微分損失函數來選取最佳樹狀結構。

MART 會學習迴歸樹狀結構,這是其分葉中具有純量值的決策樹。 決策 (或迴歸) 樹狀結構是類似二進位樹狀目錄的流程圖,使用者可以按照其中一個輸入的特徵值,決定繼續使用兩個子節點中的哪一個。 在每個分葉節點都會傳回一個值。 在內部的節點,決策是以測試 "x <= v" 為依據,其中 x 是輸入範例中的功能值,而 v 是此功能其中一個可能的值。 迴歸樹狀結構可產生的函數是所有分段常數函數。

集團樹狀結構的產生方式是在每一步中計算迴歸樹,以大致估計損失函數的梯度,然後將可使新樹狀結構的損失最小化的係數加入至前一個樹狀結構。 MART 在給定實例上產生的集團輸出是樹狀輸出的總和。

  • 針對二元分類問題,輸出會透過某些校正方式來轉換為機率。

  • 針對迴歸問題,輸出就是函數的預測值。

  • 針對排名問題,執行個體會依集團的輸出值排序。

如果 method 設為 "regression",則會使用 FastTree 的迴歸版本。 如果設為 "ranking",則會使用 FastTree 的順位版本。 若使用順位版本,執行個體應該會按照樹狀結構集團的輸出排序。 這些版本的設定中唯一的差異在於校正設定,只有分類才需要此設定。

引數

公式

公式已於 revoscalepy.rx_formula 中說明。 microsoftml 目前不支援互動字詞和 F()

data

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

method

指定快速樹狀結構類型的字元字串:"binary" 為預設的快速樹狀結構二元分類,"regression" 為快速樹狀結構迴歸。

num_trees

指定要在集成中建立的決策樹總數。建立較多的決策樹或許可獲得更好的涵蓋範圍,但定型時間會增加。 預設值是 100。

num_leaves

可在任何樹狀結構中建立的分葉 (終端節點) 數目上限。 較大的值可能會增加樹狀結構的大小並提高精確度,但有可能會過度學習,且需要較長的定型時間。 預設值為 20。

learning_rate

決定學習過程的每個步驟中,以梯度方向採取的步驟大小。 這將決定學習模組收斂到最佳解決方案的快慢。 如果步驟太大,您可能會超過最佳解決方案。 如果步驟太小,則定型會較久才收斂到最佳解決方案。

min_split

形成分葉所需的定型執行個體數目下限。 也就是說,從子取樣資料中,迴歸樹的分葉中允許的文件數目下限。 「分割」意指樹狀結構的每個層級 (節點) 中的特徵都是隨機分割的。 預設值為 10。即使會對執行個體加權,也只會計算執行個體數目。

example_fraction

要用於每個樹狀結構的隨機選擇執行個體的分數。 預設值為 0.7。

feature_fraction

要用於每個樹狀結構的隨機選擇特徵的分數。 預設值為 1。

split_fraction

要用於每個分割的隨機選擇特徵的分數。 預設值為 1。

num_bins

每個特徵的相異值 (間隔) 數目上限。 如果特徵的值少於指定數目,則每個值都會放在本身的間隔中。 如果有更多值,演算法會建立 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 轉換清單,或者,若未執行任何轉換,則為 None。 請參閱 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 之間且 income 變數 log 值大於 10 的觀察值。

資料列選取會在處理任何資料轉換之後執行 (請參閱引數 transformstransform_function)。 如同所有運算式,可以在函數呼叫之外使用 expression 函數定義 row_selection

轉換

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

transform_objects

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

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

blocks_per_read

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

report_progress

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

  • 0:未報告進度。

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

  • 2:報告已處理的資料列數目與時間。

  • 3:報告已處理的資料列數與所有時間。

verbose

指定所需輸出數量的整數值。 若為 0,則計算期間不會列印任何詳細資訊輸出。 整數值 14 提供越來越多的資訊量。

compute_context

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

ensemble

用於集成的控制參數。

傳回

具有已訓練模型的 FastTrees 物件。

注意

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

另請參閱

rx_fast_forest, rx_predict

參考資料

Wikipedia:梯度提升 (梯度樹狀結構提升)

窮盡函式近似值:梯度提升機器。

二元分類範例

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