python - 周志华《机器学习》第九章 K均值算法问题
伊谢尔伦
伊谢尔伦 2017-04-18 10:01:02
[Python讨论组]
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
阿神

我用python也测试过,也是一轮就聚类完成,也有可能是因为数据集给得不全,数据集就几十条所以只有一轮
(更新):
这可以和算法中随机选择质心的算法有关,因为不同的质心对最终迭代次数有影响,就像题主说的达到局部最优解
下面是可以循环三次

循环六次的:

算法核心部分:

def k_means(data_set, k, distE=distEclud, createCent=rand_cent):
    """
    data_set: 数据集
    data_set = [[1.658985, 4.285136], [-3.453687, 3.424321],
            [4.838138, -1.151539],[-5.379713, -3.362104],
            [0.972564, 2.924086]]
    k: 设置聚类簇数K值
    distE:函数, 计算数据点的欧式距离
    例如:vector1 = [[ 1.658985  4.285136]]
      vector2 = [[-3.453687  3.424321]]
    欧氏距离:distance = distE(vector1, vector2)
    createCent: 函数, 返回一个随机的质点矩阵
    """
    m = shape(data_set)[0]  # 获取行数
    clusterAssment = mat(zeros((m, 2)))  # 初始化一个矩阵, 用来记录簇索引和存储误差平方和(指当前点到簇质点的距离)
    centroids = rand_cent(data_set, k)  # 随机生成一个质心矩阵蔟
    clusterChanged = True
    print('开始')
    while clusterChanged:
        clusterChanged = False
        for i in range(m):  # 对每个数据点寻找最近的质心
            min_dist = inf  # 设置最小距离为正无穷大
            min_index = -1
            for j in range(k):  # 遍历质心簇,寻找最近质心
                dist_J = distEclud(centroids[j, :], data_set[i, :])
                if dist_J < min_dist:
                    min_dist = dist_J
                    min_index = j
            if clusterAssment[i, 0] != min_index:
                clusterChanged = True
            clusterAssment[i, :] = min_index, min_dist ** 2    # 平方的意义在于判断聚类结果的好坏
        print(centroids)
        print('==================')
        for cent in range(k):  # 更新质心,将每个簇中的点的均值作为质心
            index_all = clusterAssment[:, 0].A  # 取出样本所属簇的索引值
            value = nonzero(index_all == cent)  # 取出所有属于第cent个簇的索引值
            sampleInClust = data_set[value[0]]  # 取出属于第I个簇的所有样本点
            centroids[cent, :] = mean(sampleInClust, axis=0)
    return centroids, clusterAssment
黄舟

因为初始点的选择是随机的,当然可能聚类过程不完全一样了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号