层次聚类算法(Hierarchical Clustering)的统一二维表入口。
数据流:特征表 →(distanceMatrix)→ 距离矩阵表 →(hca / hcut)→ 聚类树 / 带 cluster 标签的表
层次聚类算法(Hierarchical Clustering)的统一二维表入口。
数据流:特征表 →(distanceMatrix)→ 距离矩阵表 →(hca / hcut)→ 聚类树 / 带 cluster 标签的表
01 Syntax
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| distanceMatrix | 1 | 将特征矩阵形式的二维表转换为对称距离矩阵形式的二维表。 返回的新表中:features 为 n x n 的对称距离矩阵(对角线为 0), rowNames 与 featureNames 均为样本名,并继承源表的标签列与名称/描述信息。 vb Dim dist = x.distanceMatrix() Dim tree = dist.hca() |
| hca | 1 | 对距离矩阵形式的二维表执行凝聚层次聚类,返回聚类树(dendrogram)。 注意:传入的 NumericTable 必须是距离矩阵! 如果 source 是原始的特征矩阵,请先调用 HierarchicalClusteringTableExtensions.distanceMatrix()) 将特征矩阵转换为距离矩阵形式的二维表, 然后… |
| hcut | 2 | 对距离矩阵形式的二维表执行层次聚类,并按照距离阈值 threshold 切分聚类树(复用既有的扁平切分实现),将得到的类编号写入 cluster 标签列之后返回原表。 注意:传入的 NumericTable 必须是距离矩阵! 如果 source 是原始的特征矩阵,请先调用 HierarchicalClusteringTableExtens… |
| hcaApprox | 1 | 面向大规模数据集的近似层次聚类入口(BIRCH 预聚类 + 凝聚层次聚类)。 与 HierarchicalClusteringTableExtensions.hca()) 不同,这里接收的是特征矩阵(而非距离矩阵),并且 不会构造 n×n 距离矩阵:先用 BIRCH CF-tree 把 n 个样本压缩成 m 个子簇 (m 由 BirchOp… |
| hcutApprox | 2 | 面向大规模数据集的近似层次聚类并按距离阈值切分,将类编号写入 cluster 标签列后返回原表。 输入为特征矩阵,内部使用 BIRCH 预聚类,不会构造 n×n 距离矩阵。 注意:此处的阈值作用于子簇质心之间的连接距离,与原始样本距离的尺度不同。 |
| performApproxHca | 1 | 在子簇质心上执行(优化后的)凝聚层次聚类 |
| assertDistanceMatrix | 1 | 校验目标表是否为距离矩阵(方阵),并给出醒目的转换提示 |
| assertUniqueNames | 1 | 获取唯一的样本名数组(距离矩阵的行列名以及层次聚类的输入都要求样本名唯一) |
| cutTree | 1 | 按目标簇数量对聚类树进行切分:反复挑选“叶数最多且仍然可以分裂”的节点, 用其子节点替换之,直到簇的数量达到 k 或者已经没有可分裂的节点。 |
| writeClusterLabels | 1 | 将扁平化的簇集合写入 cluster 标签列并返回原表 |
| collectLeafs | 1 | 递归的收集一个簇(子树)之中所有叶节点的名称 |
| assertFeatureRows | 1 | 校验并获取特征矩阵(近似通道的输入是特征矩阵,而不是距离矩阵) |
| centroidDistanceMatrix | 1 | 计算子簇质心之间的对称欧氏距离矩阵(m x m,m 为子簇数量,远小于样本数 n) |
| writePreclusterLabels | 1 | 将子簇级别的扁平簇结果展开回原始样本,写入 cluster 标签列 |
03 Members
NumericTable, Func(Of Double(), Double(), Double))将特征矩阵形式的二维表转换为对称距离矩阵形式的二维表。
返回的新表中:features 为 n x n 的对称距离矩阵(对角线为 0), rowNames 与 featureNames 均为样本名,并继承源表的标签列与名称/描述信息。
Dim dist = x.distanceMatrix()
Dim tree = dist.hca()| Name | Type | Description |
|---|---|---|
source | NumericTable | 特征矩阵形式的二维表(每一行为一个样本,每一列为一个特征) |
metric | Func(Of Double(), Double(), Double) | 距离度量函数,缺省为欧氏距离 |
距离矩阵形式的二维表
对距离矩阵形式的二维表执行凝聚层次聚类,返回聚类树(dendrogram)。
注意:传入的 NumericTable 必须是距离矩阵! 如果 source 是原始的特征矩阵,请先调用 HierarchicalClusteringTableExtensions.distanceMatrix() 将特征矩阵转换为距离矩阵形式的二维表, 然后再进行层次聚类:
Dim dist = x.distanceMatrix()
Dim tree = dist.hca()| Name | Type | Description |
|---|---|---|
source | NumericTable | 距离矩阵形式的二维表(方阵: |
linkage | LinkageStrategy | 连接策略,缺省为平均连接 AverageLinkageStrategy |
silent | Boolean | 是否静默运行(不输出进度信息),缺省为 True |
层次聚类树(根节点)
对距离矩阵形式的二维表执行层次聚类,并按照目标簇数量 k 切分聚类树, 将得到的类编号写入 cluster 标签列之后返回原表。
注意:传入的 NumericTable 必须是距离矩阵! 如果 source 是原始的特征矩阵,请先调用 HierarchicalClusteringTableExtensions.distanceMatrix() 进行转换:
Dim flat = x.distanceMatrix().hcut(k:=3)| Name | Type | Description |
|---|---|---|
source | NumericTable | 距离矩阵形式的二维表(方阵),注意:不是特征矩阵! |
k | Int32 | 目标簇数量 |
linkage | LinkageStrategy | 连接策略,缺省为平均连接 AverageLinkageStrategy |
silent | Boolean | 是否静默运行,缺省为 True |
写入 cluster 标签之后的原表对象
对距离矩阵形式的二维表执行层次聚类,并按照距离阈值 threshold 切分聚类树(复用既有的扁平切分实现),将得到的类编号写入 cluster 标签列之后返回原表。
注意:传入的 NumericTable 必须是距离矩阵! 如果 source 是原始的特征矩阵,请先调用 HierarchicalClusteringTableExtensions.distanceMatrix() 进行转换:
Dim flat = x.distanceMatrix().hcut(threshold:=5.0)| Name | Type | Description |
|---|---|---|
source | NumericTable | 距离矩阵形式的二维表(方阵),注意:不是特征矩阵! |
threshold | Double | 距离阈值,小于该阈值的簇会被合并 |
linkage | LinkageStrategy | 连接策略,缺省为平均连接 AverageLinkageStrategy |
silent | Boolean | 是否静默运行,缺省为 True |
写入 cluster 标签之后的原表对象
NumericTable, BirchOptions)面向大规模数据集的近似层次聚类入口(BIRCH 预聚类 + 凝聚层次聚类)。
与 HierarchicalClusteringTableExtensions.hca() 不同,这里接收的是特征矩阵(而非距离矩阵),并且 不会构造 n×n 距离矩阵:先用 BIRCH CF-tree 把 n 个样本压缩成 m 个子簇 (m 由 BirchOptions.targetSubclusters 控制),再对子簇质心执行 凝聚层次聚类。因此适用于 2 万样本以上的大数据集。
Dim tree = x.hcaApprox()| Name | Type | Description |
|---|---|---|
source | NumericTable | 特征矩阵形式的二维表(每一行为一个样本,每一列为一个特征) |
options | BirchOptions | BIRCH 预聚类参数,缺省使用 BirchOptions 的默认值 |
以子簇为叶节点的层次聚类树(dendrogram)
面向大规模数据集的近似层次聚类并按目标簇数量 k 切分, 将得到的类编号写入 cluster 标签列之后返回原表。
输入为特征矩阵,内部使用 BIRCH 预聚类,不会构造 n×n 距离矩阵。 注意:k 的上限是 BIRCH 实际产生的子簇数量 m; 若 k 大于 m,则最多只能切分出 m 个簇。
| Name | Type | Description |
|---|---|---|
source | NumericTable | 特征矩阵形式的二维表(每一行为一个样本,每一列为一个特征) |
k | Int32 | 目标簇数量 |
options | BirchOptions | BIRCH 预聚类参数,缺省使用 BirchOptions 的默认值 |
写入 cluster 标签之后的原表对象
面向大规模数据集的近似层次聚类并按距离阈值切分,将类编号写入 cluster 标签列后返回原表。
输入为特征矩阵,内部使用 BIRCH 预聚类,不会构造 n×n 距离矩阵。 注意:此处的阈值作用于子簇质心之间的连接距离,与原始样本距离的尺度不同。
| Name | Type | Description |
|---|---|---|
source | NumericTable | 特征矩阵形式的二维表(每一行为一个样本,每一列为一个特征) |
threshold | Double | 子簇质心之间的距离阈值 |
options | BirchOptions | BIRCH 预聚类参数,缺省使用 BirchOptions 的默认值 |
写入 cluster 标签之后的原表对象
在子簇质心上执行(优化后的)凝聚层次聚类
NumericTable, String)校验目标表是否为距离矩阵(方阵),并给出醒目的转换提示
NumericTable)获取唯一的样本名数组(距离矩阵的行列名以及层次聚类的输入都要求样本名唯一)
Int32)按目标簇数量对聚类树进行切分:反复挑选“叶数最多且仍然可以分裂”的节点, 用其子节点替换之,直到簇的数量达到 k 或者已经没有可分裂的节点。
NumericTable, IEnumerable(Of Cluster))将扁平化的簇集合写入 cluster 标签列并返回原表
递归的收集一个簇(子树)之中所有叶节点的名称
NumericTable, String)校验并获取特征矩阵(近似通道的输入是特征矩阵,而不是距离矩阵)
Double()())计算子簇质心之间的对称欧氏距离矩阵(m x m,m 为子簇数量,远小于样本数 n)
NumericTable, IEnumerable(Of Cluster), Dictionary(Of String, Int32()))将子簇级别的扁平簇结果展开回原始样本,写入 cluster 标签列