# -*- 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))
网友评论