ML 명령어
ML 명령어
ml 명령어는 ML Commons 플러그인의 머신러닝(ML) 알고리즘을 PPL 명령어가 반환한 검색 결과에 적용해요. 이상 탐지와 클러스터링을 포함한 다양한 ML 작업을 지원해요.
출처: 문서
본문
ml 명령어는 ML Commons 플러그인의 머신러닝(ML) 알고리즘을 PPL 명령어가 반환한 검색 결과에 적용해요. 이상 탐지와 클러스터링을 포함한 다양한 ML 작업을 지원해요. 알고리즘과 지정된 action에 따라 train, predict 또는 결합된 train-and-predict 작업을 수행할 수 있어요.
ml 명령어를 사용하려면 plugins.calcite.enabled를 false로 설정해야 해요.
ml 명령어는 다음 알고리즘을 지원해요:
구문 (Syntax)
ml 명령어는 알고리즘에 따라 다른 구문 옵션을 지원해요.
시계열(time-series) 데이터 이상 탐지
이 구문을 사용해 시계열 데이터의 이상을 탐지할 수 있어요. 이 방식은 순차 데이터 패턴에 최적화된 RCF 알고리즘을 사용해요:
ml action='train' algorithm='rcf' <number_of_trees> <shingle_size> <sample_size> <output_after> <time_decay> <anomaly_rate> <time_field> <date_format> <time_zone>
매개변수
고정 시간(fixed-in-time) RCF 알고리즘은 다음 매개변수를 지원해요.
| 매개변수 | 필수/선택 | 설명 |
|---|---|---|
number_of_trees |
선택 | 포리스트(forest)의 트리 수예요. 기본값은 30이에요. |
shingle_size |
선택 | shingle의 레코드 수예요. shingle은 가장 최근 레코드의 연속된 시퀀스예요. 기본값은 8이에요. |
sample_size |
선택 | 이 포리스트의 스트림 샘플러가 사용하는 샘플 크기예요. 기본값은 256이에요. |
output_after |
선택 | 결과가 반환되기 전에 스트림 샘플러가 필요로 하는 포인트 수예요. 기본값은 32예요. |
time_decay |
선택 | 이 포리스트의 스트림 샘플러가 사용하는 감쇠(decay) 계수예요. 기본값은 0.0001이에요. |
anomaly_rate |
선택 | 이상 비율이에요. 기본값은 0.005이에요. |
time_field |
필수 | RCF가 시계열 데이터로 사용할 시간 필드예요. |
date_format |
선택 | time_field의 형식이에요. 기본값은 yyyy-MM-dd HH:mm:ss예요. |
time_zone |
선택 | time_field의 시간대예요. 기본값은 UTC예요. |
category_field |
선택 | 입력 값을 그룹화하는 데 사용되는 카테고리 필드예요. predict 작업은 각 카테고리에 독립적으로 적용돼요. |
비시계열(non-time-series) 데이터 이상 탐지
이 구문을 사용해 순서가 중요하지 않은 데이터의 이상을 탐지할 수 있어요. 이 방식은 독립 데이터 포인트에 최적화된 RCF 알고리즘을 사용해요:
ml action='train' algorithm='rcf' <number_of_trees> <sample_size> <output_after> <training_data_size> <anomaly_score_threshold>
매개변수
배치(batch) RCF 알고리즘은 다음 매개변수를 지원해요.
| 매개변수 | 필수/선택 | 설명 |
|---|---|---|
number_of_trees |
선택 | 포리스트의 트리 수예요. 기본값은 30이에요. |
sample_size |
선택 | 훈련 데이터셋에서 각 트리에 제공되는 무작위 샘플 수예요. 기본값은 256이에요. |
output_after |
선택 | 결과가 반환되기 전에 스트림 샘플러가 필요로 하는 포인트 수예요. 기본값은 32예요. |
training_data_size |
선택 | 훈련 데이터셋의 크기예요. 기본값은 전체 데이터셋 크기예요. |
anomaly_score_threshold |
선택 | 이상 점수 임계값이에요. 기본값은 1.0이에요. |
category_field |
선택 | 입력 값을 그룹화하는 데 사용되는 카테고리 필드예요. predict 작업은 각 카테고리에 독립적으로 적용돼요. |
K-means 클러스터링
이 구문을 사용해 유사성에 따라 데이터 포인트를 클러스터로 그룹화해요:
ml action='train' algorithm='kmeans' <centroids> <iterations> <distance_type>
매개변수
K-means 클러스터링 알고리즘은 다음 매개변수를 지원해요.
| 매개변수 | 필수/선택 | 설명 |
|---|---|---|
centroids |
선택 | 데이터 포인트를 그룹화할 클러스터 수예요. 기본값은 2예요. |
iterations |
선택 | 반복 횟수예요. 기본값은 10이에요. |
distance_type |
선택 | 거리 타입이에요. 유효한 값은 COSINE, L1, EUCLIDEAN이에요. 기본값은 EUCLIDEAN이에요. |
예제 1: 시계열 이상 탐지
이 예제는 RCF 모델을 훈련하고 시계열 이용량(tridership) 데이터의 이상을 탐지하는 데 사용해요:
source=nyc_taxi
| fields value, timestamp
| ml action='train' algorithm='rcf' time_field='timestamp'
| where value=10844.0
쿼리는 다음과 같은 결과를 반환해요:
| value | timestamp | score | anomaly_grade |
|---|---|---|---|
| 10844.0 | 2014-07-01 00:00:00 | 0.0 | 0.0 |
예제 2: 카테고리별 시계열 이상 탐지
이 예제는 RCF 모델을 훈련하고 여러 카테고리 값에 걸친 시계열 이용량 데이터의 이상을 탐지하는 데 사용해요:
source=nyc_taxi
| fields category, value, timestamp
| ml action='train' algorithm='rcf' time_field='timestamp' category_field='category'
| where value=10844.0 or value=6526.0
쿼리는 다음과 같은 결과를 반환해요:
| category | value | timestamp | score | anomaly_grade |
|---|---|---|---|---|
| night | 10844.0 | 2014-07-01 00:00:00 | 0.0 | 0.0 |
| day | 6526.0 | 2014-07-01 06:00:00 | 0.0 | 0.0 |
예제 3: 비시계열 이상 탐지
이 예제는 RCF 모델을 훈련하고 비시계열 이용량 데이터의 이상을 탐지하는 데 사용해요:
source=nyc_taxi
| fields value
| ml action='train' algorithm='rcf'
| where value=10844.0
쿼리는 다음과 같은 결과를 반환해요:
| value | score | anomalous |
|---|---|---|
| 10844.0 | 0.0 | False |
예제 4: 카테고리별 비시계열 이상 탐지
이 예제는 RCF 모델을 훈련하고 여러 카테고리 값에 걸친 비시계열 이용량 데이터의 이상을 탐지하는 데 사용해요:
source=nyc_taxi
| fields category, value
| ml action='train' algorithm='rcf' category_field='category'
| where value=10844.0 or value=6526.0
쿼리는 다음과 같은 결과를 반환해요:
| category | value | score | anomalous |
|---|---|---|---|
| night | 10844.0 | 0.0 | False |
| day | 6526.0 | 0.0 | False |
예제 5: Iris 데이터셋의 K-means 클러스터링
이 예제는 k-means 클러스터링을 사용해 각 샘플에서 측정한 네 가지 특징(꽃받침과 꽃잎의 길이와 너비)의 조합을 기준으로 세 가지 Iris 종(Iris setosa, Iris virginica, Iris versicolor)을 분류해요:
source=iris_data
| fields sepal_length_in_cm, sepal_width_in_cm, petal_length_in_cm, petal_width_in_cm
| ml action='train' algorithm='kmeans' centroids=3
쿼리는 다음과 같은 결과를 반환해요:
| sepal_length_in_cm | sepal_width_in_cm | petal_length_in_cm | petal_width_in_cm | ClusterID |
|---|---|---|---|---|
| 5.1 | 3.5 | 1.4 | 0.2 | 1 |
| 5.6 | 3.0 | 4.1 | 1.3 | 0 |
| 6.7 | 2.5 | 5.8 | 1.8 | 2 |