> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 머신러닝 함수 문서

# 머신러닝 함수

<div id="evalmlmethod">
  ## evalMLMethod
</div>

적합된 회귀 모델을 사용한 예측에는 `evalMLMethod` 함수를 사용합니다. 자세한 내용은 `linearRegression`의 링크를 참조하십시오.

<div id="stochasticlinearregression">
  ## stochasticLinearRegression
</div>

[stochasticLinearRegression](/ko/reference/functions/aggregate-functions/stochasticLinearRegression) 집계 함수는 선형 모델과 MSE 손실 함수를 사용한 확률적 경사 하강법을 구현합니다. 새 데이터 예측에는 `evalMLMethod`를 사용합니다.

<div id="stochasticlogisticregression">
  ## stochasticLogisticRegression
</div>

[stochasticLogisticRegression](/ko/reference/functions/aggregate-functions/stochasticLogisticRegression) 집계 함수는 이진 분류 문제를 위한 확률적 경사 하강법을 구현합니다. 새 데이터 예측에는 `evalMLMethod`를 사용합니다.

<div id="naivebayesclassifier">
  ## naiveBayesClassifier
</div>

n-그램과 라플라스 스무딩을 사용하는 Naive Bayes 모델로 입력 텍스트를 분류합니다. 사용하기 전에 ClickHouse에서 모델을 미리 구성해야 합니다.

**구문**

```sql theme={null}
naiveBayesClassifier(model_name, input_text);
```

**인수**

* `model_name` — 사전 구성된 모델의 이름입니다. [String](/ko/reference/data-types/string)
  모델은 ClickHouse의 설정 파일에 정의되어 있어야 합니다(아래 참고).
* `input_text` — 분류할 텍스트입니다. [String](/ko/reference/data-types/string)
  입력은 제공된 그대로 처리됩니다(대소문자와 구두점 유지).

**반환 값**

* 예측된 클래스 ID를 부호 없는 정수로 반환합니다. [UInt32](/ko/reference/data-types/int-uint)
  클래스 ID는 모델 생성 시 정의된 범주에 해당합니다.

**예시**

언어 감지 모델을 사용해 텍스트를 분류합니다:

```sql theme={null}
SELECT naiveBayesClassifier('language', 'How are you?');
```

```response theme={null}
┌─naiveBayesClassifier('language', 'How are you?')─┐
│ 0                                                │
└──────────────────────────────────────────────────┘
```

*결과 `0`은 영어를, `1`은 프랑스어를 나타낼 수 있습니다. 클래스의 의미는 학습 데이터에 따라 달라집니다.*

***

<div id="implementation-details">
  ### 구현 세부 사항
</div>

