• 学习六


    k-means算法的思想比较简单,假设我们要把数据分成K个类,大概可以分为以下几个步骤:

    随机选取k个点,作为聚类中心;
    计算每个点分别到k个聚类中心的聚类,然后将该点分到最近的聚类中心,这样就行成了k个簇;
    再重新计算每个簇的质心(均值);
    重复以上2~4步,直到质心的位置不再发生变化或者达到设定的迭代次数。

    # dataSet样本点,k 簇的个数
    # disMeas距离量度,默认为欧几里得距离
    # createCent,初始点的选取
    def kMeans(dataSet, k, distMeas=distEclud, createCent=randCent):
        m = shape(dataSet)[0] #样本数
        clusterAssment = mat(zeros((m,2))) #m*2的矩阵                   
        centroids = createCent(dataSet, k) #初始化k个中心
        clusterChanged = True             
        while clusterChanged:      #当聚类不再变化
            clusterChanged = False
            for i in range(m):
                minDist = inf; minIndex = -1
                for j in range(k): #找到最近的质心
                    distJI = distMeas(centroids[j,:],dataSet[i,:])
                    if distJI < minDist:
                        minDist = distJI; minIndex = j
                if clusterAssment[i,0] != minIndex: clusterChanged = True
                # 第1列为所属质心,第2列为距离
                clusterAssment[i,:] = minIndex,minDist**2
            print centroids
    
            # 更改质心位置
            for cent in range(k):
                ptsInClust = dataSet[nonzero(clusterAssment[:,0].A==cent)[0]]
                centroids[cent,:] = mean(ptsInClust, axis=0) 
        return centroids, clusterAssment
    

      

  • 相关阅读:
    后端——BA与图优化
    非线性优化
    后端卡尔曼滤波
    用HBuilderX把vue项目打包成apk
    vue中引入外部字体并使用
    使用iOS APP .mobileconfig套壳生成iosapp
    SCA组件识别
    赛事纪录 NOI 2022 统一省选
    Solution 「keyence2019_e 」Connecting Cities
    Open Cup 资源整理
  • 原文地址:https://www.cnblogs.com/zhang12345/p/13072994.html
Copyright © 2020-2023  润新知