# 聚类分析

### DBScan

**节点用途：** 聚类的一种算法。

DBScan是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同，本算法将簇定义为密度相连的点的最大集合，能够把具有足够高密度的区域划分为簇，并可在噪声的空间数据库中发现任意形状的聚类。

但是，在配置算法时，同样需要预先设定每个类别的最小样本点的个数和点之间的邻域半径。

**DBSCAN聚类算法步骤：**

1.  首先在数据库中随机抽取一个点作为一个类
2.  如果抽取的点是核心点，则找出所有从该点密度可达的对象，形成一个类；
3.  如果抽取的点是边界点，则跳出本次循环，寻找下一个点
4.  重复第二三步，直到所有的点都被处理。

**操作方法：**

1.  配置节点，如下图：

![](/uploads/projects/smartmining/202607/18bf043fc7840ea8.png)

**配置选项卡：**

![](/uploads/projects/smartmining/202607/18bf043fc87e9378.png)**说明**：

-   **距离阈值：**是否归为同一类的距离阈值
-   **类最小个数**：类簇中最小成员个数
-   **距离类型**：计算样本距离是采用的样本函数
-   **固定随机种子：**如果希望每次执行的结果不变，则勾选此项。如果不勾选，每次执行会使用一个新的随机种子，多次执行的结果可能有所不同。

### K-Means

**节点用途：** 该节点根据预定义的聚类数对输入数据进行聚类。每一个数据向量只归属一个类。当中心不在变化时算法会终止执行。

**说明：** 聚类算法采用欧氏距离对选中的属性进行距离计算。该节点不会数据进行标准化，如果需要，可以先使用标准化节点进行预处理。

**k-means 算法基本步骤**：

1.  从 n个数据对象任意选择 k 个对象作为初始聚类中心；
2.  根据每个聚类对象的均值（中心对象），计算每个对象与这些中心对象的距离，并根据最小距离重新对相应对象进行划分；
3.  重新计算每个（有变化）聚类的均值（中心对象）；
4.  计算标准测度函数，当满足一定条件，如函数收敛时，则算法终止；如果条件不满足则回到步骤

**操作方法：**

1.  配置节点，如下图：

![](/uploads/projects/smartmining/202607/18bf043fc9903a28.png)

图5-2-2-1

**配置选项卡：**

![](/uploads/projects/smartmining/202607/18bf043fca69dd00.png)**说明**：

-   **聚类数**：由用户自行定义的聚类结果输出的簇数，默认值为5.
-   **聚类标签**： 聚类后生成的聚类簇字段的取值，可以选择数值型，字符串，并可以自定义字符串型标签的前缀，比如“cluster”，“组”
-   **生成距离字段**：如勾选，则输出表中会增加衡量每条记录到所在簇中心的距离的字段
-   **最大迭代：**整个聚类过程中，迭代部分最多重复次数，防止在局部陷入循环，默认为20次
-   **收敛条件**：目标函数的变化小于用户设定的收敛条件时即停止迭代，默认值为0.001
-   **初始化算法**： 选择初始簇中心的方法，可以选择Random（随机选择初始簇中心）或者K-Means-Parallel聚类数
-   **固定随机种子：**如果希望每次执行的结果不变，勾选此选项。如果不勾选，每次执行会使用一个新的随机种子，多次执行的结果可能有所不同。
-   **名义值最大类别数：**在模型训练期间，名义型字段的取值不能超过这里所定义的最大类别数，取值过多的话容易造成系统运算效率低，默认值5。
-   **缺失值:** 模型数据中，若有缺失值，模型可选择终止执行，停止建模，或者模型仅使用完整记录进行建模。

1.  确认配置后，执行并查看视图，以及预测表

-   **聚类概述图**：显示聚类分布，聚类大小，聚类质量
-   **聚类单元视图：**显示每个类别特征指标的分布
-   **聚类视图：** 显示每个类中的样本数，样本每个字段的均值。
-   **PMML模型\\PMML导出**
-   **输出表：**输出原始数据，以及分类信息

**案例如下：**

在软件自带“媒体分级”案例中使用了该节点，工作流如下：

![](/uploads/projects/smartmining/202607/18bf043fcb378188.png)

