美文网首页
算法笔记(4)-K-Means聚类算法及python代码实现

算法笔记(4)-K-Means聚类算法及python代码实现

作者: 编程研究坊 | 来源:发表于2022-05-10 22:35 被阅读0次

    K-Means算法也被称为K-平均或K-均值算法,是一种广泛使用的聚类算法。K-Means算法是基于相似性的无监督的算法,通过比较样本之间的相似性,将较为相似的样本划分到同一类别中。


    K-Means算法聚类图

    K-Means算法步骤:


    (1)初始化常数K,随机初始化K个聚类中心;
    (2)重复计算以下过程,直到聚类中心不再改变;
            a.计算每个样本与每个聚类中心之间的相似度,将样本划分到最相似的类别
              中;
            b.计算划分到每个类别中的所有样本特征的均值,并将该均值作为每个类新的
               聚类中心。
    (3)输出最终的聚类中心以及每个样本所属的类别。


    K-Means算法python代码实现

    def kmeans(data, k, centroids):
        '''根据KMeans算法求解聚类中心
        input:  data(mat):训练数据
                k(int):类别个数
                centroids(mat):随机初始化的聚类中心
        output: centroids(mat):训练完成的聚类中心
                subCenter(mat):每一个样本所属的类别
        '''
        m, n = np.shape(data) # m:样本的个数,n:特征的维度
        subCenter = np.mat(np.zeros((m, 2)))  # 初始化每一个样本所属的类别
        change = True  # 判断是否需要重新计算聚类中心
        while change == True:
            change = False  # 重置
            for i in range(m):
                minDist = np.inf  # 设置样本与聚类中心之间的最小的距离,初始值为正无穷
                minIndex = 0  # 所属的类别
                for j in range(k):
                    # 计算i和每个聚类中心之间的距离
                    dist = distance(data[i, ], centroids[j, ])
                    if dist < minDist:
                        minDist = dist
                        minIndex = j
                # 判断是否需要改变
                if subCenter[i, 0] != minIndex:  # 需要改变
                    change = True
                    subCenter[i, ] = np.mat([minIndex, minDist])
            # 重新计算聚类中心
            for j in range(k):
                sum_all = np.mat(np.zeros((1, n)))
                r = 0  # 每个类别中的样本的个数
                for i in range(m):
                    if subCenter[i, 0] == j:  # 计算第j个类别
                        sum_all += data[i, ]
                        r += 1
                for z in range(n):
                    try:
                        centroids[j, z] = sum_all[0, z] / r
                    except:
                        print(" r is zero")
        return subCenter
    

    在机器学习算法中使用的距离函数主要有:


    距离函数

    闵可夫斯基距离


    闵可夫斯基距离

    曼哈顿距离


    曼哈顿距离

    欧式距离


    欧式距离

    每天专注分享大数据和人工智能技术,欢迎大家关注!

    相关文章

      网友评论

          本文标题:算法笔记(4)-K-Means聚类算法及python代码实现

          本文链接:https://www.haomeiwen.com/subject/rjhrurtx.html