microsoftml.rx_fast_trees: árvores aumentadas

Uso

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)

Descrição

Árvore rápida de machine learning

Detalhes

rx_fast_trees é uma implementação de FastRank. FastRank é uma implementação eficiente do algoritmo de gradient boosting MART. O aumento de gradiente é uma técnica de aprendizado de máquina para problemas de regressão. Ele cria cada árvore de regressão por etapas usando uma função de perda predefinida para medir o erro em cada etapa e corrigi-lo na próxima. Portanto, o modelo de previsão é na verdade um conjunto de modelos de previsão mais fracos. Nos problemas de regressão, o aumento cria uma série dessas árvores por etapas e seleciona a árvore ideal usando uma função de perda diferenciável arbitrária.

O MART aprende um conjunto de árvores de regressão, que é uma árvore de decisão com valores escalares nas folhas. Uma árvore de decisão (ou de regressão) é um fluxograma semelhante a uma árvore binária, na qual em cada nó interior é decidido para qual dos dois nós filho o processo deve continuar com base em um dos valores de recurso da entrada. Em cada nó folha, um valor é retornado. No nó interior, a decisão se baseia no teste "x <= v", onde x é o valor do recurso no exemplo de entrada e v é um dos possíveis valores desse recurso. As funções que podem ser produzidas por uma árvore de regressão são constante funções de partes.

O conjunto de árvores é produzido por computação, em cada etapa, uma árvore de regressão que aproxima o gradiente da função de perda e o adiciona à árvore anterior com coeficientes que minimizam a perda da nova árvore. A saída do ensemble produzido por MART em uma determinada instância é a soma das saídas da árvore.

  • No caso de um problema de classificação binária, a saída é convertida em uma probabilidade usando alguma forma de calibragem.

  • No caso de um problema de regressão, a saída é o valor previsto da função.

  • No caso de um problema de classificação, as instâncias são ordenadas pelo valor de saída do conjunto.

Se o method é definido como "regression", uma versão de regressão de FastTree é usada. Se definido como "ranking", uma versão de classificação de FastTree é usada. No caso de classificação, as instâncias devem ser ordenadas pela saída do conjunto de árvores. A única diferença nas configurações dessas versões é nas configurações de calibragem, que são necessárias apenas para classificação.

Argumentos

formula

A fórmula, conforme a descrição em revoscalepy.rx_formula. No momento, não há suporte para termos de interação nem para F() no microsoftml.

data

Um objeto de fonte de dados ou uma cadeia de caracteres que especifica um arquivo .xdf ou um objeto de dataframe.

method

Uma cadeia de caracteres que especifica o tipo de árvore rápida: "binary" para a classificação binária de árvore rápida padrão ou "regression" para regressão de árvore rápida.

num_trees

Especifica o número total de árvores de decisão a serem criadas no conjunto. Criando mais árvores de decisão, você pode obter uma cobertura melhor, mas o tempo de treinamento aumenta. O valor padrão é 100.

num_leaves

O número máximo de folhas (nós de terminal) que podem ser criadas em uma árvore. Valores mais altos podem aumentar o tamanho da árvore e melhorar a precisão, mas há um risco de sobreajuste e de necessidade de mais tempo de treinamento. O valor padrão é 20.

learning_rate

Determina o tamanho da etapa realizada na direção do gradiente em cada etapa do processo de aprendizado. Determina a velocidade em que o aprendiz é convergido na solução ideal. Se o tamanho da etapa for muito grande, você poderá exceder a solução ideal. Se o tamanho da etapa muito pequeno, o treinamento vai demorar mais para ser convergido na melhor solução.

min_split

Número mínimo de instâncias de treinamento necessárias para formar uma folha. Ou seja, o número mínimo de documentos permitidos em uma folha de uma árvore de regressão, fora dos dados subamostrados. Uma "divisão" significa que os recursos em cada nível da árvore (nó) são divididos aleatoriamente. O valor padrão é 10. Somente o número de instâncias é contado, mesmo que as instâncias sejam ponderadas.

example_fraction

A fração de instâncias escolhidas aleatoriamente a ser usada para cada árvore. O valor padrão é 0,7.

feature_fraction

A fração de recursos escolhidos aleatoriamente a ser usada para cada árvore. O valor padrão é 1.

split_fraction

A fração de recursos escolhidos aleatoriamente a ser usada em cada divisão. O valor padrão é 1.

num_bins

Número máximo de valores distintos (compartimentos) por recurso. Se o recurso tiver menos valores do que o número indicado, cada valor será colocado no respectivo compartimento. Se houver mais valores, o algoritmo criará numBins compartimentos.

first_use_penalty

