k-Means(二分k-均值算法)

二分k--Means算法是一种优化的k-均值聚类方法,通过每次将数据集均分为两部分来减少随机选择质心带来的误差。通过计算误差平方和来评估划分的准确性,选择误差最大的数据堆进行划分,直至达到预设的聚类数。该算法旨在提高聚类效果并降低随机性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一节中我们已经讲了k-均值算法,当时我们选取的质心是随机选取的,没有什么依据,所以聚类的结果很可能出现误差,为了降低这种误差的出现我们今天来研究一种优化的k-均值算法----二分k--均值算法,看到名称我们就能明白在每次划分的时候都是将数据划分成俩份,直到达到我们要求的聚类数。怎么来分?选取哪一堆数据来分?需要我们计算,这里我们引入一个叫做误差平方和的指标,这个指标越小就代表所分的数据越准确。在上一节中我们有一个矩阵来存储分类后的索引以及到质心的距离。把所有到质心的点的距离求和就是误差平方和,每次选取误差平方和最大的那堆数据进行划分。‘

def biKmeans(dataSet, k, distMeas=distEclud):
    m = shape(dataSet)[0]
    clusterAssment = mat(zeros((m,2)))
    centroid0 = mean(dataSet, axis=0).tolist()[0]
    centList =[centroid0] #create a list with one centroid
    for j in range(m):#calc initial Error
        clusterAssment[j,1] = distMeas(mat(centroid0), dataSet[j,:])**2
    while (len(centList) < k):
        lowestSSE = inf
        for i in range(len(centList)):
            ptsInCurrCluster = dataSet[nonzero(clusterAssment[:,0].A==i)[0],:]
            centroidMat, splitClustAss = kMeans(ptsInCurrCluster, 2, distMeas)
            sseSplit = sum(splitClustAss[:,1])
            sseNotSplit = sum(clusterAs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值