다음을 통해 공유


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

기계 학습 Fast Forest

세부 정보

의사 결정 트리는 입력에 일련의 간단한 테스트를 수행하는 비 파라메트릭 모델입니다. 이 의사 결정 절차는 입력이 처리 중인 인스턴스와 유사했던 학습 데이터 세트에 있는 출력에 매핑됩니다. 적절한 리프 노드에 도달하고 출력 결정이 반환될 때까지 트리의 분기를 통해 각 인스턴스를 재귀적으로 매핑하는 유사성 측정값에 따라 이진 트리 데이터 구조의 각 노드에서 의사 결정이 이루어집니다.

의사 결정 트리를 사용하는 경우의 몇 가지 이점은 다음과 같습니다.

  • 학습 및 예측 중에 계산과 메모리 사용량 측면에서 모두 효율적입니다.

  • 비선형 의사 결정 경계를 표시할 수 있습니다.

  • 통합 기능 선택 및 분류를 수행합니다.

  • 잡음 기능이 있는 경우 탄력적입니다.

빠른 포리스트 회귀는 rx_fast_trees의 회귀 트리 학습자를 사용하는 랜덤 포리스트 및 분위수 회귀 포리스트 구현입니다. 이 모델은 의사 결정 트리의 앙상블로 구성되어 있습니다. 의사 결정 포리스트의 각 트리는 예측을 통해 가우스 분포를 출력합니다. 모델의 모든 트리에 대한 결합 분포에 가장 가까운 가우스 분포를 찾기 위해 트리 앙상블에 대해 집계가 수행됩니다.

이 의사 결정 포리스트 분류자는 의사 결정 트리 앙상블로 구성됩니다. 일반적으로 앙상블 모델은 단일 의사 결정 트리에 비해 적용 범위가 넓고 정확도가 높습니다. 의사 결정 포리스트의 각 트리는 가우스 분포를 출력합니다.

인수

formula

revoscalepy.rx_formula에 설명된 수식입니다. 상호 작용 용어 및 F()는 현재 microsoftml에서 지원되지 않습니다.

데이터

.xdf 파일 또는 데이터 프레임 개체를 지정하는 데이터 원본 개체 또는 문자열입니다.

메서드(method)

Fast Tree 형식을 나타내는 문자열:

  • 기본 Fast Tree 이진 분류의 경우 "binary"

  • Fast Tree 회귀의 경우 "regression"

num_trees

앙상블에서 만들 의사 결정 트리의 총수를 지정합니다. 더 많은 의사 결정 트리를 만들면 잠재적으로 더 나은 적용 범위를 얻을 수 있지만 학습 시간이 늘어나게 됩니다. 기본값은 100입니다.

num_leaves

임의의 트리에서 만들 수 있는 리프(터미널 노드)의 최대 개수. 값이 클수록 트리의 크기가 증가하고 정밀도가 향상될 수 있지만, 과잉 맞춤으로 인해 학습 시간이 길어질 위험이 있습니다. 기본값은 20입니다.

min_split

리프를 만드는 데 필요한 최소 학습 인스턴스 수. 즉, 하위 샘플링된 데이터 중 회귀 트리의 리프에서 허용되는 최소 문서 수입니다. ‘분할’은 트리(노드)의 각 수준에 있는 기능이 임의로 분할됨을 의미합니다. 기본값은 10입니다.

example_fraction

각 트리에 사용할 임의로 선택된 인스턴스의 비율. 기본값은 0.7입니다.

feature_fraction

각 트리에 사용할 임의로 선택된 기능의 비율. 기본값은 0.7입니다.

split_fraction

각 분할에 사용할 임의로 선택된 기능의 비율. 기본값은 0.7입니다.

num_bins

기능당 고유한 값(bin)의 최대 개수. 기본값은 255입니다.

first_use_penalty

이 기능은 먼저 페널티 계수를 사용합니다. 기본값은 0입니다.

gain_conf_level

트리 맞춤은 신뢰도 요구 사항을 얻습니다(범위에 [0,1]있어야 합니다). 기본값은 0입니다.

train_threads

학습에 사용할 스레드의 수. None이 지정된 경우 사용할 스레드 수가 내부적으로 결정됩니다. 기본값은 없음입니다.

random_seed

임의의 시드를 지정합니다. 기본값은 없음입니다.

ml_transforms

학습 전에 데이터에서 수행할 MicrosoftML 변환 목록을 지정하거나 수행할 변환이 없는 경우 None을 지정합니다. 지원되는 변환은 featurize_text, categorical, 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 참조). 모든 식과 마찬가지로 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")에 지정된 패키지 외부)를 지정하는 문자 벡터입니다. 예를 들어 transformstransform_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: 처리된 행 및 모든 타이밍이 보고됩니다.

verbose

원하는 출력의 양을 지정하는 정수 값입니다. 0이면 계산 중에 자세한 정보가 출력되지 않습니다. 1에서 4 사이의 정수 값은 더 많은 양의 정보를 제공합니다.

compute_context

유효한 RxComputeContext로 지정되어 계산이 실행되는 컨텍스트를 설정합니다. 현재 로컬 및 RxInSqlServer 컴퓨팅 컨텍스트가 지원됩니다.

ensemble

앙상블을 위한 제어 매개 변수입니다.

반환

학습된 모델이 있는 FastForest 개체입니다.

참고

이 알고리즘은 다중 스레드이며 항상 전체 데이터 세트를 메모리에 로드하려고 시도합니다.

추가 정보

rx_fast_trees, rx_predict

참고 자료

Wikipedia: 랜덤 포리스트

분위수 회귀 포리스트

From Stumps to Trees to Forests(스텀프에서 트리, 포리스트로 심화)

이진 분류 예제

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