microsoftml.rx_fast_forest:隨機樹系
使用方式
microsoftml.rx_fast_forest(formula: str,
data: [revoscalepy.datasource.RxDataSource.RxDataSource,
pandas.core.frame.DataFrame], method: ['binary',
'regression'] = 'binary', num_trees: int = 100,
num_leaves: int = 20, 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,
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
中迴歸樹狀結構學習工具的隨機樹系與分位數迴歸樹系實作。
模型是由決策樹的集成所組成。 決策樹系中的每個樹狀結構都會透過預測來輸出高斯分布。 系統會對樹狀結構整體執行彙總,以找出最接近模型中所有樹狀結構合併分佈的高斯分佈。
此決策樹系分類器由一整團的決策樹所組成。 一般而言,集團模型比單一決策樹的涵蓋範圍更廣、精確度更高。 決策樹系中的每個樹狀結構都會輸出高斯分布。
引數
公式
公式已於 revoscalepy.rx_formula 中說明。
microsoftml 目前不支援互動字詞和 F()
。
data
指定 .xdf 檔案或資料框架物件的資料來源物件或字元字串。
method
表示快速樹狀結構類型的字元字串:
"binary"
代表快速樹狀結構二元分類,或"regression"
代表快速樹狀結構迴歸。
num_trees
指定要在集成中建立的決策樹總數。建立較多的決策樹或許可獲得更好的涵蓋範圍,但定型時間會增加。 預設值是 100。
num_leaves
可在任何樹狀結構中建立的分葉 (終端節點) 數目上限。 較大的值可能會增加樹狀結構的大小並提高精確度,但有可能會過度學習,且需要較長的定型時間。 預設值為 20。
min_split
形成分葉所需的定型執行個體數目下限。 也就是說,從子取樣資料中,迴歸樹的分葉中允許的文件數目下限。 「分割」意指樹狀結構的每個層級 (節點) 中的特徵是隨機分割的。 預設值是 10。
example_fraction
要用於每個樹狀結構的隨機選擇執行個體的分數。 預設值為 0.7。
feature_fraction
要用於每個樹狀結構的隨機選擇特徵的分數。 預設值為 0.7。
split_fraction
要用於每個分割的隨機選擇特徵的分數。 預設值為 0.7。
num_bins
每個特徵的相異值 (間隔) 數目上限。 預設值為 255。
first_use_penalty
特徵會先使用懲罰係數。 預設值為 0。
gain_conf_level
樹狀結構調整增益的信賴度需求 (應在範圍 [0,1]
內)。 預設值為 0。
train_threads
要用於定型的執行緒數目。 如果指定了 None,則會在內部決定要使用的執行緒數目。 預設值為 None。
random_seed
指定隨機種子。 預設值為 None。
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
設定執行計算的內容,以有效的 RxComputeContext
指定。
目前支援本機與 RxInSqlServer
計算內容。
集成
用於集成的控制參數。
傳回
具有已訓練模型的 FastForest
物件。
注意
此演算法為多執行緒,且一律會嘗試將整個資料集載入記憶體中。
另請參閱
參考資料
維基百科:隨機樹系 (英文)
分位數迴歸樹系 (英文)
從樹墩到樹狀到樹系 (英文)
二元分類範例
'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_fast_forest, 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)
forest_model = rx_fast_forest(
formula=" isCase ~ age + parity + education + spontaneous + induced ",
data=data_train)
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(forest_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: 7176 bytes
Starting to train ...
Not training a calibrator because a valid calibrator trainer was not provided.
Elapsed time: 00:00:00.2704185
Elapsed time: 00:00:00.0443884
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0253862
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds
isCase PredictedLabel Score
0 False False -36.205067
1 True False -40.396084
2 False False -33.242531
3 False False -87.212494
4 True False -13.100666
迴歸範例
'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_forest, 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_forest(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)
輸出:
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, 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: 21372 bytes
Starting to train ...
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.0644269
Elapsed time: 00:00:00.0109290
Beginning processing data.
Rows Read: 29, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0314390
Finished writing 29 rows.
Writing completed.
Solar_R Wind Temp Score
0 190.0 7.4 67.0 26.296144
1 20.0 16.6 63.0 14.274153
2 320.0 16.6 73.0 23.421144
3 187.0 5.1 87.0 80.662109
4 175.0 7.4 89.0 67.570549