

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Algoritmo de máquinas de factorización
<a name="fact-machines"></a>

El algoritmo de máquinas de factorización es un algoritmo de aprendizaje supervisado de uso general que puede utilizar para tareas de clasificación y regresión. Es una extensión de un modelo lineal que se ha diseñado para capturar de manera económica interacciones entre características dentro de conjuntos de datos dispersos de grandes dimensiones. Por ejemplo, en un sistema de predicción de clics, el modelo de máquinas de factorización puede capturar los patrones de tasas de clics observados cuando los anuncios de una determinada categoría de anuncios se colocan en páginas de una categoría de página específica. Las máquinas de factorización son una buena opción para las tareas que tratan con conjuntos de datos dispersos de grandes dimensiones, como la recomendación de productos y predicciones de clics.

**nota**  
La implementación de Amazon SageMaker AI del algoritmo Factorization Machines solo considera las interacciones por pares (segundo orden) entre características.

**Topics**
+ [Interfaz de entrada/salida para el algoritmo de máquinas de factorización](#fm-inputoutput)
+ [Recomendación de la instancia EC2 para el algoritmo de máquinas de factorización](#fm-instances)
+ [Cuadernos de ejemplo de máquinas de factorización](#fm-sample-notebooks)
+ [Funcionamiento de las máquinas de factorización](fact-machines-howitworks.md)
+ [Hiperparámetros de máquinas de factorización](fact-machines-hyperparameters.md)
+ [Ajuste de un modelo de máquinas de factorización](fm-tuning.md)
+ [Formatos de respuesta de máquinas de factorización](fm-in-formats.md)

## Interfaz de entrada/salida para el algoritmo de máquinas de factorización
<a name="fm-inputoutput"></a>

El algoritmo de máquinas de factorización se puede ejecutar en el modo de regresión o en el modo de clasificación binaria. En cada modo, puede proporcionarse un conjunto de datos en el canal de **prueba** junto con el conjunto de datos de canal de capacitación. La puntuación depende del modo utilizado. En el modo de regresión, el conjunto de datos de prueba se puntúa mediante la desviación cuadrática media (RMSE, Root Mean Square Error). En el modo de clasificación binario, el conjunto de datos de prueba se puntúa mediante la entropía cruzada binaria (pérdida de registro), la precisión (umbral = 0,5) y la puntuación F1 (umbral = 0,5).

Para el **entrenamiento**, el algoritmo de máquinas de factorización admite actualmente solo el formato `recordIO-protobuf` con tensores `Float32`. Puesto que su caso de uso es predominante en los datos dispersos, `CSV` no es un buen candidato. La capacitación de los modos File y Pipe es compatible con el formato protobuf integrado recordIO.

Para la **inferencia**, el algoritmo de máquinas de factorización admite los formatos `application/json` y `x-recordio-protobuf`. 
+ Para el problema de **clasificación binaria**, el algoritmo predice una puntuación y una etiqueta. La etiqueta es un número y puede ser `0` o `1`. La puntuación es un número que indica en qué medida el algoritmo cree que la etiqueta debe ser `1`. El algoritmo calcula la puntuación en primer lugar y, a continuación, obtiene la etiqueta del valor de puntuación. Si la puntuación superior o igual a 0,5, la etiqueta es `1`.
+ Para el **problema de regresión**, solo se devuelve una puntuación y es el valor esperado. Por ejemplo, si se utiliza máquinas de factorización para predecir una calificación de película, la puntuación es el valor de calificación esperado.

Consulte [Cuadernos de ejemplo de máquinas de factorización](#fm-sample-notebooks) para obtener más información sobre capacitación y los formatos de archivo de inferencia.

## Recomendación de la instancia EC2 para el algoritmo de máquinas de factorización
<a name="fm-instances"></a>

El algoritmo Amazon SageMaker AI Factorization Machines es altamente escalable y puede entrenarse en instancias distribuidas. Recomendamos realizar la capacitación y la inferencia con instancias de CPU para los conjuntos de datos dispersos y densos. En algunas circunstancias, el entrenamiento con uno o más GPUs datos densos puede ofrecer alguna ventaja. La capacitación con solo GPUs está disponible con datos densos. Utilice las instancias de CPU para los datos dispersos. El algoritmo de máquinas de factorización admite instancias P2, P3, G4dn y G5 para el entrenamiento y la inferencia.

## Cuadernos de ejemplo de máquinas de factorización
<a name="fm-sample-notebooks"></a>

Para ver un ejemplo de cuaderno que utiliza el algoritmo de máquinas de factorización con SageMaker IA para analizar las imágenes de dígitos manuscritos del cero al nueve en el conjunto de datos del MNIST, consulte [Introducción a las máquinas de factorización](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/factorization_machines_mnist/factorization_machines_mnist.html) con el MNIST. Para obtener instrucciones sobre cómo crear instancias de Jupyter Notebook y acceder a ellas, que puede utilizar para ejecutar el ejemplo en IA, consulte. SageMaker [Instancias de Amazon SageMaker Notebook](nbi.md) Una vez que haya creado una instancia de bloc de notas y la haya abierto, seleccione la pestaña **Ejemplos de SageMaker IA** para ver una lista de todos los ejemplos de SageMaker IA. Los cuadernos de ejemplo del algoritmo de máquinas de factorización se encuentran en la sección **Introducción a los algoritmos de Amazon**. Para abrir un cuaderno, haga clic en la pestaña **Usar** y seleccione **Crear copia**.

# Funcionamiento de las máquinas de factorización
<a name="fact-machines-howitworks"></a>

La tarea de predicción para un modelo de máquinas de factorización es calcular una función ŷ desde un conjunto de características xi a un dominio de destino. Este dominio es de valor real para la regresión y binario para la clasificación. El modelo de máquinas de factorización se supervisa, por lo que tiene un conjunto de datos de entrenamiento (xi,yj) disponible. Las ventajas de este modelo están en la forma en que utiliza una parametrización factorizada para capturar las interacciones de características por par. Puede representarse matemáticamente tal y como se indica a continuación: 

![\[Una imagen que contiene la ecuación para el modelo de máquinas de factorización.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/FM1.jpg)


 Los tres términos en esta ecuación corresponden, respectivamente, a los tres componentes del modelo: 
+ El término w0 representa el sesgo global.
+ Los plazos lineales wi modelan la intensidad de la variable número i.
+ Los plazos de factorización <vi,vj> modelan la interacción de par entre las variables número i y j.

Los plazos lineales y de sesgo globales son los mismos que en el modelo lineal. Las interacciones de características por pares se modelan en el tercer plazo como el producto interno de los factores correspondientes aprendidos para cada característica. Los factores aprendidos pueden considerarse también vectores de integración para cada característica. Por ejemplo, en una tarea de clasificación, si un par de características suele darse con más frecuencia en muestras etiquetadas positivas, el producto interno de sus factores debería ser grande. Es decir, los vectores de integración deberían estar próximos en la similaridad de coseno. Para obtener más información sobre el modelo de máquinas de factorización, consulte [Factorization Machines](https://www.ismll.uni-hildesheim.de/pub/pdfs/Rendle2010FM.pdf).

Para las tareas de regresión, se realiza el entrenamiento del modelo minimizando el error cuadrático entre la predicción del modelo ŷn y el valor de destino yn. Esto se denomina la pérdida cuadrada:

![\[Una imagen que contiene la ecuación para pérdida cuadrada.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/FM2.jpg)


Para una tarea de clasificación, el modelo se capacita minimizando la pérdida de entropía cruzada, conocida también como pérdida de registro: 

![\[Una imagen que contiene la ecuación para pérdida de registro.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/FM3.jpg)


donde: 

![\[Una imagen que contiene la función logística de los valores previstos.\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/FM4.jpg)


Para obtener más información acerca de funciones de pérdida para la clasificación, consulte la página sobre [funciones de pérdida para clasificación](https://en.wikipedia.org/wiki/Loss_functions_for_classification).

# Hiperparámetros de máquinas de factorización
<a name="fact-machines-hyperparameters"></a>

La siguiente tabla contiene los hiperparámetros para el algoritmo de máquinas de factorización. Estos son los parámetros que establecen los usuarios para facilitar la estimación de los parámetros del modelo a partir de los datos. Los hiperparámetros necesarios que deben establecerse se enumerarán en primer lugar, en orden alfabético. Los hiperparámetros opcionales que se pueden establecer aparecen a continuación en la lista, también en orden alfabético.


| Nombre del parámetro | Description (Descripción) | 
| --- | --- | 
| feature\$1dim | La dimensión del espacio de características de entrada. Podría tener un valor alto con la entrada dispersa. **Obligatorio** Valores válidos: número entero positivo Rango de valor sugerido: [10000,10000000]  | 
| num\$1factors | La dimensionalidad de la factorización. **Obligatorio** Valores válidos: número entero positivo Rango de valores sugerido: [2,1000], 64 normalmente genera buenos resultados y es un buen punto de partida.  | 
| predictor\$1type | El tipo de elemento de predicción. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/fact-machines-hyperparameters.html) **Obligatorio** Valores válidos: String `binary_classifier` o `regressor`  | 
| bias\$1init\$1method | El método de inicialización para el plazo de sesgo: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/fact-machines-hyperparameters.html) **Opcional** Valores válidos: `uniform`, `normal` o `constant` Valor predeterminado: `normal`  | 
| bias\$1init\$1scale | Rango de la inicialización del plazo de sesgo. Surte efecto si `bias_init_method` está establecido en `uniform`.  **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: ninguno  | 
| bias\$1init\$1sigma | La desviación estándar para la inicialización del plazo de sesgo. Surte efecto si `bias_init_method` está establecido en `normal`.  **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: 0,01  | 
| bias\$1init\$1value | El valor inicial del plazo de sesgo. Surte efecto si `bias_init_method` está establecido en `constant`.  **Opcional** Valores válidos: número flotante. Rango de valor sugerido: [1e-8, 512] Valor predeterminado: ninguno  | 
| bias\$1lr | La tasa de aprendizaje para el plazo de sesgo.  **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: 0.1  | 
| bias\$1wd | El decremento de ponderación para el plazo de sesgo.  **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: 0,01  | 
| clip\$1gradient | Parámetro del optimizador de recorte de gradientes. Recorta el gradiente proyectándolo en el intervalo [-`clip_gradient`, \$1`clip_gradient`].  **Opcional** Valores válidos: número flotante Valor predeterminado: ninguno  | 
| epochs | El número de fechas de inicio de capacitación que ejecutar.  **Opcional** Valores válidos: número entero positivo Valor predeterminado: 1  | 
| eps | Parámetro de valores epsilon para evitar la división por 0. **Opcional** Valores válidos: número flotante. Valor sugerido: pequeño. Valor predeterminado: ninguno  | 
| factors\$1init\$1method | El método de inicialización para los plazos de factorización: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/fact-machines-hyperparameters.html) **Opcional** Valores válidos: `uniform`, `normal` o `constant`. Valor predeterminado: `normal`  | 
| factors\$1init\$1scale  | El rango de la inicialización de los plazos de factorización. Surte efecto si `factors_init_method` está establecido en `uniform`.  **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: ninguno  | 
| factors\$1init\$1sigma | La desviación estándar para la inicialización de los plazos de factorización. Surte efecto si `factors_init_method` está establecido en `normal`.  **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: 0.001  | 
| factors\$1init\$1value | El valor inicial de los plazos de factorización. Surte efecto si `factors_init_method` está establecido en `constant`.  **Opcional** Valores válidos: número flotante. Rango de valor sugerido: [1e-8, 512] Valor predeterminado: ninguno  | 
| factors\$1lr | La tasa de aprendizaje para los plazos de factorización.  **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: 0.0001  | 
| factors\$1wd | El decremento de ponderación para los plazos de factorización.  **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: 0.00001  | 
| linear\$1lr | La tasa de aprendizaje para plazos lineales.  **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: 0.001  | 
| linear\$1init\$1method | El método de inicialización para los plazos lineales: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/fact-machines-hyperparameters.html) **Opcional** Valores válidos: `uniform`, `normal` o `constant`. Valor predeterminado: `normal`  | 
| linear\$1init\$1scale | Rango de la inicialización de los plazos lineales. Surte efecto si `linear_init_method` está establecido en `uniform`.  **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: ninguno  | 
| linear\$1init\$1sigma | La desviación estándar para la inicialización de los plazos lineales. Surte efecto si `linear_init_method` está establecido en `normal`.  **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: 0,01  | 
| linear\$1init\$1value | El valor inicial de los plazos lineales. Surte efecto si se establece `linear_init_method` en *constante*.  **Opcional** Valores válidos: número flotante. Rango de valor sugerido: [1e-8, 512] Valor predeterminado: ninguno  | 
| linear\$1wd | El decremento de ponderación para los plazos lineales. **Opcional** Valores válidos: número flotante no negativo Rango de valor sugerido: [1e-8, 512] Valor predeterminado: 0.001  | 
| mini\$1batch\$1size | El tamaño del minilote utilizado para la capacitación.  **Opcional** Valores válidos: número entero positivo Valor predeterminado: 1000  | 
| rescale\$1grad |  Parámetro del optimizador de reescalado de gradientes. Si se establece, multiplica el gradiente con `rescale_grad` antes de la actualización. Seleccione con frecuencia que sea 1,0/`batch_size`.  **Opcional** Valores válidos: número flotante Valor predeterminado: ninguno  | 

# Ajuste de un modelo de máquinas de factorización
<a name="fm-tuning"></a>

El *ajuste de modelo automático*, también conocido como ajuste de hiperparámetros, encuentra la mejor versión de un modelo ejecutando muchas tareas que probar una serie de hiperparámetros en su conjunto de datos. Usted elige los hiperparámetros que pueden ajustarse, un rango de valores para cada uno de ellos y una métrica objetiva. Puede elegir la métrica objetiva de las métricas que el algoritmo computa. El ajuste de modelo automático busca los hiperparámetros elegidos para encontrar la combinación de valores que obtienen el modelo que optimiza la métrica objetiva.

Para obtener más información acerca del ajuste de modelos, consulte [Ajuste automático de modelos con IA SageMaker](automatic-model-tuning.md).

## Métricas computadas por el algoritmo de máquinas de factorización
<a name="fm-metrics"></a>

El algoritmo de máquinas de factorización tiene tipos de predictores de regresión y de clasificación binaria. El tipo de predictor determina qué tipo de métrica puede utilizar para el ajuste de un modelo automático. El algoritmo informa de una métrica de regresor `test:rmse`, que se calcula durante la capacitación. Al ajustar el modelo para las tareas de regresión, elija esta métrica como el objetivo.


| Nombre de métrica | Description (Descripción) | Dirección de optimización | 
| --- | --- | --- | 
| test:rmse | Error cuadrado medio raíz | Minimizar | 

El algoritmo de máquinas de factorización notifica tres métricas de clasificación binaria que se calculan durante el entrenamiento. Al ajustar el modelo para tareas de clasificación binaria, elija una de estas como el objetivo.


| Nombre de métrica | Description (Descripción) | Dirección de optimización | 
| --- | --- | --- | 
| test:binary\$1classification\$1accuracy | Exactitud | Maximizar | 
| test:binary\$1classification\$1cross\$1entropy | Entropía cruzada | Minimizar | 
| test:binary\$1f\$1beta | Beta | Maximizar | 

## Hiperparámetros ajustables de máquinas de factorización
<a name="fm-tunable-hyperparameters"></a>

Es posible ajustar los siguientes hiperparámetros para el algoritmo de máquinas de factorización. Los parámetros de inicialización que contienen los términos sesgo, lineal y factorización dependen de su método de inicialización. Existen tres métodos de inicialización: `uniform`, `normal` y `constant`. No es posible ajustar estos métodos de inicialización. Los parámetros que se pueden ajustar dependen de esta opción del método de inicialización. Por ejemplo, si el método de inicialización es `uniform`, solo se pueden ajustar los parámetros correspondientes a `scale`. En concreto, si `bias_init_method==uniform`, entonces `bias_init_scale`, `linear_init_scale` y `factors_init_scale` se pueden ajustar. De manera parecida, si el método de inicialización es `normal`, solo se pueden ajustar los parámetros correspondientes a `sigma`. Si el método de inicialización es `constant`, solo se pueden ajustar los parámetros correspondientes a `value`. Estas dependencias se enumeran en la siguiente tabla. 


| Nombre del parámetro | Tipo de parámetro | Intervalos recomendados | Dependencia | 
| --- | --- | --- | --- | 
| bias\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | bias\$1init\$1method==uniform | 
| bias\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | bias\$1init\$1method==normal | 
| bias\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | bias\$1init\$1method==constant | 
| bias\$1lr | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | Ninguno | 
| bias\$1wd | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | Ninguno | 
| epoch | IntegerParameterRange | MinValue: 1, 1000 MaxValue | Ninguno | 
| factors\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | bias\$1init\$1method==uniform | 
| factors\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | bias\$1init\$1method==normal | 
| factors\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | bias\$1init\$1method==constant | 
| factors\$1lr | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | Ninguno | 
| factors\$1wd | ContinuousParameterRange | MinValue: 1e-8, 512] MaxValue | Ninguno | 
| linear\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | bias\$1init\$1method==uniform | 
| linear\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | bias\$1init\$1method==normal | 
| linear\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | bias\$1init\$1method==constant | 
| linear\$1lr | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | Ninguno | 
| linear\$1wd | ContinuousParameterRange | MinValue: 1e-8, 512 MaxValue | Ninguno | 
| mini\$1batch\$1size | IntegerParameterRange | MinValue: 100, 10000 MaxValue | Ninguno | 

# Formatos de respuesta de máquinas de factorización
<a name="fm-in-formats"></a>

Amazon SageMaker AI proporciona varios formatos de respuesta para obtener inferencias del modelo de máquinas de factorización, como JSON, JSONLINES y RECORDIO, con estructuras específicas para tareas de clasificación binaria y regresión.

## Formato de respuesta JSON
<a name="fm-json"></a>

Clasificación binaria

```
let response =   {
    "predictions":    [
        {
            "score": 0.4,
            "predicted_label": 0
        } 
    ]
}
```

Regresión

```
let response =   {
    "predictions":    [
        {
            "score": 0.4
        } 
    ]
}
```

## Formato de respuesta JSONLINES
<a name="fm-jsonlines"></a>

Clasificación binaria

```
{"score": 0.4, "predicted_label": 0}
```

Regresión

```
{"score": 0.4}
```

## Formato de respuesta RECORDIO
<a name="fm-recordio"></a>

Clasificación binaria

```
[
    Record = {
        features = {},
        label = {
            'score’: {
                keys: [],
                values: [0.4]  # float32
            },
            'predicted_label': {
                keys: [],
                values: [0.0]  # float32
            }
        }
    }
]
```

Regresión

```
[
    Record = {
        features = {},
        label = {
            'score’: {
                keys: [],
                values: [0.4]  # float32
            }   
        }
    }
]
```