O recurso primeiro usa o coeficiente de penalidade. Essa é uma forma de regularização que gera uma penalidade pelo uso de um novo recurso ao criar a árvore. Aumente esse valor para criar árvores que não usam muitos recursos. O valor padrão é 0.

gain_conf_level

Requisito de confiança de ganho de ajuste da árvore (deve estar no intervalo [0,1]). O valor padrão é 0.

unbalanced_sets

Se definido como True, as derivadas otimizadas para conjuntos não balanceadas são usadas. Aplicável somente quando type é igual a "binary". O valor padrão é False.

train_threads

O número de threads a serem usados no treinamento. O valor padrão é 8.

random_seed

Especifica a semente aleatória. O valor padrão é None.

ml_transforms

Especifica uma lista de transformações do MicrosoftML a serem executadas nos dados antes do treinamento ou None para que nenhuma transformação seja executada. Confira featurize_text, categorical e categorical_hash, para saber quais são as transformações com suporte. Essas transformações são executadas após qualquer transformação do Python especificada. O valor padrão é None.

ml_transform_vars

Especifica um vetor de caracteres de nomes de variáveis a ser usado em ml_transforms ou None para que nenhum vetor seja usado. O valor padrão é None.

row_selection

SEM SUPORTE. Especifica as linhas (observações) do conjunto de dados que devem ser usadas pelo modelo com o nome de uma variável lógica do conjunto de dados (entre aspas) ou com uma expressão lógica usando variáveis no conjunto de dados. Por exemplo:

  • row_selection = "old" usará apenas observações nas quais o valor da variável old seja True.

  • row_selection = (age > 20) & (age < 65) & (log(income) > 10) apenas usa observações nas quais o valor da variável age está entre 20 e 65 e o valor de log da variável income é maior que 10.

A seleção de linha é executada após o processamento de todas as transformações de dados (confira os argumentos transforms ou transform_function). Assim como acontece com todas as expressões, é possível definir row_selection fora da chamada de função usando a função expression.

transformações

SEM SUPORTE. Uma expressão do formato que representa a primeira rodada de transformações de variável. Assim como acontece com todas as expressões, é possível definir transforms (ou row_selection) fora da chamada de função usando a função expression.

transform_objects

SEM SUPORTE. Uma lista nomeada que contém objetos que podem ser referenciados por transforms, transform_function e row_selection.

transform_function

A função de transformação de variável.

transform_variables

Um vetor de caracteres de variáveis do conjunto de dados de entrada necessário para a função de transformação.

transform_packages

SEM SUPORTE. Um vetor de caracteres que especifica pacotes Python adicionais (fora aqueles especificados em RxOptions.get_option("transform_packages")) a serem disponibilizados e pré-carregados para uso em funções de transformação de variável. Por exemplo, os definidos explicitamente nas funções revoscalepy por meio dos respectivos argumentos transforms e transform_function ou os definidos implicitamente por meio dos respectivos argumentos formula ou row_selection. O argumento transform_packages também pode ser None, indicando que nenhum pacote fora de RxOptions.get_option("transform_packages") é pré-carregado.

transform_environment

SEM SUPORTE. Um ambiente definido pelo usuário para funcionar como um pai de todos os ambientes desenvolvidos internamente e usados para transformação de dados de variável. Se transform_environment = None, um novo ambiente de "hash" com revoscalepy.baseenv pai é usado.

blocks_per_read

Especifica o número de blocos a serem lidos em cada parte dos dados lidos da fonte de dados.

report_progress

Um valor inteiro que especifica o nível de relatório sobre o progresso do processamento de linha:

  • 0: não é relatado nenhum progresso.

  • 1: o número de linhas processadas é impresso e atualizado.

  • 2: as linhas processadas e os tempos são relatados.

  • 3: as linhas processadas e todos os tempos são relatados.

verbose

Um valor inteiro que especifica a quantidade de saída desejada. Se definido como 0, não será impressa nenhuma saída detalhada durante os cálculos. Valores inteiros de 1 a 4 fornecem quantidades crescentes de informações.

compute_context

Define o contexto no qual as computações são executadas, especificado com um revoscalepy.RxComputeContext válido. No momento, há suporte para os contextos de computação local e revoscalepy.RxInSqlServer.

ensemble

Parâmetros de controle para conjuntos.

Retornos

Um objeto FastTrees com o modelo treinado.

Observação

Esse algoritmo é multithreading e sempre tentará carregar o conjunto de dados inteiro na memória.

Confira também

rx_fast_forest, rx_predict

Referências

Wikipédia: Gradient boosting (Gradient boosting em árvore)

Aproximação de função greedy: um computador de gradient boosting.

Exemplo de classificação binária

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

Saída:

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

Exemplo de regressão

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

Saída:

'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