microsoftml.rx_fast_trees: árboles potenciados
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)
Descripción
Aprendizaje automático: Fast Tree
Detalles
rx_fast_trees es una implementación de FastRank. FastRank es una implementación eficaz del algoritmo de potenciación del gradiente MART. La potenciación del gradiente es una técnica de aprendizaje automático para problemas de regresión. Genera cada árbol de regresión de forma gradual, usando una función de pérdida predefinida para medir el error en cada paso y corregirlo en el siguiente. Por tanto, el modelo de predicción es en realidad un conjunto de modelos de predicción más débiles. En los problemas de regresión, la potenciación genera una serie de árboles por pasos y, después, selecciona el árbol óptimo mediante una función arbitraria de pérdida diferenciable.
MART aprende un conjunto de árboles de regresión, que es un árbol de decisión con valores escalares en las hojas. Un árbol de decisión (o regresión) es un diagrama de flujo de árbol binario, donde, en cada nodo interior, uno decide con cuál de los dos nodos secundarios continuar, en función del valor de una de las características de entrada. En cada nodo hoja, se devuelve un valor. En los nodos interiores, la decisión se basa en la prueba "x <= v"
, donde x
es el valor de la característica en el ejemplo de entrada y v
es uno de los valores posibles de esta característica. Las funciones que puede producir un árbol de regresión son todas las funciones constantes definidas a trozos.
El conjunto de árboles se genera calculando, en cada paso, un árbol de regresión que aproxima el gradiente de la función de pérdida y agregándolo al árbol anterior con coeficientes que minimizan la pérdida del nuevo árbol. La salida del conjunto generado por MART en una instancia determinada es la suma de las salidas del árbol.
Si hay algún problema de clasificación binaria, la salida se convierte en una probabilidad usando alguna forma de calibración.
En el caso de un problema de regresión, la salida es el valor predicho de la función.
Si hay un problema de clasificación, las instancias se ordenan por el valor de salida del conjunto.
Si method
se establece en "regression"
, se usa una versión de regresión de FastTree. Si se establece en "ranking"
, se usa una versión de clasificación de FastTree. En el caso de la clasificación, las instancias deben ordenarse por la salida del conjunto de árboles. La única diferencia en la configuración de estas versiones está en la configuración de la calibración, que solo se necesita para la clasificación.
Argumentos
formula
Fórmula tal como se describe en revoscalepy.rx_formula.
Los términos de interacción y F()
actualmente no se admiten en microsoftml.
datos
Objeto de origen de datos o cadena de caracteres que especifica un archivo .xdf o un objeto de trama de datos.
método
Cadena de caracteres que especifica el tipo de Fast Tree: "binary"
para la clasificación binaria predeterminada de Fast Tree o "regression"
para la regresión de Fast Tree.
num_trees
Especifica el número total de árboles de decisión que se crearán en el conjunto. Si crea más árboles de decisión, puede obtener una mejor cobertura, pero aumenta el tiempo de entrenamiento. El valor predeterminado es 100.
num_leaves
Número máximo de hojas (nodos terminales) que se pueden crear en un árbol. Valores más altos pueden aumentar el tamaño del árbol y mejorar la precisión, pero corre el riesgo de sobreajuste y de necesitar tiempos de entrenamiento más prolongados. El valor predeterminado es 20.
learning_rate
Determina el tamaño del paso realizado en la dirección del gradiente en cada paso del proceso de aprendizaje. Esto determina la rapidez o lentitud con la que el aprendiz encuentra la solución óptima. Si el tamaño del paso es demasiado grande, puede pasar por alto la solución óptima. Si el tamaño del paso es demasiado pequeño, el entrenamiento tarda más tiempo en conseguir la mejor solución.
min_split
Número mínimo de instancias de entrenamiento necesarias para formar una hoja. Es decir, el número mínimo de documentos permitidos en una hoja de un árbol de regresión, de los datos de submuestreo. Una división (split) significa que las características de cada nivel del árbol (nodo) se dividen de forma aleatoria. El valor predeterminado es 10. Solo se cuenta el número de instancias, incluso si están ponderadas.
example_fraction
Fracción de instancias elegidas aleatoriamente que se usarán para cada árbol. El valor predeterminado es 0,7.
feature_fraction
Fracción de características elegidas aleatoriamente que se usarán para cada árbol. El valor predeterminado es 1.
split_fraction
Fracción de características elegidas aleatoriamente que se usarán en cada división. El valor predeterminado es 1.
num_bins
Número máximo de valores distintos (intervalos) por característica. Si la característica tiene menos valores que el número indicado, cada valor se pone en su propio rango. Si hay más valores, el algoritmo crea numBins
intervalos.
first_use_penalty
Coeficiente de penalización del primer uso de una característica. Es una forma de regularización que genera una penalización por usar una nueva característica al crear el árbol. Aumente este valor para crear árboles que no usen muchas características. El valor predeterminado es 0.
gain_conf_level
Requisito de confianza de la ganancia de ajuste del árbol (debe estar en el intervalo [0,1)). El valor predeterminado es 0.
unbalanced_sets
Si es True
, se usan derivadas optimizadas para conjuntos desequilibrados. Solo es aplicable cuando type
es igual a "binary"
.
El valor predeterminado es False
.
train_threads
Número de subprocesos que se usan en el entrenamiento. El valor predeterminado es 8.
random_seed
Especifica la inicialización aleatoria. El valor predeterminado es None.
ml_transforms
Especifica una lista de transformaciones de MicrosoftML que deben realizarse en los datos antes del entrenamiento, o bien None si no hay que realizar ninguna transformación. Vea featurize_text
, categorical
y categorical_hash
para saber las transformaciones que se admiten.
Estas transformaciones se realizan después de cualquier transformación de Python especificada.
El valor predeterminado es None.
ml_transform_vars
Especifica un vector de caracteres de nombres de variable que deben usarse en ml_transforms
, o bien None si no hay que usar ninguno.
El valor predeterminado es None.
row_selection
NO ADMITIDO. Especifica las filas (observaciones) del conjunto de datos que debe usar el modelo con el nombre de una variable lógica del conjunto de datos (entre comillas) o con una expresión lógica que usa variables en el conjunto de datos. Por ejemplo:
row_selection = "old"
solo usará observaciones en las que el valor de la variableold
seaTrue
.row_selection = (age > 20) & (age < 65) & (log(income) > 10)
solo usa observaciones en las que el valor de la variableage
está entre 20 y 65, y el valor delog
de la variableincome
es mayor que 10.
La selección de fila se realiza después de procesar las transformaciones de datos (vea los argumentos transforms
o transform_function
). Al igual que con todas las expresiones, row_selection
se puede definir fuera de la llamada de función mediante la función expression
.
transformaciones
NO ADMITIDO. Expresión del formulario que representa la primera ronda de transformaciones de variables. Al igual que con todas las expresiones, transforms
(o row_selection
) se puede definir fuera de la llamada de función mediante la función expression
.
transform_objects
NO ADMITIDO. Lista con nombre que contiene objetos a los que pueden hacer referencia transforms
, transform_function
y row_selection
.
transform_function
Función de transformación de variables.
transform_variables
Vector de caracteres de variables del conjunto de datos de entrada necesarias para la función de transformación.
transform_packages
NO ADMITIDO. Vector de caracteres que especifica paquetes de Python adicionales (aparte de los especificados en RxOptions.get_option("transform_packages")
) que deben cargarse previamente y estar disponibles para usarlos en las funciones de transformación de variables.
Por ejemplo, los definidos explícitamente en las funciones de revoscalepy mediante los argumentos transforms
y transform_function
, o los definidos implícitamente con los argumentos formula
y row_selection
. El argumento transform_packages
también puede ser None, que indica que no se cargan previamente más paquetes aparte de los de RxOptions.get_option("transform_packages")
.
transform_environment
NO ADMITIDO. Entorno definido por el usuario que sirve como primario de todos los entornos desarrollados internamente y que se usa para la transformación de datos variables.
Si es transform_environment = None
, se usa un nuevo entorno "hash" con revoscalepy.baseenv como primario.
blocks_per_read
Especifica el número de bloques que se leerán para cada fragmento de datos leídos del origen de datos.
report_progress
Valor entero que especifica el nivel de notificación del progreso del procesamiento de filas:
0
: no se notifica el progreso.1
: se imprime y actualiza el número de filas procesadas.2
: se notifican las filas procesadas y los intervalos.3
: se notifican las filas procesadas y todos los intervalos.
verbose
Valor entero que especifica la cantidad de salida deseada.
Si es 0
, no se imprime ninguna salida detallada durante los cálculos. Los valores enteros de 1
a 4
proporcionan cantidades crecientes de información.
compute_context
Establece el contexto en el que se ejecutan los cálculos, especificado con revoscalepy.RxComputeContext. Actualmente, se admiten los contextos de proceso local y revoscalepy.RxInSqlServer.
ensemble
Parámetros de control para la formación de conjuntos.
Devoluciones
Objeto FastTrees
con el modelo entrenado.
Nota
Este algoritmo es multiproceso y siempre intentará cargar todo el conjunto de datos en la memoria.
Vea también
Referencias
Wikipedia: Gradient boosting (Potenciación del gradiente)
Aproximación de funciones expansiva: una máquina de potenciación del gradiente.
Ejemplo de clasificación binaria
'''
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))
Salida:
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
Ejemplo de regresión
'''
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)
Salida:
'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