**알고리즘**
[이 문서](https://web.stanford.edu/~jurafsky/slp3/4.pdf)를 기반으로 한 n-그램 확률을 사용하며, 관측되지 않은 n-그램을 처리하기 위해 [라플라스 스무딩](https://en.wikipedia.org/wiki/Additive_smoothing)을 적용한 Naive Bayes 분류 알고리즘을 사용합니다.

**주요 기능**

* 모든 크기의 n-그램을 지원합니다
* 세 가지 토큰화 모드:
  * `byte`: 원시 바이트 단위로 동작합니다. 각 바이트가 하나의 토큰입니다.
  * `codepoint`: UTF‑8에서 디코딩된 유니코드 스칼라 값을 기준으로 동작합니다. 각 코드포인트가 하나의 토큰입니다.
  * `token`: 연속된 유니코드 공백(정규식 \s+)을 기준으로 분할합니다. 토큰은 공백이 아닌 부분 문자열이며, 인접한 문장부호도 토큰에 포함됩니다(예: "you?"는 하나의 토큰입니다).

***

<div id="model-configuration">
  ### 모델 구성
</div>

언어 감지를 위한 Naive Bayes 모델을 생성하는 예시 소스 코드는 [여기](https://github.com/nihalzp/ClickHouse-NaiveBayesClassifier-Models)에서 확인할 수 있습니다.

또한 예시 모델과 관련 구성 파일은 [여기](https://github.com/nihalzp/ClickHouse-NaiveBayesClassifier-Models/tree/main/models)에서 확인할 수 있습니다.

다음은 ClickHouse에서 Naive Bayes 모델에 사용하는 예시 구성입니다:

```xml theme={null}
<clickhouse>
    <nb_models>
        <model>
            <name>sentiment</name>
            <path>/etc/clickhouse-server/config.d/sentiment.bin</path>
            <n>2</n>
            <mode>token</mode>
            <alpha>1.0</alpha>
            <priors>
                <prior>
                    <class>0</class>
                    <value>0.6</value>
                </prior>
                <prior>
                    <class>1</class>
                    <value>0.4</value>
                </prior>
            </priors>
        </model>
    </nb_models>
</clickhouse>
```

**구성 매개변수**

| 매개변수       | 설명                                                                               | 예시                                                       | 기본값   |
| ---------- | -------------------------------------------------------------------------------- | -------------------------------------------------------- | ----- |
| **name**   | 고유 모델 식별자                                                                        | `language_detection`                                     | *필수*  |
| **path**   | 모델 바이너리의 전체 경로                                                                   | `/etc/clickhouse-server/config.d/language_detection.bin` | *필수*  |
| **mode**   | 토큰화 방식:<br />- `byte`: 바이트 시퀀스<br />- `codepoint`: 유니코드 문자<br />- `token`: 단어 토큰 | `token`                                                  | *필수*  |
| **n**      | n-그램 크기(`token` 모드):<br />- `1`=단일 단어<br />- `2`=단어 쌍<br />- `3`=세 단어 묶음         | `2`                                                      | *필수*  |
| **alpha**  | 분류 중 모델에 나타나지 않는 n-그램을 처리하기 위해 사용하는 라플라스 스무딩 계수                                  | `0.5`                                                    | `1.0` |
| **priors** | 클래스 확률(각 클래스에 속하는 문서 비율 %)                                                       | 클래스 0 60%, 클래스 1 40%                                     | 균등 분포 |

**모델 학습 가이드**

**파일 포맷**
사람이 읽을 수 있는 포맷에서 `n=1` 및 `token` 모드일 때 모델은 다음과 같을 수 있습니다:

```text theme={null}
<class_id> <n-gram> <count>
0 excellent 15
1 refund 28
```

`n=3` 및 `codepoint` 모드에서는 다음과 같이 나타날 수 있습니다:

```text theme={null}
<class_id> <n-gram> <count>
0 exc 15
1 ref 28
```

사람이 읽을 수 있는 형식은 ClickHouse에서 직접 사용되지 않으므로, 아래에 설명된 바이너리 형식으로 변환해야 합니다.

**바이너리 형식 세부 정보**
각 n-그램은 다음 형식으로 저장됩니다.

1. 4바이트 `class_id` (UInt, 리틀 엔디언)
2. 4바이트 `n-gram` 바이트 길이 (UInt, 리틀 엔디언)
3. 원본 `n-gram` 바이트
4. 4바이트 `count` (UInt, 리틀 엔디언)

**전처리 요구 사항**
문서 코퍼스에서 모델을 생성하기 전에, 지정된 `mode`와 `n`에 따라 n-그램을 추출할 수 있도록 문서를 전처리해야 합니다. 다음 단계는 전처리 과정을 설명합니다.

1. **토큰화 모드에 따라 각 문서의 시작과 끝에 경계 마커를 추가합니다.**

   * **Byte**: `0x01` (시작), `0xFF` (끝)
   * **Codepoint**: `U+10FFFE` (시작), `U+10FFFF` (끝)
   * **Token**: `<s>` (시작), `</s>` (끝)

   *참고:* 문서의 앞과 뒤에 각각 `(n - 1)`개의 토큰을 추가합니다.

2. **`token` 모드에서 `n=3`인 경우의 예시:**

   * **문서:** `"ClickHouse is fast"`
   * **처리 결과:** `<s> <s> ClickHouse is fast </s> </s>`
   * **생성된 3-그램:**
     * `<s> <s> ClickHouse`
     * `<s> ClickHouse is`
     * `ClickHouse is fast`
     * `is fast </s>`
     * `fast </s> </s>`

`byte` 및 `codepoint` 모드에서 모델 생성을 단순화하려면, 먼저 문서를 tokens으로 분리해 두는 것이 편리할 수 있습니다(`byte` 모드에서는 `byte` 목록, `codepoint` 모드에서는 `codepoint` 목록). 그런 다음 문서 앞부분에 `n - 1`개의 시작 토큰을 추가하고, 문서 끝부분에 `n - 1`개의 종료 토큰을 추가합니다. 마지막으로 n-그램을 생성하여 직렬화된 파일에 기록합니다.

***

{/*AUTOGENERATED_START*/}
