

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Neptune ML의 Gremlin 노드 회귀 쿼리
<a name="machine-learning-gremlin-vertex-regression-queries"></a>

노드 회귀는 각 노드의 회귀 모델에서 유추된 값이 수치라는 점을 제외하면 노드 분류와 유사합니다. 다음과 같은 차이점을 제외하고 노드 분류와 동일한 Gremlin 쿼리를 노드 회귀에 사용할 수 있습니다.
+ 다시 말하지만, Neptune ML에서 노드는 버텍스를 나타냅니다.
+ `properties()` 단계는 `properties().with("Neptune#ml.classification")` 대신 `properties().with("Neptune#ml.regression")` 형식을 취합니다.
+ `"Neptune#ml.limit`"와 `"Neptune#ml.threshold"` 조건자는 적용할 수 없습니다.
+ 값을 기준으로 필터링할 때는 숫자 값을 지정해야 합니다.

다음은 샘플 버텍스 분류 쿼리입니다.

```
g.with("Neptune#ml.endpoint","node-regression-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn", "arn:aws:iam::0123456789:role/sagemaker-role")
 .V("movie_1","movie_2","movie_3")
 .properties("revenue").with("Neptune#ml.regression")
```

다음 예제에 나와 있는 것처럼 회귀 모델을 사용하여 추론된 값을 기준으로 필터링할 수 있습니다.

```
g.with("Neptune#ml.endpoint","node-regression-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .V("movie_1","movie_2","movie_3")
 .properties("revenue").with("Neptune#ml.regression")
 .value().is(P.gte(1600000))

g.with("Neptune#ml.endpoint","node-regression-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .V("movie_1","movie_2","movie_3")
 .properties("revenue").with("Neptune#ml.regression")
 .hasValue(P.lte(1600000D))
```

## 노드 회귀 쿼리에서 유도 추론 사용
<a name="machine-learning-gremlin-node-regress-inductive"></a>

Jupyter Notebook의 기존 그래프에 다음과 같이 새 노드를 추가한다고 가정해 보겠습니다.

```
%%gremlin
g.addV('label1').property(id,'101').as('newV')
 .V('1').as('oldV1')
 .V('2').as('oldV2')
 .addE('eLabel1').from('newV').to('oldV1')
 .addE('eLabel2').from('oldV2').to('newV')
```

그런 다음 유도 추론 쿼리를 사용하여 새 노드를 고려한 평점을 얻을 수 있습니다.

```
%%gremlin
g.with("Neptune#ml.endpoint", "nr-ep")
 .with("Neptune#ml.iamRoleArn", "arn:aws:iam::123456789012:role/NeptuneMLRole")
 .V('101').properties("rating")
 .with("Neptune#ml.regression")
 .with("Neptune#ml.inductiveInference")
```

쿼리는 결정적이지 않기 때문에 여러 번 실행하면 주변 환경에 따라 다소 다른 결과가 반환될 수 있습니다.

```
# First time
==>vp[rating->9.1]

# Second time
==>vp[rating->8.9]
```

좀 더 일관된 결과가 필요한 경우 쿼리를 결정적으로 만들면 됩니다.

```
%%gremlin
g.with("Neptune#ml.endpoint", "nc-ep")
 .with("Neptune#ml.iamRoleArn", "arn:aws:iam::123456789012:role/NeptuneMLRole")
 .V('101').properties("rating")
 .with("Neptune#ml.regression")
 .with("Neptune#ml.inductiveInference")
 .with("Neptune#ml.deterministic")
```

이제 결과는 매번 거의 동일하게 나타납니다.

```
# First time
==>vp[rating->9.1]

# Second time
==>vp[rating->9.1]
```