Kmeans

作者: 路人乙yh | 来源:发表于2019-04-24 16:00 被阅读1次
    # -*- coding: utf-8 -*-
    """
    Created on Wed Apr 24 14:55:33 2019
    
    简介:    kmeans实现
    
    @author: 杨昊
    @email:  yh4241@foxmail.com
    """
    
    import numpy as np
    import random
    
    
    def dist(x1, x2, p=2):
        return np.sum(np.power((x1 - x2), p))
    
    def kmeans(X, k, n_iters=10):
        label = np.array([None]*X.shape[0])
        
        # 初始化簇中心点
        centers = np.zeros((k, X.shape[1]))
        centroids = random.sample(range(0,X.shape[0]), k)
        for t in range(k):
            centers[t,:] = X[centroids[t],:]
        
        n = 0
        while n < n_iters:
            for i in range(X.shape[0]):
                distances = [dist(X[i, :], centers[j,:]) for j in range(k)]
                min_index = np.argmin(distances)
                label[i] = min_index
            
            for t in range(k):     
                centers[t,:] = np.mean(X[label==t], axis=0)
            n += 1
        
        return centers
    
    if __name__ == '__main__':
        X = np.random.random(size=(100,4))
        print(kmeans(X,3))
    

    相关文章

      网友评论

        本文标题:Kmeans

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