Kmeans

# -*- coding: utf-8 -*-
"""
Created on Wed Apr 24 14:55:33 2019

简介:    kmeans实现

@author: 杨昊
@email:  [email protected]
"""

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)