머신러닝 함수

머신러닝 함수 (Machine learning functions)

머신러닝 플러그인은 집계 함수 형태로 머신러닝 기능을 제공해요. 지도 학습 문제를 위해 SVM(Support Vector Machine) 기반 분류기와 회귀기를 훈련할 수 있어요.

출처: 문서

본문

참고

머신러닝 함수는 분산 처리에 최적화되어 있지 않아요. 최종 훈련이 단일 인스턴스에서 실행되기 때문에 큰 데이터셋을 훈련하는 능력이 제한돼요.

특징 벡터 (Feature vector)

머신러닝 기법으로 문제를 풀려면, 특히 지도 학습 문제라면 데이터셋을 라벨(label)과 특징 벡터(feature vector) 쌍의 연속으로 표현해야 해요. 라벨은 보이지 않는 특징에서 예측하고 싶은 목표 값이고, 특징은 요소가 숫자 값인 N차원 벡터예요. Trino에서 특징 벡터는 map 타입 값으로 표현되며, 각 특징의 인덱스가 키가 돼서 희소 벡터(sparse vector)를 표현할 수 있어요.

분류기와 회귀기가 map 타입 특징 벡터를 인식할 수 있기 때문에, 기존 숫자 값에서 특징을 구성하는 함수 features()가 있어요.

SELECT features(1.0, 2.0, 3.0) AS features;
       features
-----------------------
 {0=1.0, 1=2.0, 2=3.0}

features()의 출력은 ML 함수에 직접 전달할 수 있어요.

분류 (Classification)

분류는 주어진 특징 벡터에서 서로 다른 라벨을 예측하는 유형의 지도 학습 문제예요. 인터페이스는 Teradata Aster나 BigQuery ML에서 구현된, 라벨과 특징 쌍의 연속에서 SVM 모델을 구성하는 방식과 비슷해요. 분류 모델을 훈련하는 함수는 다음과 같아요.

SELECT
  learn_classifier(
    species,
    features(sepal_length, sepal_width, petal_length, petal_width)
  ) AS model
FROM
  iris

훈련된 모델을 직렬화된 형식으로 반환해요.

                      model
-------------------------------------------------
 3c 43 6c 61 73 73 69 66 69 65 72 28 76 61 72 63
 68 61 72 29 3e

classify()는 훈련된 모델을 사용해 예측된 라벨을 반환해요. 훈련된 모델은 네이티브하게 저장할 수 없기 때문에, 중첩 쿼리 형식으로 전달해야 해요.

SELECT
  classify(features(5.9, 3, 5.1, 1.8), model) AS predicted_label
FROM (
  SELECT
    learn_classifier(species, features(sepal_length, sepal_width, petal_length, petal_width)) AS model
  FROM
    iris
) t
 predicted_label
-----------------
 Iris-virginica

결과적으로 값을 예측할 때도 훈련 과정을 동시에 실행해야 해요. 내부적으로 모델은 libsvm으로 훈련돼요. learn_libsvm_classifier()로 모델의 내부 파라미터를 제어할 수 있어요.

회귀 (Regression)

회귀는 분류 문제와 달리 연속 값을 예측하는 또 다른 유형의 지도 학습 문제예요. 목표는 double로 표현할 수 있는 숫자 값이어야 해요.

다음 코드는 나머지 3개 특징에서 sepal_length를 예측하는 모델 생성 예시예요.

SELECT
  learn_regressor(sepal_length, features(sepal_width, petal_length, petal_width)) AS model
FROM
  iris

모델을 사용하는 방법은 분류의 경우와 비슷해요.

SELECT
  regress(features(3, 5.1, 1.8), model) AS predicted_target
FROM (
  SELECT
    learn_regressor(sepal_length, features(sepal_width, petal_length, petal_width)) AS model
  FROM iris
) t;
 predicted_target
-------------------
 6.407376822560477

내부적으로 모델은 libsvm으로 훈련돼요. learn_libsvm_regressor()로 훈련 과정을 제어할 수 있어요.

머신러닝 함수 (Machine learning functions)

features(double, ...) -> map(bigint, double)

특징 벡터를 나타내는 map을 반환해요.

learn_classifier(label, features) → Classifier

주어진 라벨과 특징 데이터셋으로 훈련된 SVM 기반 분류기 모델을 반환해요.

learn_libsvm_classifier(label, features, params) → Classifier

주어진 라벨과 특징 데이터셋으로 훈련된 SVM 기반 분류기 모델을 반환해요. libsvm 파라미터로 훈련 과정을 제어할 수 있어요.

classify(features, model) → label

주어진 분류기 SVM 모델이 예측한 라벨을 반환해요.

learn_regressor(target, features) → Regressor

주어진 목표와 특징 데이터셋으로 훈련된 SVM 기반 회귀기 모델을 반환해요.

learn_libsvm_regressor(target, features, params) → Regressor

주어진 목표와 특징 데이터셋으로 훈련된 SVM 기반 회귀기 모델을 반환해요. libsvm 파라미터로 훈련 과정을 제어할 수 있어요.

regress(features, model) → target

주어진 회귀기 SVM 모델이 예측한 목표 값을 반환해요.

더 알아보기 (Learn more)

머신러닝 함수는 집계 함수 형태로 동작해요. Trino의 집계 함수 전반은 집계 함수 문서에서 살펴볼 수 있어요.