evalMLMethod
使用已拟合的回归模型进行预测时,可使用evalMLMethod 函数。请参阅 linearRegression 中的链接。
stochasticLinearRegression
stochasticLinearRegression 聚合函数实现了基于线性模型和 MSE 损失函数的随机梯度下降方法。使用evalMLMethod 对新数据进行预测。
stochasticLogisticRegression
stochasticLogisticRegression 聚合函数实现了用于二元分类问题的随机梯度下降方法。使用evalMLMethod 对新数据进行预测。
naiveBayesClassifier
使用带有 n-gram 和拉普拉斯平滑的朴素贝叶斯模型对输入文本进行分类。该模型必须先在 ClickHouse 中配置后方可使用。 语法model_name— 预配置模型的名称。String 该模型必须在 ClickHouse 的配置文件中定义 (见下文) 。input_text— 要分类的文本。String 输入会完全按原样处理 (保留大小写和标点) 。
- 预测类别 ID,以无符号整数表示。UInt32 类别 ID 对应于模型构建时定义的类别。
0 可能表示英语,而 1 可能表示法语——具体类别含义取决于你的训练数据。
实现细节
算法 使用朴素贝叶斯分类算法,并结合 拉普拉斯平滑 处理未见过的 n-gram;n-gram 概率的计算方法参考了这份资料。 主要特性- 支持任意长度的 n-gram
- 三种标记化模式:
byte:基于原始字节进行处理。每个字节都是一个标记。codepoint:基于从 UTF‑8 解码得到的 Unicode 标量值进行处理。每个码点都是一个标记。token:按连续的 Unicode 空白字符 (正则\s+) 拆分。标记是非空白的子字符串;如果与标点符号相邻,标点符号也会被视为该标记的一部分 (例如,“you?” 是一个标记) 。
模型配置
你可以在这里找到用于创建语言检测朴素贝叶斯模型的示例源代码。 此外,这里还提供了示例模型及其对应的配置文件。 下面是 ClickHouse 中朴素贝叶斯模型的一个示例配置:
模型训练指南
文件格式
在可读性较高的格式中,对于
n=1 且 token 模式,模型可能如下所示:
n=3 且为 codepoint 模式时,可能如下所示:
- 4 字节
class_id(UInt,小端序) - 4 字节
n-gram字节长度 (UInt,小端序) - 原始
n-gram字节 - 4 字节
count(UInt,小端序)
mode 和 n 对文档进行预处理,以提取 n-gram。以下步骤概述了预处理过程:
-
根据标记化模式,在每个文档的开头和结尾添加边界标记:
- Byte:
0x01(起始) ,0xFF(结束) - Codepoint:
U+10FFFE(起始) ,U+10FFFF(结束) - Token:
<s>(起始) ,</s>(结束)
(n - 1)个标记。 - Byte:
-
token模式下n=3的示例:- 文档:
"ClickHouse is fast" - 处理结果:
<s> <s> ClickHouse is fast </s> </s> - 生成的三元组:
<s> <s> ClickHouse<s> ClickHouse isClickHouse is fastis fast </s>fast </s> </s>
- 文档:
byte 和 codepoint 模式下的模型创建,可先将文档标记化为标记 (byte 模式下为 byte 列表,codepoint 模式下为 codepoint 列表) 。然后,在文档开头添加 n - 1 个起始标记,在文档末尾添加 n - 1 个结束标记。最后,生成 n-grams 并将其写入序列化文件。
assignCentroid
引入版本:v26.8.0 返回距离给定向量最近 (L2 距离) 的质心 id。质心可以通过由浮点数数组组成的常量数组给出,此时 id 即为该数组中从 0 开始的下标;也可以通过包含cid 和 vec 属性的 Dictionary 名称给出,此时 id 即为 cid。
该函数是非确定性的:对相同的参数可能返回不同的结果。
vec— 待分配的向量。其维度必须与质心的维度一致。非Float32位宽的类型会被转换为Float32,即打分 kernel 所使用的类型。Array(Float32)或Array(Float64)或Array(BFloat16)centroids— 用于打分的质心,必须为常量。可以是由大小相同且非空的浮点数组构成的数组,此时 id 即该数组中从 0 开始的位置;也可以是某个Dictionary的名称,该字典需包含一个属性cid(类型为可容纳于UInt32的无符号整数类型) 和一个属性vec(类型为Array(Float32)) ,此时 id 即为cid。该字典只读取一次,并在重新加载前一直保持缓存。Array(Array(Float32))或Array(Array(Float64))或Array(Array(BFloat16))或String
UInt32
示例
内联质心
Query
Response
evalMLMethod
引入版本:v20.1.0 将训练好的机器学习模型应用于输入特征,生成预测结果。 语法model— 训练后的机器学习模型。AggregateFunctionStatex1, x2, ...— 用于预测的特征值。Float*或(U)Int*
Float64
示例
使用示例
Query
Response
naiveBayesClassifier
引入版本:v25.11.0 使用NAIVE_BAYES 字典对输入文本进行分类。返回与 dictGet(dictionary_name, class_attribute, input_text) 相同的预测类别值,其中 class_attribute 是在字典 布局 中配置的类别标签属性名称。与 dictGet 不同,返回结果的类型始终为 UInt32,而不是类别属性的声明类型;并且 input_text 必须是 String (不进行键类型转换) 。
此函数是非确定性的:对于相同的参数,可能返回不同的结果。
UInt32
示例
文本分类
Query
Response
naiveBayesClassifierWithAllProbs
引入版本:v26.7.0 使用NAIVE_BAYES 字典对输入文本进行分类,并返回所有类别及其对应的概率,按概率从高到低排列。
此函数是非确定性的:对于相同的参数,可能会返回不同的结果。
Array(Tuple(UInt32, Float64))
示例
所有类别的概率
Query
Response
naiveBayesClassifierWithProb
引入版本:v26.7.0 使用NAIVE_BAYES 字典对输入文本进行分类,并返回预测类别及其概率。
此函数是非确定性的:对于相同的参数,可能会返回不同的结果。
Tuple(UInt32, Float64)
示例
输出分类及其概率
Query
Response