• k-means伪代码


    1、初始化k个簇中心。

    2、更新所有样本点簇归属:样本点到哪个簇中心点最近就属于哪个簇。

    3、重新计算每个簇的中心点(直到簇中心点不再变化或达到更新最大次数)

    #k-means伪代码
    import numpy as np
    import copy
    #计算欧氏距离
    def get_distance(X,Y):
        return np.sum((X-Y)**2)**0.5
    def calc_mean(X): #计算中心点,每一维取均值
        l=len(X[0])
        list_mean=[]
        for i in range(l):
            s=0
            for j in X:
                s+=j[i]
            m=s/len(X)
            list_mean.append(m)
        return list_mean
     
    def k_means(x_train,k,max_iter):
        num_iter = 0
        #初始簇中心
        cluster_center = x_train[:k]
        pre_cluster_center = copy.deep_copy(cluster_center) #上一次的簇中心点
        #开始迭代
        while num_iter<max_iter:
            #临时变量
            clusters_data={} #字典{簇下标:坐标}
            for i in x_train:
                cluster_dists=[]
                for index,cluster in enumerate(cluster_center):
                    distance=get_distance(i,cluster)
                    cluster_dists.append((index,distance)) #每个样本到中心点的距离
                
                cluster_dists.sort(key=lambda x:x[1]) #升序
                min_index,min_dist=cluster_dists[0] #取距离最近
                
                if min_index not in clusters_data:
                    clusters_data[min_index]=[]
                clusters_data[min_index].append(i) #数据添加到临时变量中
                
            #更新簇中心点
            for index in clusters_data:
                cluster_center[index]=calc_mean(clusters_data[index])
            if pre_cluster_center == cluster_center:
                break   #如果簇中心点不再变化,那么结束
            else:
                pre_cluster_center = copy.deep_copy(cluster_center) #拷贝一下
        return cluster_center #返回最终的簇中心点
  • 相关阅读:
    转载【工具】目前几种常见的线上接口文档管理平台的比较
    最好的Julia语言
    称霸Kaggle的十大深度学习技巧
    AI以假乱真怎么办?TequilaGAN教你轻松辨真伪
    2018 CISCN reverse
    2018 CISCN Writeup
    加壳&脱壳
    脱upx壳--初试--单步追踪
    Linux
    hackme.inndy.tw
  • 原文地址:https://www.cnblogs.com/wqbin/p/11031167.html
Copyright © 2020-2023  润新知