该节点配置如图5-2-2-1，确认后执行。

执行结果用表输出为：

![](/uploads/projects/smartmining/202607/18bf043fcbcf9720.png)![](/uploads/projects/smartmining/202607/18bf043fcc8068c0.png)

### K-Medoids

**节点用途：** 聚类算法，K-Medoids算法与K-Means算法非常相似，该算法同样基于各个点之间的距离进行聚类，也需要用户提前指定类别数。

**K-Medoids算法基本步骤**：

1.  随机选择K个初始点作为初始质心
2.  计算各个点到质心的距离，将点的类划分为距离他最近的质心，形成K个类
3.  根据分类好的类，在每个类内重新计算质心，计算方法如下：
4.  计算每个类内所有样本点之间的距离和绝对误差；
5.  选出使每个类绝对误差最小的样本点作为质心
6.  重复迭代2-3步直到满足迭代次数或误差不再变化。

可以看出，K-Medoids和K-Means的主要区别在于质心的选择，K-Means的质心是类内样本点的均值，可能不是一个实际的样本点，而K-Medoids是以某个样本点为质心的。

**K-Medoids的优缺点**：

1.  在计算质心时，由于要计算类内样本点两两之间的距离，因此计算的复杂度为O(n^2),远远高于K-MeansO(n)
2.  由于计算质心时没有运用均值，K-Medoids的稳健性很好，在样本量较少或者存在极值时对质心的影响非常小。

综上所述，K-Medoids更适用于样本量小，且样本分布分散的情况。

**操作方法：**

1.  配置节点，如下图：

![](/uploads/projects/smartmining/202607/18bf043fcd3bd920.png)

图5-2-3-1

**配置选项卡：**

![](/uploads/projects/smartmining/202607/18bf043fcdc6def8.png)**说明**：

-   **距离函数：**聚类过程中计算样本之间距离所用函数，默认为“欧式距离”
-   **聚类数**：由用户自行定义的聚类结果输出的簇数，默认值为3.
-   **块大小**：算法每次要考虑的行数。该项对输出结果没有影响，只影响运行速度。指定的值越大执行越快，但也越耗内存。
-   **迭代次数：**整个聚类过程中，迭代部分最多重复次数，防止在局部陷入循环，默认为20次
-   **固定随机种子：**如果希望每次执行的结果不变，则勾选此项。如果不勾选，每次执行会使用一个新的随机种子，多次执行的结果可能有所不同。
-   **输出相对中心点距离**：勾选此项，将会在输出表中增加多个表示每条记录到每个中心点的距离字段。值越小则与该中心点的相似性越大。有多少个聚类数，就将多生成几个字段
-   **禁止非对称距离：**勾选此项，当输入距离向量被标记为非对称时该节点将会执行失败。由于交替最小，不对称的距离可能会导致无限循环。默认勾选。

1.  确认配置后，执行并查看视图，以及预测表

-   **聚类概述图**：显示聚类分布，聚类大小，聚类质量
-   **聚类单元视图：**显示每个类别特征指标的分布
-   **聚类视图：** 显示每个类中的样本数，样本每个字段的均值。
-   **PMML模型\\PMML导出**
-   **输出表：**输出原始数据，以及分类信息

### 模糊C均值

**节点用途：**聚类的一种算法。模糊C均值算法称为软划分，是基于模糊数学的概念发展起来的，在这类算法中，每个样本xi不再只能属于一种类别，而是有对应的隶属度数组，数组里的每一个元素代表xi属于所有C类中的第j类的程度uij。而该样本的隶属度数组中的总值等于1,也就是 =1。

**模糊C均值算法步骤：**

模糊C均值算法的实现步骤与K-Means的基本相同，其最主要的差别在于，计算质心时使用的以各个样本对该类的隶属度对样本值进行加权

模糊C均值算法的实现过程如下：

1.  先随机指定每个数据到各个类别的隶属度；
2.  计算每个类的质心，也就是各个数据在每个类别中以隶属度为权重的加权平均，并计算每个数据到质心的距离；
3.  根据更新的质心重新估计隶属度；
4.  重复2-3步，直至误差平方和不再减小或者质心不再发生变化

**操作方法：**

1.  配置节点，如下图：

