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使用xmlrpclib模块实现对百度google的ping功能
Jun 02 Python
Python聚类算法之基本K均值实例详解
Nov 20 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
python机器学习之神经网络(三)
Dec 20 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
Python实现钉钉订阅消息功能
Jan 14 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
解决Jupyter因卸载重装导致的问题修复
Apr 10 Python
Python requests上传文件实现步骤
Sep 15 Python
浅谈Python numpy创建空数组的问题
May 25 Python
Python IO文件管理的具体使用
Mar 20 Python
python垃圾回收机制原理分析
Apr 13 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多例模式介绍
2013/06/24 PHP
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
php实现生成验证码实例分享
2016/04/10 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
GreyBox技术总结(转)
2010/11/23 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
Javascript Object 对象学习笔记
2014/12/17 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
Python闭包实现计数器的方法
2015/05/05 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
学校采购员岗位职责
2014/01/02 职场文书
自动化职业生涯规划书范文
2014/01/03 职场文书
大学生职业规划论文
2014/01/11 职场文书
关于安全的标语
2014/06/10 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python