zoukankan      html  css  js  c++  java
  • 二分K-均值算法

    伪代码:

    将所有点看成一个簇
    当簇数目小于k时
    对于每一个簇
            计算总误差
             在给定的簇上面进行k-均值聚类(k=2)
             计算将该簇一分为二之后的总误差
    选择使得误差最小的那个簇进行划分操作
    def biKmeans(dataSet,k):
        m=np.shape(dataSet)[0]
        clusterAssment=np.mat(np.zeros((m,2)))
        centroid0=np.mean(dataSet,axis=0).tolist()
        centList=[centroid0]
        for j in range(m):
            clusterAssment[j,1]=distEclud(centroid0, dataSet[j,:])**2
        while (len(centList) < k):
            lowsetSSE=np.inf
            for i in range(len(centList)):
                ptsInCurrCluster=dataSet[np.nonzero(clusterAssment[:,0].A==i)[0],:]
                centroidMat,splitClusterAss=kMeans(ptsInCurrCluster, 2)
                sseSplit=np.sum(splitClusterAss[:,1])
                sseNotSplit=np.sum(clusterAssment[np.nonzero(clusterAssment[:,0].A!=i)[0],1])
                if sseSplit+sseNotSplit<lowsetSSE:
                    bestCentToSplit=i
                    bestNewCents=centroidMat
                    bestClustAss=splitClusterAss.copy()
                    lowsetSSE=sseSplit+sseNotSplit
                bestClustAss[np.nonzero(bestClustAss[:,0].A==1)[0],0]=len(centList)
                bestClustAss[np.nonzero(bestClustAss[:,0].A==0)[0],0]=bestCentToSplit
                centList[bestCentToSplit]=bestNewCents[0,:].A[0]
                centList.append(bestNewCents[1,:].A[0])
                clusterAssment[np.nonzero(clusterAssment[:,0].A== bestCentToSplit)[0],:]=bestClustAss
        centList=[i.tolist() for i in centList]
        return np.mat(centList),clusterAssment
    figure_1
  • 相关阅读:
    搭建consul cluster(三节点)
    php设计模式之:装饰者模式
    php设计模式之:中介者模式
    PECL 和 PEAR
    firefox汉化(利用中文插件)
    数据结构之最小树生成(用php描述)
    php设计模式之:观察者模式
    Ubuntu安装Microsoft Windows Fonts微软字体库
    mysql事物处理
    php数字转中文
  • 原文地址:https://www.cnblogs.com/sklww/p/3739191.html
Copyright © 2011-2022 走看看