k-means 聚类算法与Python实现代码


Posted in Python onJune 01, 2020

k-means 聚类算法思想先随机选择k个聚类中心,把集合里的元素与最近的聚类中心聚为一类,得到一次聚类,再把每一个类的均值作为新的聚类中心重新聚类,迭代n次得到最终结果分步解析

一、初始化聚类中心

首先随机选择集合里的一个元素作为第一个聚类中心放入容器,选择距离第一个聚类中心最远的一个元素作为第二个聚类中心放入容器,第三、四、、、N个同理,为了优化可以选择距离开方做为评判标准

二、迭代聚类

依次把集合里的元素与距离最近的聚类中心分为一类,放到对应该聚类中心的新的容器,一次聚类完成后求出新容器里个类的均值,对该类对应的聚类中心进行更新,再次进行聚类操作,迭代n次得到理想的结果

三、可视化展示

利用 python 第三方库中的可视化工具 matplotlib.pyplot 对聚类后的元素显示(散点图),方便查看结果

python代码实现

import numpy as np
import matplotlib.pyplot as plt

# 两点距离
def distance(e1, e2):
  return np.sqrt((e1[0]-e2[0])**2+(e1[1]-e2[1])**2)

# 集合中心
def means(arr):
  return np.array([np.mean([e[0] for e in arr]), np.mean([e[1] for e in arr])])

# arr中距离a最远的元素,用于初始化聚类中心
def farthest(k_arr, arr):
  f = [0, 0]
  max_d = 0
  for e in arr:
    d = 0
    for i in range(k_arr.__len__()):
      d = d + np.sqrt(distance(k_arr[i], e))
    if d > max_d:
      max_d = d
      f = e
  return f

# arr中距离a最近的元素,用于聚类
def closest(a, arr):
  c = arr[1]
  min_d = distance(a, arr[1])
  arr = arr[1:]
  for e in arr:
    d = distance(a, e)
    if d < min_d:
      min_d = d
      c = e
  return c


if __name__=="__main__":
  ## 生成二维随机坐标(如果有数据集就更好)
  arr = np.random.randint(100, size=(100, 1, 2))[:, 0, :]

  ## 初始化聚类中心和聚类容器
  m = 5
  r = np.random.randint(arr.__len__() - 1)
  k_arr = np.array([arr[r]])
  cla_arr = [[]]
  for i in range(m-1):
    k = farthest(k_arr, arr)
    k_arr = np.concatenate([k_arr, np.array([k])])
    cla_arr.append([])

  ## 迭代聚类
  n = 20
  cla_temp = cla_arr
  for i in range(n):  # 迭代n次
    for e in arr:  # 把集合里每一个元素聚到最近的类
      ki = 0    # 假定距离第一个中心最近
      min_d = distance(e, k_arr[ki])
      for j in range(1, k_arr.__len__()):
        if distance(e, k_arr[j]) < min_d:  # 找到更近的聚类中心
          min_d = distance(e, k_arr[j])
          ki = j
      cla_temp[ki].append(e)
    # 迭代更新聚类中心
    for k in range(k_arr.__len__()):
      if n - 1 == i:
        break
      k_arr[k] = means(cla_temp[k])
      cla_temp[k] = []

  ## 可视化展示
  col = ['HotPink', 'Aqua', 'Chartreuse', 'yellow', 'LightSalmon']
  for i in range(m):
    plt.scatter(k_arr[i][0], k_arr[i][1], linewidth=10, color=col[i])
    plt.scatter([e[0] for e in cla_temp[i]], [e[1] for e in cla_temp[i]], color=col[i])
  plt.show()

结果展示

k-means 聚类算法与Python实现代码

总结

到此这篇关于k-means 聚类算法与Python实现代码的文章就介绍到这了,更多相关k-means 聚类算法python内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现微信公众平台自定义菜单实例
Mar 20 Python
Python去除字符串两端空格的方法
May 21 Python
python hook监听事件详解
Oct 25 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
python解析json串与正则匹配对比方法
Dec 20 Python
python抓取网页内容并进行语音播报的方法
Dec 24 Python
pthon贪吃蛇游戏详细代码
Jan 27 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
pytorch AvgPool2d函数使用详解
Jan 03 Python
pytorch-RNN进行回归曲线预测方式
Jan 14 Python
TensorFlow实现checkpoint文件转换为pb文件
Feb 10 Python
python实现人性化显示金额数字实例详解
Sep 25 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 #Python
python如何写出表白程序
Jun 01 #Python
python中os包的用法
Jun 01 #Python
python保留格式汇总各部门excel内容的实现思路
Jun 01 #Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 #Python
浅谈pycharm导入pandas包遇到的问题及解决
Jun 01 #Python
python实现密码验证合格程序的思路详解
Jun 01 #Python
You might like
?算你??的 PHP 程式大小
2006/12/06 PHP
php 解析xml 的四种方法详细介绍
2016/10/26 PHP
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
javascript 随机展示头像实现代码
2011/12/06 Javascript
javascript与jquery中跳出循环的区别总结
2013/11/04 Javascript
从数组中随机取x条不重复数据的JS代码
2013/12/24 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
[01:01:43]EG vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
python3中函数参数的四种简单用法
2018/07/09 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
Foreo国际站:Foreo International
2018/10/29 全球购物
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
欧克利英国官网:Oakley英国
2019/08/24 全球购物
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
绿色环保演讲稿
2014/05/10 职场文书
党员教师一句话承诺
2014/05/30 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
黄山导游词
2015/01/31 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
浅谈Python数学建模之整数规划
2021/06/23 Python
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android