

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.

# Consultas de clasificación de bordes de Gremlin en Neptune ML
<a name="machine-learning-gremlin-edge-classification-queries"></a>

Para la clasificación de bordes de Gremlin en Neptune ML:
+ El modelo se entrena en una propiedad de los bordes. El conjunto de valores únicos de esta propiedad se denomina conjunto de clases.
+ El valor de clase o propiedad categórica de un borde se puede inferir del modelo de clasificación de bordes, lo que resulta útil cuando esta propiedad aún no está asociada al borde.
+ Para obtener una o varias clases de un modelo de clasificación de bordes, debe usar el paso `with()` con el predicado `"Neptune#ml.classification"` para configurar el paso `properties()`. El formato de salida es similar al que cabría esperar si se trataran de propiedades de bordes.

**nota**  
La clasificación de bordes solo funciona con valores de propiedades de cadena. Esto significa que no se admiten valores de propiedades numéricas como `0` o `1`, aunque sí se admiten los equivalentes de cadena `"0"` y `"1"`. Del mismo modo, los valores de la propiedad Boolean `true` y `false` no funcionan, pero sí lo hacen `"true"` y `"false"`.

A continuación, se muestra un ejemplo de una consulta de clasificación de bordes que solicita una puntuación de confianza mediante el predicado `Neptune#ml.score`:

```
g.with("Neptune#ml.endpoint","edge-classification-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .E("relationship_1","relationship_2","relationship_3")
 .properties("knows_by", "Neptune#ml.score").with("Neptune#ml.classification")
```

La respuesta sería similar a:

```
==>p[knows_by->"Family"]
==>p[Neptune#ml.score->0.01234567]
==>p[knows_by->"Friends"]
==>p[Neptune#ml.score->0.543210]
==>p[knows_by->"Colleagues"]
==>p[Neptune#ml.score->0.10101]
```

## Sintaxis de una consulta de clasificación de bordes de Gremlin
<a name="machine-learning-gremlin-edge-classification-syntax"></a>

En el caso de un gráfico sencillo en el que `User` es el nodo principal y final y `Relationship` es el borde que los conecta: un ejemplo de consulta de clasificación de bordes es:

```
g.with("Neptune#ml.endpoint","edge-classification-social-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .E("relationship_1","relationship_2","relationship_3")
 .properties("knows_by").with("Neptune#ml.classification")
```

La salida de esta consulta sería similar a la siguiente:

```
==>p[knows_by->"Family"]
==>p[knows_by->"Friends"]
==>p[knows_by->"Colleagues"]
```

En la consulta anterior, los pasos `E()` y `properties()` se utilizan de la siguiente manera:
+ El paso `E()` incluye el conjunto de bordes para el que desea obtener las clases del modelo de clasificación de bordes:

  ```
  .E("relationship_1","relationship_2","relationship_3")
  ```
+ El paso `properties()` incluye la clave en la que se entrenó el modelo, así como el valor `.with("Neptune#ml.classification")` para indicar que se trata de una consulta de inferencia de ML de clasificación de bordes.

Por el momento, no se admiten varias claves de propiedad en un paso `properties().with("Neptune#ml.classification")`. Por ejemplo, la siguiente consulta da lugar a una excepción:

```
g.with("Neptune#ml.endpoint","edge-classification-social-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .E("relationship_1","relationship_2","relationship_3")
 .properties("knows_by", "other_label").with("Neptune#ml.classification")
```

Para ver mensajes de error específicos, consulte [Lista de excepciones para las consultas de inferencia de Gremlin en Neptune ML](machine-learning-gremlin-exceptions.md).

Se puede usar un paso `properties().with("Neptune#ml.classification")` en combinación con cualquiera de los pasos siguientes:
+ `value()`
+ `value().is()`
+ `hasValue()`
+ `has(value,"")`
+ `key()`
+ `key().is()`
+ `hasKey()`
+ `has(key,"")`
+ `path()`

## Uso de la inferencia inductiva en una consulta de clasificación de bordes
<a name="machine-learning-gremlin-edge-class-inductive"></a>

Supongamos que tuviera que añadir un nuevo borde a un gráfico existente, en un cuaderno de Jupyter, de la siguiente manera:

```
%%gremlin
g.V('1').as('fromV')
.V('2').as('toV')
.addE('eLabel1').from('fromV').to('toV').property(id, 'e101')
```

A continuación, podría usar una consulta de inferencia inductiva para obtener una escala que tuviera en cuenta el nuevo borde:

```
%%gremlin
g.with("Neptune#ml.endpoint", "ec-ep")
 .with("Neptune#ml.iamRoleArn", "arn:aws:iam::123456789012:role/NeptuneMLRole")
 .E('e101').properties("scale", "Neptune#ml.score")
 .with("Neptune#ml.classification")
 .with("Neptune#ml.inductiveInference")
```

Dado que la consulta no es determinista, los resultados variarían algo si se ejecutara varias veces, en función de la vecindad aleatoria:

```
# First time
==>vp[scale->Like]
==>vp[Neptune#ml.score->0.12345678]

# Second time
==>vp[scale->Like]
==>vp[Neptune#ml.score->0.21365921]
```

Si necesitara resultados más coherentes, podría hacer que la consulta fuera determinista:

```
%%gremlin
g.with("Neptune#ml.endpoint", "ec-ep")
 .with("Neptune#ml.iamRoleArn", "arn:aws:iam::123456789012:role/NeptuneMLRole")
 .E('e101').properties("scale", "Neptune#ml.score")
 .with("Neptune#ml.classification")
 .with("Neptune#ml.inductiveInference")
 .with("Neptune#ml.deterministic")
```

Ahora los resultados serán más o menos los mismos cada vez que ejecute la consulta:

```
# First time
==>vp[scale->Like]
==>vp[Neptune#ml.score->0.12345678]

# Second time
==>vp[scale->Like]
==>vp[Neptune#ml.score->0.12345678]
```