聚类 DBI 度量指标的数学公式与 Python 源码

数学公式见:

https://www.orzzz.net/directory/mathematics/MultivariateStatisticalAnalysis/CrispClusterValidityIndices/index.html

Python 源码:

def MinkowskiDistance(a: list, b: list, p: int = 2) -> float:
    return sum([abs(i - j) ** p for i, j in zip(a, b)]) ** (1 / p)


def Centroid(C: list[list]) -> list:
    return list(map(lambda c: sum(c) / len(c), zip(*C)))


def Cohesion(C: list[list]) -> float:
    centroid = Centroid(C)
    return sum(MinkowskiDistance(c, centroid) for c in C) / len(C)


def DaviesBouldinIndex(C: list[list[list]], DLL_SO: str = None) -> float:
    return sum(
        max(
            (Cohesion(Ci) + Cohesion(Cj)) / MinkowskiDistance(Centroid(Ci), Centroid(Cj)) for Cj in C if Ci != Cj
        )
        for Ci in C
    ) / len(C)


if __name__ == '__main__':
    C = [
        [
            [5.1, 3.5, 1.4, 0.2],
            [4.9, 3.0, 1.4, 0.2],
            [5.0, 3.3, 1.4, 0.2]
        ],

        [
            [4.9, 2.4, 3.3, 1.0],
            [6.6, 2.9, 4.6, 1.3]
        ],

        [
            [6.5, 3.0, 5.5, 1.8],
            [7.7, 3.8, 6.7, 2.2],
            [7.2, 3.2, 6.0, 1.8],
            [6.4, 2.8, 5.6, 2.1]
        ]
    ]
    print('Illusionna DBI:\t%.16f' % DaviesBouldinIndex(C))
    # --------------------------------------------------------------
    from sklearn.metrics import davies_bouldin_score
    matrix = [sample for cluster in C for sample in cluster]
    labels = [i for i in range(len(C)) for _ in range(len(C[i]))]
    print('sklearn DBI:\t%.16f' % davies_bouldin_score(matrix, labels))

与 sklearn 对比结果:

 

聚类分析是一种无监督学习方法,用于将相似的数据点分组成不同的簇。其原理是在数据空间中寻找最优的簇划分,使得簇内的数据点相似度高,而簇间的数据点相似度低。 数学上,聚类分析可用以下步骤和公式表示: 1. 数据表示:假设我们有一个数据集,包含n个数据点。每个数据点可以表示为一个p维向量,其中每个维度表示一个特征。我们可以将所有数据点表示为一个n×p的数据矩阵X。 2. 相似度度量:为了衡量两个数据点之间的相似度,需要选择适当的相似度度量方法。常见的相似度度量方法包括欧氏距离、曼哈顿距离、余弦相似度等。 3. 距离矩阵计算:根据所选的相似度度量方法,可以计算出数据点之间的距离矩阵D。距离矩阵是一个n×n的矩阵,其中每个元素d_ij表示第i个和第j个数据点之间的距离。 4. 簇划分:根据距离矩阵D和预先设定的聚类数目k,可以将数据点分成k个簇。簇划分的目标是使得簇内的距离小,而簇间的距离大。 5. 簇内距离计算:为了衡量簇内的数据点的相似度,可以计算每个簇内数据点之间的平均距离。常见的簇内距离计算方法包括簇内平均距离、簇内最大距离等。 6. 簇间距离计算:为了衡量簇间的差异,可以计算不同簇之间数据点的平均距离或最小距离。常见的簇间距离计算方法包括簇间平均距离、簇间最小距离等。 7. 目标函数优化:根据簇内距离和簇间距离的关系,可以定义一个目标函数,例如“簇内距离最小化”和“簇间距离最大化”。通过优化这个目标函数,可以得到最优的簇划分。 聚类分析的具体算法有很多,例如K-means、层次聚类、DBSCAN等。每种算法都有不同的数学公式和优化目标,但它们都遵循以上的基本原理。这些算法的具体数学推导和公式推导超出了本回答的范围,可以参考相关的聚类分析教材或论文来深入了解每个算法的细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值