![](/uploads/projects/smartmining/202607/18bf043fce55ccd0.png)

**配置选项卡：**

![](/uploads/projects/smartmining/202607/18bf043fcedaa4a0.png)**说明**：

-   **聚类数**：由用户自行定义的聚类结果输出的簇数，默认值为5.
-   **最大迭代：**整个聚类过程中，迭代部分最多重复次数，防止在局部陷入循环，默认为20次
-   **模糊化**：显示允许重叠的聚类数。
-   **固定随机种子：**如果希望每次执行的结果不变，勾选此选项。如果不勾选，每次执行会使用一个新的随机种子，多次执行的结果可能有所不同。
-   **包含噪声类：**模型计算中是否包含噪声类数据。
-   **设置差值：**每个数据点到噪声类中心之间的固定距离
-   **自动设置差值并指定常数：**在每次迭代中，基于平均距离更新Delta的值。然而，必须根据类的形状设置lambda的参数值
-   **在内存中运行：**如果选中此项，将会在内存中进行聚类计算，提高运行效率
-   **计算质量度量：**这里指定是否为聚类计算质量度量值。当数据较大时，会消耗大量的内存和时间

1.  确认配置后，执行并查看视图，以及输出结果

-   **聚类概述图**：显示聚类分布，聚类大小，聚类质量
-   **聚类单元视图：**显示每个类别特征指标的分布
-   **聚类视图：** 显示每个类中的样本数，样本每个字段的均值。
-   **PMML模型\\PMML导出**
-   **输出表：**输出原始数据，以及分类信息

### 异常

**节点用途：** 异常节点用于识别数据中的离群点或异常观测点。

该节点通过聚类分析的手段进行异常判断，也就是将输入数据中的记录分成2个（或多个）类，然后计算每个类中点到类中心的距离，离类中心越远的点就越异常，这个是异常节点进行异常判断的基本思想。

为了描述每条记录的异常程度，定义了一个变量，即“异常指数”，这个变量的值，为点到类中心的距离除以该类中所有点到类中心距离的平均值。这个节点通过计算得到每条记录的异常指数，然后通过异常指数的大小来判断该条记录是否异常。

**操作方法：**

1.  配置节点，如下图：

![](/uploads/projects/smartmining/202607/18bf043fcf6813a8.png)

**配置选项卡：**

![](/uploads/projects/smartmining/202607/18bf043fd018f100.png)**说明**：

-   **异常判断模式：**异常判断的模式有两种：

1.  **异常记录百分比：**设置一个阈值，表示标记为异常的记录数占总的记录数的百分比
2.  **异常记录数：**设置一个阈值，表示在异常表中标记为异常记录的数量

-   **要报告的异常字段数 ：**指定要报告的异常字段数，报告中说明记录被标记为异常的原因。将报告最异常字段，最异常字段指的是与记录所属聚类的字段标准偏差最大的字段。
-   **调整系数：**用于平衡在计算距离时赋予连续（数字范围）和分类字段的相对权重的数值。值越大，连续字段的影响也越大，它必须为非 0 值。
-   **自动计算对等数组：**用于快速分析大量可能的解决方案，以选择异常判断时的最佳聚类数。可通过设置对等数组的最大值和最小值，来扩大或缩小聚类数范围。较大的值可使系统在更大范围内搜索可能的解决方案，但是，消耗的处理时间也随之增加。
-   **指定对等组数 ：**人为指定异常分析时聚类的数量，一般而言，选中此选项可提高性能。
-   **噪声水平：**噪声数据的干扰程度
-   **噪声比率：**噪声数据数量比例的设定

### GMM

**节点用途：**聚类的一种算法。

高斯混合模型（Gaussian Mixture Model, GMM）是一种概率式的聚类方法。假设所有的数据样本服从混合高斯分布，那么只要根据数据推出 GMM 的概率分布来就可以了，然后GMM的K个成分实际上对应K个分类。对于一个点xi，它属于第k个聚类中心的可能性wik是一个属于0到1之间的概率值，聚类结果会将xi分配到wik最大的类别，k=1,...,K。

**高斯混合模型算法基本步骤：**

