美文网首页
算法笔记(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