KMEANS
对输入关系执行 k-means 算法。结果是包含群集中心列表的模型。
您可以采用 VERTICA_MODELS 或 PMML 格式导出生成的 k 均值模型,以将其应用于 Vertica 外部的数据。您还可以在其他位置训练 k 均值模型,然后以 PMML 格式将其导入 Vertica,以对 Vertica 中的数据进行预测。
这是元函数。您必须在顶级 SELECT 语句中调用元函数。
行为类型
易变语法
KMEANS ( 'model‑name', 'input‑relation', 'input‑columns', 'num‑clusters'
[ USING PARAMETERS
[exclude_columns = 'excluded‑columns']
[, max_iterations = max‑iterations]
[, epsilon = epsilon‑value]
[, { init_method = 'init‑method' } | { initial_centers_table = 'init‑table' } ]
[, output_view = 'output‑view']
[, key_columns = 'key‑columns'] ] )
参数
- model‑name
- 标识要创建的模型,其中 model‑name 符合标识符中描述的约定。 同一架构中的序列、表、投影、视图和模型中也必须是唯一的。
- input‑relation
- 包含 k 均值输入数据的表或视图。 如果输入关系在 Hive 中定义,请使用
SYNC_WITH_HCATALOG_SCHEMA
以同步hcatalog
架构,然后运行机器学习功能。 - input‑columns
- 输入关系中要使用的列的逗号分隔列表,或者使用星号 (*) 选择所有列。 输入列的数据类型必须为数字。
- num‑clusters
- 要创建的群集数,为 ≤10,000 的整数。此实参表示 k 均值中的 k。
参数
重要
参数init_method
和 initial_centers_table
互斥。如果同时设置两者,此函数将返回错误。
exclude_columns
input-columns 中要排除在处理范围之外的列名的逗号分隔列表。
max_iterations
- 算法执行的最大迭代数。如果该值小于收敛所需要的迭代数,则算法无法进行收敛。
默认值: 10
epsilon
- 确定算法是否收敛。自上一次迭代后,如果中心移动的距离小于
'epsilon',则认为该算法已收敛。默认值: 1e-4
init_method
- 用于找到初始群集中心的方法,为以下之一:
-
random
-
kmeanspp
(默认):kmeans++ 算法如果 k 值过高,可能会占用大量内存。如果函数返回错误,提示可用内存不足,请减小 k 值或使用
random
方法。
-
initial_centers_table
- 包含要使用的初始群集中心的表。知晓要使用的初始群集中心而不需要 Vertica 找到初始群集中心时提供这个值。
output_view
- 保存分配到群集的每个点的视图名称。您必须对保存视图的架构具有 CREATE 权限。
key_columns
- input-columns 中列名称的逗号分隔列表,将显示为
output_view
的列。应选择这些列,以便其内容可以标识每个输入数据点。此参数仅在指定output_view
时使用。input‑columns 中所列的仅用作key_columns
而不用于训练的列应在exclude_columns
中列出。
模型属性
centers
- 包含每个群集中心的列表。
metrics
- 与群集质量相关的几个指标的字符串摘要。
示例
以下示例创建 k-means 模型 myKmeansModel
并将其应用于输入表 iris1
。APPLY_KMEANS
的调用混合了列名和常量。当传递一个常量代替列名称时,该常量将替换该列在所有行中的值:
=> SELECT KMEANS('myKmeansModel', 'iris1', '*', 5
USING PARAMETERS max_iterations=20, output_view='myKmeansView', key_columns='id', exclude_columns='Species, id');
KMEANS
----------------------------
Finished in 12 iterations
(1 row)
=> SELECT id, APPLY_KMEANS(Sepal_Length, 2.2, 1.3, Petal_Width
USING PARAMETERS model_name='myKmeansModel', match_by_pos='true') FROM iris2;
id | APPLY_KMEANS
-----+--------------
5 | 1
10 | 1
14 | 1
15 | 1
21 | 1
22 | 1
24 | 1
25 | 1
32 | 1
33 | 1
34 | 1
35 | 1
38 | 1
39 | 1
42 | 1
...
(60 rows)