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

기계 학습 Fast Tree

세부 정보

rx_fast_trees는 FastRank의 구현입니다. FastRank는 MART 경사 부스팅 알고리즘의 효율적인 구현입니다. 그라데이션 승격은 회귀 문제에 대한 기계 학습 기술입니다. 미리 정의된 손실 함수를 사용해 각 단계의 오류를 측정하고 다음 단계에서 오류를 수정하는 방식으로 각 회귀 트리를 단계별로 작성합니다. 따라서 이 예측 모델은 실제로는 더 약한 예측 모델의 앙상블입니다. 회귀 문제에서 승격은 일련의 해당 트리를 단계별로 빌드한 다음, 임의의 미분 가능한 손실 함수를 사용하여 최적의 트리를 선택합니다.

MART는 리프에 스칼라 값이 있는 의사 결정 트리인 회귀 트리의 앙상블을 학습합니다. 의사 결정(또는 회귀) 트리는 각 내부 노드에서 입력의 기능 값 중 하나를 기반으로 계속할 두 자식 노드를 결정하는 이진 트리 형식의 순서도입니다. 각 리프 노드에서는 값이 반환됩니다. 내부 노드에서는 "x <= v" 테스트를 기준으로 결정이 수행됩니다. 여기서 x는 입력 샘플의 기능 값이고 v는 이 기능의 가능한 값 중 하나입니다. 회귀 트리를 통해 생성할 수 있는 함수는 모두 구간적 상수 함수입니다.

각 단계에서 손실 함수의 경사 근사치를 계산하는 회귀 트리를 계산한 후 새 트리의 손실을 최소화하는 계수를 사용해 이전 트리에 추가하는 방식으로 트리 앙상블을 생성합니다. 지정된 인스턴스에 대해 MART에서 생성하는 앙상블의 출력은 트리 출력의 합입니다.

  • 이진 분류 문제의 경우에는 일종의 보정을 통해 출력을 확률로 변환합니다.

  • 회귀 문제의 경우 출력은 함수의 예측 값입니다.

  • 순위 문제의 경우에는 앙상블의 출력 값을 기준으로 인스턴스 순서를 지정합니다.

method"regression"으로 설정된 경우 FastTree의 회귀 버전이 사용됩니다. "ranking"으로 설정된 경우 FastTree의 순위 버전이 사용됩니다. 순위의 경우 인스턴스는 트리 앙상블의 출력으로 정렬되어야 합니다. 이러한 버전의 설정에서 유일한 차이점은 분류에만 필요한 보정 설정에 있습니다.

인수

formula

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

데이터

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

메서드(method)

Fast Tree의 유형을 지정하는 문자열: 기본 Fast Tree 이진 분류의 경우 "binary", Fast Tree 회귀의 경우 "regression"

num_trees

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

num_leaves

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

learning_rate

학습 프로세스의 각 단계에서 경사 방향으로 수행되는 단계의 크기를 결정합니다. 이는 학습자가 최적 솔루션에 얼마나 빠르게 또는 느리게 수렴하는지 결정합니다. 단계 크기가 너무 크면 최적 솔루션을 초과할 수 있습니다. 단계 크기가 너무 작으면 학습이 최적 솔루션으로 수렴하는 데 걸리는 시간이 길어집니다.

min_split

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

example_fraction

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

feature_fraction

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

split_fraction

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

num_bins

기능당 고유한 값(bin)의 최대 개수. 기능에 표시된 것보다 적은 수의 값이 있는 경우 각 값은 자체 bin에 배치됩니다. 더 많은 값이 있는 경우 알고리즘은 numBins bin을 만듭니다.

first_use_penalty

이 기능은 먼저 페널티 계수를 사용합니다. 트리를 만들 때 새 기능을 사용할 경우 페널티가 발생하는 정규화의 한 형태입니다. 많은 기능을 사용하지 않는 트리를 만들려면 이 값을 늘립니다. 기본값은 0입니다.

gain_conf_level

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

unbalanced_sets

True인 경우 불균형 집합에 최적화된 파생이 사용됩니다. type"binary"인 경우에만 적용할 수 있습니다. 기본값은 False입니다.

train_threads

학습에 사용할 스레드의 수. 기본값은 8입니다.

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

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

ensemble

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

반환

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

참고

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

추가 정보

rx_fast_forest, rx_predict

참고 자료

Wikipedia: 경사 부스팅(경사 트리 부스팅)

Greedy 함수 근사값: 경사 부스팅 머신

이진 분류 예제

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