Part3-Chapter10-利用k均值聚类算法对未标注数据分组(3)

本文介绍了k-均值聚类算法的一种改进——二分k-均值方法,旨在解决初始质点选择对聚类效果的影响。该方法从所有数据归为一类开始,逐步分裂并计算误差,直至达到预设的k值。通过计算特征的均值来划分数据,确保分类后误差降低。
摘要由CSDN通过智能技术生成

前面介绍了普通的k-均值算法,该算法在初始时随机选取k个点作为初始质点,这种方法的坏处在于,如果一开始选择不当,即使后期有所改善,但对效果依旧会有影响。为了对这一方法进行改进,我们提出一种新的方法:二分k-均值方法。

这种方法是在开始时将所有数据视为同一类,然后对每一聚类:计算它的总误差,再将它分为两类,然后计算分类后的质点和误差。若分类后误差小于分类前误差,则找到分裂后误差最小的那个聚类,将其分裂并更新数据归属。

重复这一过程直到聚类数达到给定k值。我写的代码如下:

#二分K-均值算法
#dataSet:数据集
#k:指定聚类数
#splitFeat:用于分割的特征
def biKmeans(dataSet,k,splitFeat = 0):
    m,n = np.shape(dataSet)
    #保存数据所属聚类及与所属聚类质点距离的矩阵
    inDat = np.mat(np.zeros((m,2)))
    #一开始将所有点归为一个聚类,并将数据均值作为该聚类的质点
    for i in range(m):
        inDat[i][0] = 0
        #inDat[i][1] =\
        sum = calDis(dataSet[i][:], np.mean(dataSet,axis = 0))

    #当前聚类数目
    kCheck = 1
    #当聚类数少于指定聚类数时,迭代分裂
    while kCheck < k:
        #当前所有聚类分裂后得到的最小误差
        bestErr = np.inf
        #作为inDat的引用,保存分类后的数据归属及相应误差,最后更新inDat
        bestClu = i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值