一般求解高斯混合模型都用的是EM算法，估计高斯混合分布的先验参数，然后计算每个样本点属于每一类别的后验分布，将其判定为概率值最大的那一类。

EM算法的实现过程如下：

1.  初始化参数μi,σi和wi，i，2，...，K；
2.  E-步：根据上一步得到的参数估计，计算计算每个样本点属于每一类别的后验概率；
3.  M-步：根据上一步得到的概率值，应用极大似然法对高斯混合分布的参数重新进行估计；
4.  重复第二三步，直到达到规定的最大迭代次数或者收敛标准。

**GMM和K-Means的关系**

K-Means算法可以被视为高斯混合模型的一种特殊形式。假设在高斯混合模型中，各个成分的方差一致，且每个样本仅仅指向一个成分时，高斯混合聚类与K-Means算法一致。

**操作方法：**

1.  配置节点，如下图：

![](/uploads/projects/smartmining/202607/18bf043fd0a1d7e0.png)

**配置选项卡：**

![](/uploads/projects/smartmining/202607/18bf043fd1232188.png)**说明**：

-   **聚类数**：由用户自行定义的聚类结果输出的簇数，默认值为5.
-   **聚类标签**： 聚类后生成的聚类簇字段的取值，可以选择数值型，字符串，并可以自定义字符串型标签的前缀，比如“cluster”，“组”
-   **生成距离字段**：如勾选，则输出表中会增加衡量每条记录到所在簇中心的距离的字段
-   **最大迭代：**整个聚类过程中，迭代部分最多重复次数，防止在局部陷入循环，默认为20次
-   **收敛条件**：目标函数的变化小于用户设定的收敛条件时即停止迭代，默认值为0.001
-   **固定随机种子：**如果希望每次执行的结果不变，勾选此选项。如果不勾选，每次执行会使用一个新的随机种子，多次执行的结果可能有所不同。
-   **名义值最大类别数：**在模型训练期间，名义型字段的取值不能超过这里所定义的最大类别数，取值过多的话容易造成系统运算效率低，默认值5。
-   **缺失值:** 模型数据中，若有缺失值，模型可选择终止执行，停止建模，或者模型仅使用完整记录进行建模。

1.  确认配置后，执行并查看视图，以及输出结果

-   **聚类概述图**：显示聚类分布，聚类大小，聚类质量
-   **聚类单元视图：**显示每个类别特征指标的分布
-   **聚类视图：** 显示每个类中的样本数，样本每个字段的均值。
-   **PMML模型\\PMML导出**
-   **输出表：**输出原始数据，以及分类信息

### 两步聚类

**节点用途：** 两步聚类是基于BIRCH层次聚类的改进算法。

相对于其他的聚类算法，两步聚类更适合**超大样本**的情况，而且能处理输入变量同时包括分类型和数值型的情况，而两步骤聚类可以根据算法设定的规则自动确定最佳类别个数。

**两步聚类算法：**

1.  利用BIRCH算法构造CF-树的思想，逐个读取数据，进行预聚类，将样本点聚类成子类
2.  以预聚类的子类为对象，基于每个子类的聚类特征，使用凝聚法逐个合并子类，达到最佳类别数。

在构建CF-树的过程中，可以选择是否对离群值进行处理，离群值的定义是叶节点的数据量小于一定比例的规模最大的CF-树中的记录数，默认情况下这个比例是25%。

**操作方法：**

1.  配置节点，如下图，一般选择默认设置。

![两步骤类配置](/uploads/projects/smartmining/202607/18bf043fd19fdb38.png)

**配置选项卡：**

![](/uploads/projects/smartmining/202607/18bf043fd23ac760.png)**说明**：

