次の方法で共有


microsoftml.rx_fast_forest: ランダム フォレスト

Usage

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

Machine Learning Fast Forest

詳細

デシジョン ツリーは、入力に対して一連の単純なテストを実行するノンパラメトリック モデルです。 この決定手順では、入力が処理中のインスタンスに似たトレーニング データセット内の出力にマップされます。 適切なリーフ ノードに到達し、出力の決定が返されるまで、ツリーの分岐を通じて各インスタンスを再帰的にマップする類似性の尺度に基づいて、バイナリ ツリー データ構造の各ノードで決定が行われます。

デシジョン ツリーには、いくつかの利点があります。

  • これらは、トレーニングと予測中の計算とメモリ使用量の両方で効率的です。

  • これらは、非線形の意思決定境界を表すことができます。

  • 統合された特徴の選択と分類を実行します。

  • これらは、ノイズの多い機能が存在する場合に回復性があります。

高速フォレスト回帰は、 rx_fast_treesの回帰ツリー学習器を使用したランダム フォレストと分位点回帰フォレストの実装です。 モデルはデシジョン ツリーのアンサンブルで構成されます。 デシジョン フォレスト内の各ツリーは、予測を使用してガウス分布を出力します。 集計は、モデル内のすべてのツリーの結合分布に最も近いガウス分布を見つけるために、ツリーのアンサンブルに対して実行されます。

このデシジョン フォレスト分類子は、デシジョン ツリーのアンサンブルで構成されます。 一般に、アンサンブル モデルでは、単一のデシジョン ツリーよりもカバレッジと精度が向上します。 デシジョン フォレスト内の各ツリーは、ガウス分布を出力します。

論争

数式

revoscalepy.rx_formulaに記載されている数式。 相互作用の用語と F() は、 microsoftml では現在サポートされていません。

データ

.xdf ファイルまたはデータ フレーム オブジェクトを指定するデータ ソース オブジェクトまたは文字列。

メソッド

高速ツリー型を示す文字列:

  • "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 を指定すると、使用するスレッドの数が内部的に決定されます。 既定値は なし です。

random_seed

ランダム シードを指定します。 既定値は なし です。

ml_transforms

トレーニング前にデータに対して実行する MicrosoftML 変換の一覧を指定します。変換を実行しない場合は None を指定します。 サポートされている変換については、「 featurize_textcategorical、および categorical_hash」を参照してください。 これらの変換は、指定した Python 変換の後に実行されます。 既定値は なし です。

ml_transform_vars

ml_transformsで使用する変数名の文字ベクトルを指定します。使用しない場合は 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を参照)。 すべての式と同様に、 row_selection は、 expression 関数を使用して関数呼び出しの外部で定義できます。

変換

サポートされていません。 変数変換の最初のラウンドを表すフォームの式。 すべての式と同様に、 transforms (または row_selection) は、 expression 関数を使用して関数呼び出しの外部で定義できます。

transform_objects

サポートされていません。 transformstransform_function、およびrow_selectionで参照できるオブジェクトを含む名前付きリスト。

transform_function

変数変換関数。

transform_variables

変換関数に必要な入力データ セット変数の文字ベクトル。

transform_packages

サポートされていません。 変数変換関数で使用するために使用可能にし、事前に読み込む追加の Python パッケージ ( RxOptions.get_option("transform_packages")で指定されているものの外部) を指定する文字ベクトル。 たとえば、transforms引数とtransform_function引数を使用して revoscalepy 関数で明示的に定義されたものや、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

有効な RxComputeContextで指定された計算を実行するコンテキストを設定します。 現在、ローカルおよび RxInSqlServer コンピューティング コンテキストがサポートされています。

アンサンブル

エンレンブリングの制御パラメーター。

返品ポリシー

トレーニング済みモデルを持つ FastForest オブジェクト。

このアルゴリズムはマルチスレッドであり、常にデータセット全体をメモリに読み込もうとします。

こちらも参照ください

rx_fast_treesrx_predict

References

Wikipedia: ランダム フォレスト

分位点回帰フォレスト

切り株から木、森へ

二項分類の例

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