Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Usage
microsoftml.rx_fast_linear()
Description
Un entrenador de optimización para la clasificación binaria lineal y regresión de Asciendentes Estocásticos Duales (SDCA).
Detalles
rx_fast_linear es un entrenador basado en el método Stochastic Dual Coordinate Ascent (SDCA), una técnica de optimización de última generación para funciones objetivo convexas. El algoritmo puede escalarse para su uso en grandes conjuntos de datos fuera de memoria debido a una implementación semi-asincronizada que soporta multihilo.
La convergencia se sostiene imponiendo periódicamente la sincronización entre actualizaciones primal y dual en un hilo separado. También se ofrecen varias opciones de funciones de pérdida. El método SDCA combina varias de las mejores propiedades y capacidades de la regresión logística y los algoritmos SVM.
Para más información sobre SDCA, consulte las citas en la sección de referencias.
Los algoritmos tradicionales de optimización, como el descenso de gradiente estocástico (SGD), optimizan directamente la función de pérdida empírica. La SDCA elige un enfoque diferente que optimiza el problema dual. La función de pérdida dual se parametriza mediante pesos por ejemplo. En cada iteración, cuando se lee un ejemplo de entrenamiento del conjunto de datos de entrenamiento, el peso correspondiente del ejemplo se ajusta para que la función de pérdida dual se optimice respecto al ejemplo actual. SDCA no necesita tasa de aprendizaje para determinar el tamaño del paso, como sí requieren varios métodos de descenso en gradiente.
rx_fast_linear actualmente soporta clasificación binaria con tres tipos de funciones de pérdida: pérdida logarítmica, pérdida por bisagra y pérdida por bisagra suavizada.
La regresión lineal también soporta la función de pérdida al cuadrado. La regularización elástica de la red puede especificarse mediante los l2_weight parámetros y l1_weight . Nótese que tiene l2_weight un efecto sobre la tasa de convergencia. En general, cuanto mayor sea , l2_weightmás rápido converge SDCA.
Nótese que rx_fast_linear es un algoritmo de optimización estocástica y de streaming. Los resultados dependen del orden de los datos de entrenamiento. Para obtener resultados reproducibles, se recomienda que se fije shuffle a False y train_threads a 1.
Argumentos
formula
La fórmula descrita en revoscalepy.rx_formula.
Los términos de interacción y F() no se admiten actualmente en microsoftml.
datos
Objeto de origen de datos o cadena de caracteres que especifica un archivo .xdf o un objeto de trama de datos.
method
Especifica el tipo de modelo con una cadena de caracteres: "binary" para la clasificación binaria predeterminada o "regression" para regresión lineal.
loss_function
Especifica la función de pérdida empírica a optimizar. Para la clasificación binaria, están disponibles las siguientes opciones:
log_loss: La pérdida de tronco. Este es el valor predeterminado.hinge_loss: La pérdida de bisagra SVM. Su parámetro representa el tamaño del margen.smooth_hinge_loss: La pérdida suavizada de la bisagra. Su parámetro representa la constante de suavizado.
Para la regresión lineal, actualmente se soporta la pérdida squared_loss al cuadrado. Cuando este parámetro se establece en Ninguno, su valor por defecto depende del tipo de aprendizaje:
log_losspara la clasificación binaria.squared_losspara regresión lineal.
El siguiente ejemplo cambia la loss_function a hinge_loss: rx_fast_linear(..., loss_function=hinge_loss()).
l1_weight
Especifica el peso de regularización L1. El valor debe ser o bien no negativo o Ninguno. Si se especifica Ninguno , el valor real se calcula automáticamente en función del conjunto de datos. Ninguno es el valor por defecto.
l2_weight
Especifica el peso de regularización L2. El valor debe ser o bien no negativo o Ninguno. Si se especifica Ninguno , el valor real se calcula automáticamente en función del conjunto de datos. Ninguno es el valor por defecto.
train_threads
Especifica cuántos hilos concurrentes pueden usarse para ejecutar el algoritmo. Cuando este parámetro se establece en Ninguno, el número de hilos utilizados se determina en función del número de procesadores lógicos disponibles para el proceso, así como de la escasez de datos. Configúralo para 1 ejecutar el algoritmo en un solo hilo.
convergence_tolerance
Especifica el umbral de tolerancia utilizado como criterio de convergencia. Debe estar entre 0 y 1. El valor por defecto es 0.1. Se considera que el algoritmo ha convergido si la brecha de dualidad relativa, que es la razón entre la brecha de dualidad y la pérdida primal, queda por debajo de la tolerancia de convergencia especificada.
max_iterations
Especifica un límite superior para el número de iteraciones de entrenamiento. Este parámetro debe ser positivo o Ninguno. Si se especifica Ninguno , el valor real se calcula automáticamente en función del conjunto de datos. Cada iteración requiere un paso completo sobre los datos de entrenamiento. El entrenamiento termina después de que el número total de iteraciones alcanza la cota superior especificada o cuando la función de pérdida converge, lo que ocurra antes.
barajar
Especifica si se deben barajar los datos de entrenamiento. Configura True para barajar los datos; False no para barajar. El valor por defecto es True. SDCA es un algoritmo de optimización estocástica. Si se activa el barajado, los datos de entrenamiento se barajan en cada iteración.
check_frequency
El número de iteraciones tras las cuales se calcula y comprueba la función de pérdida para determinar si ha convergido. El valor especificado debe ser un entero positivo o Ninguno. Si no es ninguno, el valor real se calcula automáticamente en función del conjunto de datos. De lo contrario, por ejemplo, si checkFrequency = 5 se especifica, entonces se calcula la función de pérdida y se comprueba la convergencia cada 5 iteraciones. El cálculo de la función de pérdida requiere un paso completo y separado sobre los datos de entrenamiento.
normalizar
Especifica el tipo de normalización automática usada:
"Auto": si se necesita normalización, se realiza automáticamente. Esta es la opción predeterminada."No": no se realiza ninguna normalización."Yes": se realiza la normalización."Warn": si se necesita normalización, se muestra un mensaje de advertencia, pero no se realiza la normalización.
La normalización vuelve a escalar intervalos de datos dispares a una escala estándar. El escalado de características garantiza que las distancias entre los puntos de datos son proporcionales y permite que varios métodos de optimización, como el descenso de degradado converjan mucho más rápido. Si se realiza la normalización, se usa un MaxMin normalizador. Normaliza los valores de un intervalo [a, b] donde -1 <= a <= 0 y 0 <= b <= 1 .b - a = 1 Este normalizador conserva la dispersidad asignando cero a cero.
ml_transforms
Especifica una lista de transformaciones de MicrosoftML que se van a realizar en los datos antes del entrenamiento o None si no se va a realizar ninguna transformación. Consulte featurize_text, categoricaly categorical_hash, para ver las transformaciones admitidas.
Estas transformaciones se realizan después de las transformaciones de Python especificadas.
El valor predeterminado es None.
ml_transform_vars
Especifica un vector de caracteres de nombres de variable que se van a usar en ml_transforms o Ninguno si no se va a usar ninguno.
El valor predeterminado es None.
row_selection
NO SE ADMITE. Especifica las filas (observaciones) del conjunto de datos que va a usar el modelo con el nombre de una variable lógica del conjunto de datos (entre comillas) o con una expresión lógica mediante variables del conjunto de datos. Por ejemplo:
row_selection = "old"solo usará observaciones en las que el valor de la variableoldesTrue.row_selection = (age > 20) & (age < 65) & (log(income) > 10)solo usa observaciones en las que el valor de laagevariable está comprendido entre 20 y 65 y el valor deloglaincomevariable es mayor que 10.
La selección de filas 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 expression función .
Transforma
NO SE ADMITE. 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 expression función .
transform_objects
NO SE ADMITE. Lista con nombre que contiene objetos a los que puede hacer referencia transforms, transform_functiony 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 SE ADMITE. Vector de caracteres que especifica paquetes adicionales de Python (fuera de los especificados en RxOptions.get_option("transform_packages")) que se van a poner a disposición y cargar previamente para su uso en las funciones de transformación de variables.
Por ejemplo, los definidos explícitamente en funciones de revoscalepy a través de sus transforms argumentos y transform_function o los definidos implícitamente a través de sus formula argumentos o row_selection . El transform_packages argumento también puede ser None, lo que indica que no hay paquetes externos RxOptions.get_option("transform_packages") cargados previamente.
transform_environment
NO SE ADMITE. Un entorno definido por el usuario que sirve como elemento primario para todos los entornos desarrollados internamente y se usa para la transformación de datos variables.
Si transform_environment = Nonees , se usa en su lugar un nuevo entorno "hash" con revoscalepy.baseenv primario.
blocks_per_read
Especifica el número de bloques que se van a leer para cada fragmento de datos leídos desde el origen de datos.
report_progress
Valor entero que especifica el nivel de informes sobre el progreso del procesamiento de filas:
0: no se notifica ningún progreso.1: el número de filas procesadas se imprime y actualiza.2: se notifican filas procesadas y tiempos.3: se notifican filas procesadas y todos los intervalos.
excesivamente detallado
Valor entero que especifica la cantidad de salida deseada.
Si 0es , no se imprime ninguna salida detallada durante los cálculos. Valores enteros de 1 para 4 proporcionar cantidades crecientes de información.
compute_context
Establece el contexto en el que se ejecutan los cálculos, especificados con una revoscalepy válida. RxComputeContext. Actualmente local y revoscalepy. Se admiten contextos de proceso RxInSqlServer.
conjunto
Parámetros de control para el montaje.
Returns
Objeto FastLinear con el modelo entrenado.
Nota:
Este algoritmo es multihilo y no intentará cargar todo el conjunto de datos en memoria.
References
Escalando el ascenso estocástico de coordenadas duales
Métodos estocásticos de ascenso de coordenadas duales para la minimización regularizada de pérdidas
Ejemplo de clasificación binaria
'''
Binary Classification.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, 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_linear(
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))
Salida:
Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 186, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 8064.
Auto-tuning parameters: L2 = 2.666837E-05.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 568.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.5810985
Elapsed time: 00:00:00.0084876
Beginning processing data.
Rows Read: 62, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0292334
Finished writing 62 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds
isCase PredictedLabel Score Probability
0 True True 0.990544 0.729195
1 False False -2.307120 0.090535
2 False False -0.608565 0.352387
3 True True 1.028217 0.736570
4 True False -3.913066 0.019588
Ejemplo de regresión
'''
Regression.
'''
import numpy
import pandas
from microsoftml import rx_fast_linear, rx_predict
from revoscalepy.etl.RxDataStep import rx_data_step
from microsoftml.datasets.datasets import get_dataset
attitude = get_dataset("attitude")
import sklearn
if sklearn.__version__ < "0.18":
from sklearn.cross_validation import train_test_split
else:
from sklearn.model_selection import train_test_split
attitudedf = attitude.as_df()
data_train, data_test = train_test_split(attitudedf)
model = rx_fast_linear(
formula="rating ~ complaints + privileges + learning + raises + critical + advance",
method="regression",
data=data_train)
# RuntimeError: The type (RxTextData) for file is not supported.
score_ds = rx_predict(model, data=data_test,
extra_vars_to_write=["rating"])
# Print the first five rows
print(rx_data_step(score_ds, number_rows_read=5))
Salida:
Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0.001, Transform Time: 0
Beginning processing data.
Beginning processing data.
Rows Read: 22, Read Time: 0, Transform Time: 0
Beginning processing data.
Using 2 threads to train.
Automatically choosing a check frequency of 2.
Auto-tuning parameters: maxIterations = 68180.
Auto-tuning parameters: L2 = 0.01.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 54.
Not training a calibrator because it is not needed.
Elapsed time: 00:00:00.1114324
Elapsed time: 00:00:00.0090901
Beginning processing data.
Rows Read: 8, Read Time: 0, Transform Time: 0
Beginning processing data.
Elapsed time: 00:00:00.0330772
Finished writing 8 rows.
Writing completed.
Rows Read: 5, Total Rows Processed: 5, Total Chunk Time: Less than .001 seconds
rating Score
0 71.0 72.630440
1 67.0 56.995350
2 67.0 52.958641
3 72.0 80.894539
4 50.0 38.375427
Funciones de pérdida
Contenido relacionado
- microsoftml.hinge_loss: función de pérdida de bisagra
- microsoftml.log_loss: función de pérdida de registro
- microsoftml.smoothed_hinge_loss: función de pérdida de bisagra suavizada
- microsoftml.squared_loss: función pérdida cuadrada
- microsoftml.rx_predict: puntuaciones con un modelo de Aprendizaje automático de Microsoft