KMeans实现
import numpy as np
from collections import defaultdict
class KMeans(object):
def __init__(self, k=5, error=0.001, max_iters=1000) -> None:
self.k_ = k
self.error_ = error
self.max_iters_ = max_iters
def fit(self, data):
self.centers_ = {}
for i in range(self.k_):
self.centers_[i] = data[i]
for i in range(self.max_iters_):
res = defaultdict(list)
for feature in data:
distance = []
for center in self.centers_:
dis = np.sqrt(np.sum(feature-self.centers_[center])**2)
distance.append(dis)
cur_class = distance.index(min(distance))
res[cur_class].append(feature)
pre_centers = self.centers_.copy()
for i in res:
self.centers_[i] = np.average(res[i], axis=0)
flag = True
for center in pre_centers:
pre_center = pre_centers[center]
now_center = self.centers_[center]
if np.sum((now_center-pre_center)/pre_center * 100.0) > self.error_:
flag = False
if flag:
break
def predict(self, x):
distance = [np.sqrt(np.sum(x - self.centers_[center])**2) for center in self.centers_]
return distance.index(min(distance))
参考:https://blog.csdn.net/xc_zhou/article/details/88247783