-   **聚类数**：由用户自行定义的聚类结果输出的簇数，默认值为5.
-   **最大聚类数：**由系统自行聚类的最大聚类簇数，默认值为100.
-   **聚类标签**： 聚类后生成的聚类簇字段的取值，可以选择数值型，字符串，并可以自定义字符串型标签的前缀，比如“cluster”，“组”
-   **生成距离字段**：如勾选，则输出表中会增加衡量每条记录到所在簇中心的距离的字段
-   **最大子节点个数：**聚类过程中子节点的个数的上限
-   **距离阈值初始值：**距离阈值的厨师值设定，默认为0.5
-   **调整系数：**调整聚类过程中所用参数。
-   **是否允许节点分裂后合并：**模型聚类过程中设置，可以按照聚类效果调试
-   **是否允许离群聚类：**聚类中出现异常值节点，是否允许模型将离群数据划入某聚类中
-   **名义值最大类别数：**在模型训练期间，名义型字段的取值不能超过这里所定义的最大类别数，取值过多的话容易造成系统运算效率低，默认值5。
-   **缺失值:** 模型数据中，若有缺失值，模型可选择终止执行，停止建模，或者模型仅使用完整记录进行建模。

1.  确认配置后，执行并查看视图，以及输出结果

-   **聚类概述图**：显示聚类分布，聚类大小，聚类质量
-   **聚类单元视图：**显示每个类别特征指标的分布
-   **聚类视图：** 显示每个类中的样本数，样本每个字段的均值。
-   **PMML模型\\PMML导出**
-   **输出表：**输出原始数据，以及分类信息

### EM

**节点用途：**EM聚类算法有一个特性，就是没有严格要求一个点必须要属于一个类，这一特性被称为**软聚类**。EM算法是在概率模型中寻找参数最大似然估计或者最大后验估计的算法，其中概率模型依赖于无法观测的隐藏变量。EM经常用在机器学习和计算机视觉的数据聚类领域。

**EM算法：**经过两个步骤交替进行计算

1.  E-step：对于每一个数据点，我们要计算其属于其中每个聚类的概率作为权重：如果一个点很大可能属于一个聚类，就将对应的概率设置为接近1的值，对于那种可能会出现一个点属于2个或多个聚类的情况，就需要建立一个对聚类的概率分布
2.  M-step：这一步骤主要是利用上一步计算的权重来估计每个聚类的有关参数（均值，方差）：每一个数据点以E-step中的概率作权重，然后与K-means一样计算每一个聚类的均值和方差，进而求取聚类的总体概率或极大似然。

这样通过E-step和M-step的不断交替来增加总的对数似然直到收敛，而且最大值也有可能陷入局部最优，所以需要多次迭代。

**操作方法：**

1.  配置节点，如下图：

![](/uploads/projects/smartmining/202607/18bf043fd2e0cf48.png)

**配置选项卡：**

![](/uploads/projects/smartmining/202607/18bf043fd357f348.png)**说明**：

-   **聚类数**：由用户自行定义的聚类结果输出的簇数，默认值为3.
-   **最大迭代数：**整个聚类过程中，迭代部分最多重复次数，防止在局部陷入循环，默认100次，模型不理想时，可以增加最大迭代数。
-   **迭代最小提升：**每次迭代的最小提升
-   **分布最小标准差：**高斯分布最小的标准差
-   **并发度：**模型计算并发执行，值越大，并发度越高。0表示不启用并发
-   **折数：**交叉验证所用样本折数
-   **最大样本数：**交叉验证最大样本个数
-   **似然最小提升：**似然值最小提升值
-   **使用静态种子：**如果希望每次执行的结果不变，勾选此选项。如果不勾选，每次执行会使用一个新的随机种子，多次执行的结果可能有所不同。

1.  确认配置后，执行并查看视图，以及输出结果

-   **聚类概述图**：显示聚类分布，聚类大小，聚类质量
-   **聚类单元视图：**显示每个类别特征指标的分布
-   **聚类视图：** 显示每个类中的样本数，样本每个字段的均值。
-   **PMML模型\\PMML导出**
-   **输出表：**输出原始数据，以及分类信息

### 层次聚类

**节点用途：**层次聚类也叫系统聚类。通过对数据集按照某种方法进行层次分解，直到满足某种条件为止。

**注意:** 该节点只能在小数据集上运行。它保存全部的数据在内存中计算，并且具有立方体的复杂性。

具体又可分为凝聚的，分裂的两种方案:

-   凝聚的层次聚类是一种自底向上的策略，首先将每个对象作为一个簇，然后合并这些原子簇为越来越大的簇，直到所有的对象都在一个簇中， 或者某个终结条件被满足，绝大多数层次聚类方法属于这一类，它们只是在簇间相似度的定义上有所不同。
-   分裂的层次聚类与凝聚的层次聚类相反，采用自顶向下的策略，它首先将所有对象置于同一个簇中，然后逐渐细分为越来越小的簇，直到每个对象自成一簇，或者达到了某个终止条件。

