聚类任务
聚类任务是指将一组数据分成多个不同的组(或簇),使得同一组内的数据点彼此相似,而不同组之间的数据点尽可能不相似的过程。聚类任务的目标是发现数据中的固有结构,而不需要事先知道数据的类别信息。聚类算法通常根据数据点之间的相似度或距离将它们分组,使得组内的数据点更加相似,组间的数据点差异更大。
具体来说,聚类算法可以作为一个独立的过程,用于发现数据的内在分布结构,也可以作为其他学习任务(如分类)的前驱过程。
举例来说,在商业应用中,如果需要对新用户的类型进行分类,但商家对"用户类型"的定义可能不太清楚或模糊,这时可以先对用户数据进行聚类。通过聚类,可以将用户划分为不同的簇,每个簇可以被定义为一个用户类型。然后,可以基于这些聚类结果来训练分类模型,用于判断新用户属于哪种类型。
不同的学习策略会导致设计出多种类型的聚类算法,因此在选择聚类算法时需要考虑问题的具体情况和需求。在使用聚类算法时,需要解决性能度量和距离计算等基本问题,以确保算法能够有效地发现数据的内在结构并产生有意义的结果。
聚类度量
聚类的性能度量用于评估聚类算法的效果,通常分为内部度量和外部度量两种类型。
-
内部度量(Internal Measures):内部度量是通过对聚类结果中的数据点进行分析来评估聚类质量的度量方法,而不需要外部信息(如真实标签)。常见的内部度量包括:
-
Davies-Bouldin Index (DBI) 是一种聚类性能度量指标,用于评估聚类结果的紧密度和分离度。它的计算方式是对每个簇计算簇内平均距离(簇内相似度),然后再计算不同簇之间的距离(簇间距离),最后将簇内平均距离与簇间距离的比值进行求和。DBI的值越小,表示聚类效果越好,即簇内的数据点越相似,不同簇之间的分离度越高。
Dunn Index (DI) 是另一种聚类性能度量指标,用于评估聚类结果的紧密度和分离度。它的计算方式是计算不同簇之间的最短距离(簇间距离)和同一簇内最远两个数据点之间的距离(簇内相似度),然后将簇间距离的最小值除以簇内相似度的最大值。DI的值越大,表示聚类效果越好,即簇内的数据点越紧密,不同簇之间的分离度越高。
-
-
外部度量(External Measures):外部度量是通过将聚类结果与真实标签进行比较来评估聚类效果的度量方法。常见的外部度量包括:
- Jaccard系数和Rand指数:用于衡量两个集合之间的相似性,通常用于比较聚类结果与真实标签的相似性。
- Fowlkes-Mallows指数:衡量两个聚类的相似性,通常用于比较不同聚类算法的效果。
距离计算
在聚类中,距离计算是用来衡量两个数据点之间的相似度或距离的方法。距离度量是一种定义在两个数据点之间的函数,表示它们在某种度量空间中的距离。常用的距离度量包括欧氏距离、曼哈顿距离、闵可夫斯基距离等。
欧氏距离(Euclidean Distance)是最常用的距离度量方法,表示两个点在坐标系中的直线距离。在二维空间中,两点之间的欧氏距离可以表示为:
曼哈顿距离(Manhattan Distance)也称为城市街区距离,表示两点在坐标系中沿着网格线走的距离。在二维空间中,两点之间的曼哈顿距离可以表示为:
闵可夫斯基距离(Minkowski Distance)是一种通用的距离度量方法,可以根据不同的参数p表示不同的距离度量方式。在二维空间中,两点之间的闵可夫斯基距离可以表示为:
距离度量在聚类中起着重要作用,影响着聚类结果的质量和效果。根据数据的特点和需求,选择合适的距离度量方法对于聚类算法的性能和效果至关重要。
在聚类中,我们通常将属性划分为连续属性和离散属性。连续属性在定义域上有无穷多个可能的取值,而离散属性在定义域上是有限个取值的。在讨论距离计算时,属性是否定义了"序"关系更为重要。有序属性是指属性值之间有明确的顺序关系,可以在属性值上直接计算距离,例如定义域为 (1, 2, 3) 的离散属性。而无序属性是指属性值之间没有明确的顺序关系,不能直接在属性值上计算距离,例如定义域为 {飞机, 火车, 轮船} 的离散属性。
对于有序属性,闵可夫斯基距离可以用于计算距离。对于无序属性,可以采用值差异度量(Value Difference Metric, VDM) 来计算距离。VDM是一种度量两个离散属性值之间的距离的方法 ,其计算方式如下:
其中, 表示在属性u上取值为a的样本数,表示在第i个样本簇中在属性u上取值为 a的样本数,k为样本簇数。通过计算 VDM 距离,可以衡量两个离散属性值之间的差异程度。
将闵可夫斯基距离和VDM结合可以处理混合属性的情况,其中VDM用于处理离散属性之间的距离计算,而闵可夫斯基距离则用于处理连续属性之间的距离计算。当样本空间中不同属性的重要性不同时,可以使用加权距离(weighted distance),即对不同属性的距离计算结果进行加权求和。
需要注意的是,通常我们是基于某种形式的距离 来定义"相似度度量"(similarity measure),而不是直接使用距离 作为相似度度量 。在相似度度量中,距离越大,相似度越小 。然而,用于相似度度量的距离 未必要满足距离度量的所有基本性质,尤其是传递性。
原型聚类
原型聚类是一种常见的聚类算法,其基本思想是通过将数据点划分为若干个类别,每个类别由一个原型或代表性点表示,来描述数据的内在结构。原型通常可以是类别的中心或者是类别中具有代表性的点。
原型聚类的主要步骤包括:
- 初始化:选择初始的原型点。
- 分配:将每个数据点分配到与其最近的原型所代表的类别中。
- 更新:根据每个类别中已分配的数据点,更新原型的位置。
- 重复步骤2和步骤3,直到达到停止条件(如原型位置不再变化或达到最大迭代次数)为止。
常见的原型聚类算法包括K均值聚类(K-Means Clustering)和学习向量量化(Learning Vector Quantization,LVQ)等。这些算法通常根据数据点之间的距离或相似度来确定原型点的位置,并通过迭代优化原型点的位置来得到最终的聚类结果。原型聚类算法简单易懂,计算效率高,在处理大规模数据集时具有较好的性能表现。
k 均值算法
K均值聚类是一种常用的原型聚类算法,它将数据点划分为K个类别,每个类别由其均值(即中心)表示。K均值聚类的基本思想是通过迭代的方式将数据点分配到K个类别中,并更新每个类别的均值,直到达到某个停止条件为止。
具体来说,K均值聚类的步骤如下:
- 初始化:随机选择K个数据点作为初始的类别中心。
- 分配:将每个数据点分配到与其最近的类别中心所代表的类别中。
- 更新:根据每个类别中已分配的数据点,更新类别中心的位置为该类别中所有数据点的平均值。
- 重复步骤2和步骤3,直到达到某个停止条件(如类别中心不再变化或达到最大迭代次数)为止。
K均值聚类的优点包括简单易实现、计算效率高等,适用于处理大规模数据集。然而,K均值聚类也有一些缺点,例如对初始类别中心的选择敏感,可能收敛到局部最优解,对异常值和噪声敏感等。
学习向量量化
学习向量量化(Learning Vector Quantization,LVQ)是一种原型聚类算法,类似于K均值聚类,但具有一定的监督学习成分。LVQ旨在将数据点划分为几个类别,并学习每个类别的原型向量,以便更好地表示和区分不同类别。
LVQ的基本思想是通过迭代学习,调整原型向量的位置,使其更好地代表相应类别的数据点。LVQ算法的一般步骤如下:
- 初始化:随机选择每个类别的原型向量。
- 训练:对于每个样本,计算其与每个原型向量之间的距离,并选择最近的原型向量作为其所属类别。
- 调整:根据样本的类别标签和最近原型向量的类别标签,调整最近原型向量的位置,使其向样本移动。
- 重复步骤2和步骤3,直到达到停止条件(如达到最大迭代次数或类别中心不再变化)为止。
在LVQ中,原型向量的调整是通过一定的学习率和距离衰减函数来实现的。学习率控制了原型向量调整的幅度,而距离衰减函数则可以使得在训练初期对原型向量的调整幅度较大,在训练后期逐渐减小,从而更加稳定地收敛到最终结果。
LVQ算法的优点包括简单易懂、计算效率高等,同时具有一定的监督学习能力,可以更好地区分不同类别。然而,与K均值聚类类似,LVQ也对初始原型向量的选择敏感,可能收敛到局部最优解,对异常值和噪声敏感等。
高斯混合聚类
高斯混合模型(Gaussian Mixture Model,GMM)是一种常用的聚类算法,它假设数据是由多个高斯分布混合而成的。在GMM中,每个高斯分布代表一个类别,而数据点 则根据 这些高斯分布的混合比例被分配到不同的类别中。
GMM的基本思想是通过最大化数据的似然函数 来估计每个高斯分布 的参数 (均值和协方差矩阵),从而得到最优的混合模型 。GMM的参数估计通常使用期望最大化(Expectation-Maximization,EM)算法来实现,具体步骤如下:
-
初始化:随机初始化每个高斯分布的均值和协方差矩阵,以及每个高斯分布的混合比例。
-
E步骤(Expectation Step):根据当前的参数估计,计算每个数据点属于每个高斯分布的后验概率。
-
M步骤(Maximization Step):根据E步骤计算得到的后验概率,更新每个高斯分布的参数(均值、协方差矩阵和混合比例)。
-
重复E步骤和M步骤,直到收敛(参数变化很小或达到最大迭代次数)为止。
GMM可以用于聚类、密度估计和异常检测等任务。它的优点包括对数据分布的建模能力强,能够捕捉数据的复杂结构;缺点包括对初始参数值敏感,可能收敛到局部最优解,计算复杂度较高等。
了解GMM需要对高斯分布、EM算法以及概率图模型等知识有一定的了解。深入研究GMM可以进一步加深对聚类算法和概率模型的理解,有助于在实际应用中更好地应用和调整算法。
密度聚类
密度聚类(Density-based clustering)是一种基于密度的聚类算法,其主要思想是将密度较高的数据点划分为一个类别 ,并且能够有效处理具有复杂形状的聚类簇 。与传统的基于距离的聚类方法(如K均值聚类)不同,密度聚类不需要指定聚类的个数,而是根据数据点的密度来确定聚类簇的形状和数量。
密度聚类的核心概念是密度可达性和密度连接性:
- 密度可达性:如果数据点p 可以从数据点q通过一系列相互密度可达的数据点到达,则称p是从q密度可达的。这意味着p和q在同一个密集区域内。
- 密度连接性:如果存在一个数据点o,使得数据点p和q都是从o密度可达的,则称p和q是密度连接的。密度连接是密度可达的传递闭包。
基于密度可达性和密度连接性的定义,密度聚类算法可以通过以下步骤进行:
- 初始化:将所有数据点 标记为未访问状态。
- 遍历数据集:对于每个未访问的数据点p,检查其ε-邻域内是 否存在足够数量的数据点**(达到密度阈值)**。
- 标记聚类簇:将p及其密度可达的数据点标记为同一个聚类簇。
- 扩展聚类簇:对于每个被标记为聚类簇的数据点,继续检查其密度可达的数据点,并将其加入聚类簇。
- 重复步骤2和步骤3,直到所有数据点都被访问过。
常见的密度聚类算法包括DBSCAN(Density-Based Spatial Clustering of Applications with Noise) 和**OPTICS(Ordering Points To Identify the Clustering Structure)**等。这些算法能够有效地识别具有不同密度和形状的聚类簇,并且对噪声数据有一定的鲁棒性。密度聚类在处理非凸形状和噪声较多的数据集时表现出色,但在处理密度差异较大的数据集时可能会面临挑战。
DBSCAN:
- 基本思想:DBSCAN通过定义两个参数,ε(邻域半径)和MinPts(邻域内最小点数),来划分数据点为核心点、边界点和噪声点。核心点是指在其ε-邻域内至少包含MinPts个点的点,边界点是指在其ε-邻域内包含少于MinPts个点但属于核心点的点,噪声点是指既不是核心点也不是边界点的点。
- 算法步骤:
- 初始化:将所有点标记为未访问状态。
- 遍历数据集:对于每个未访问的点p,检查其ε-邻域内是否有至少MinPts个点。
- 标记聚类簇:如果p是核心点,则将p及其ε-邻域内的所有点标记为同一个聚类簇;如果p是边界点,则将p加入到其ε-邻域内的核心点所属的聚类簇中。
- 重复步骤2和步骤3,直到所有点都被访问过。
OPTICS:
- 基本思想:OPTICS是一种基于密度可达性和密度连接性的聚类算法,它通过计算每个数据点到其ε-邻域内的最小密度来确定每个点的核心距离,然后利用核心距离构建一个可达距离图,从而识别聚类簇和噪声点。
- 算法步骤:
- 初始化:将所有点标记为未访问状态。
- 计算核心距离:对于每个点p,计算其到第k个最近邻点的距离,作为其核心距离。
- 构建可达距离图:根据核心距离和ε构建可达距离图。
- 寻找聚类簇:从可达距离图中识别密度可达的点,并将其归为同一个聚类簇。
- 重复步骤2和步骤4,直到所有点都被访问过。
层次聚类
层次聚类(Hierarchical Clustering)是一种将数据点逐渐合并成越来越大的聚类簇 (自下而上)或者将所有数据点 逐渐细分为越来越小的聚类簇 (自上而下)的聚类方法。层次聚类不需要事先指定聚类的个数,而是根据数据点之间的相似性逐步合并或分割聚类簇。
AGNES(Agglomerative Nesting)是一种凝聚层次聚类算法,采用自底向上的聚合策略。在AGNES算法中,每个数据点最初被视为一个单独的聚类,然后通过计算两个最接近的聚类之间的距离来逐步合并聚类,直到所有数据点被合并为一个聚类。
AGNES算法的主要步骤如下:
-
初始化:将每个数据点视为一个单独的聚类。
-
计算聚类间的距离矩阵:计算每对聚类之间的距离,通常使用最短距离(single linkage)、最长距离(complete linkage)或平均距离(average linkage)等方法。
-
合并最近的聚类:找到距离最近的两个聚类,并将它们合并为一个新的聚类。
-
更新距离矩阵:根据合并后的聚类与其他聚类的距离更新距离矩阵。
-
重复步骤3和步骤4,直到所有数据点都被合并为一个聚类。
AGNES算法的优点包括不需要事先指定聚类的个数、能够捕捉聚类之间的层次结构以及对噪声数据具有一定的鲁棒性。然而,AGNES算法的计算复杂度较高,特别是在处理大规模数据集时可能会面临挑战。