栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python实现Kmeans

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python实现Kmeans

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)
      # 判断当前质心和前一个质心的距离是否超过error
      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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/958314.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号