为了定义类间的距离必须定义一种度量距离的方法。主要有以下三种方法:

-   最短距离: 类间距离等于两类对象之间的最小距离，若用相似度衡量，则是各类中的任一对象与另一类中任一对象的最大相似度。
-   最长距离: 组间距离等于两组对象之间的最大距离。
-   平均距离: 组间距离等于两组对象之间的平均距离。

为了度量两点之间的距离，选择一个度量方法是有必要的。您可以选择欧式距离或者曼哈顿距离，这符合L1和L2范数。

**操作方法：**

1.  配置节点，如下图：

![](/uploads/projects/smartmining/202607/18bf043fd41ae1a0.png)

**配置选项卡：**

![](/uploads/projects/smartmining/202607/18bf043fd5420450.png)**说明**：

-   **聚类数**：由用户自行定义的聚类结果输出的簇数，默认值为3.
-   **距离函数：**整个聚类过程中，用于计算两节点之前距离的函数
-   **聚类方法：**聚类中，定义聚类过程中组间距的方法，有single（最短距离），average（平均距离），complete（最长距离）
-   **缓存距离：**通过缓存数据点之间的距离值来提高高维数据集的计算效率。它需要大量的内存，因此您在使用时应结合数据集的大小考虑内存情况。

1.  确认配置后，执行并查看视图，以及输出结果

-   **聚类概述图**：显示聚类分布，聚类大小，聚类质量
-   **聚类单元视图：**显示每个类别特征指标的分布
-   **聚类视图：** 显示每个类中的样本数，样本每个字段的均值。
-   **PMML模型\\PMML导出**
-   **输出表：**输出原始数据，以及分类信息

### 相似搜素

**节点用途：**该节点检索出查询表和参考表中，与指定相似度/距离准则匹配的记录。

**节点配置：**

![](/uploads/projects/smartmining/202607/18bf043fd5f31470.png)

**配置选项卡：**

![](/uploads/projects/smartmining/202607/18bf043fd67a68f8.png)**说明**：距离函数：选择用于计算距离或相似性的方法。

-   **欧氏距离：**需要一个或者多个数值字段
-   **曼哈顿距离：**需要一个或者多个数值字段
-   **距离向量：**需要有一个由距离矩阵计算节点生成的距离向量类型的字段
-   **Tanimoto相似：**需要一个位向量
-   **余弦相似：**需要一个或者多个数值字段
-   **位向量余弦相似：**需要一个位向量
-   **Dice系数：**需要一个位向量
-   **编辑（绝对）：**需要字符型字段。它字符串编辑之间的绝对数量（可以大于1）
-   **编辑（归一化）：**需要字符型字段。它字符串编辑之间数量的归一化之后的值（不超过1）

### 类分配器

**节点用途：**基于一种层次聚类将各个记录分配到类别。可以选择一个固定的聚类数或输入一个距离阀值。如果采用第二种方式，则所有最小距离小于指定阀值的聚类都将会被采用。阀值是一个给定的在0到1之间的标准距离。所有的距离都基于最大距离进行标准化。

**操作方法：**

1.  配置节点，如下图：

![](/uploads/projects/smartmining/202607/18bf043fd7030988.png)

**配置选项卡：**

![](/uploads/projects/smartmining/202607/18bf043fd7969ae0.png)**说明**：

-   **更改聚类字段名称：**重新定义聚类字段名称
-   **生成距离字段**：如勾选，则输出表中会增加衡量每条记录到所在簇中心的距离的字段
-   **缺失值:** 模型数据中，若有缺失值，模型可选择终止执行，停止建模，或者模型仅使用完整记录进行建模。

**案例如下：**

使用“信用卡违约数据”建立如下工作流：

![](/uploads/projects/smartmining/202607/18bf043fd83fbfa8.png)

节点配置为默认值，执行后

执行结果如下图所示，将每条记录进行了分类。

![](/uploads/projects/smartmining/202607/18bf043fd8dfeb90.png)