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 相关文章推荐
基于scrapy实现的简单蜘蛛采集程序
Apr 17 Python
Python实现的Excel文件读写类
Jul 30 Python
Python对文件操作知识汇总
May 15 Python
Python存取XML的常见方法实例分析
Mar 21 Python
使用C++扩展Python的功能详解
Jan 12 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
python匿名函数的使用方法解析
Oct 10 Python
python实现名片管理器的示例代码
Dec 17 Python
Python实现打包成库供别的模块调用
Jul 13 Python
学会Python数据可视化必须尝试这7个库
Jun 16 Python
Python使用OpenCV实现虚拟缩放效果
Feb 28 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 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将文本文件转换csv输出的方法
2014/12/31 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
安装docker和docker-compose实例详解
2019/07/30 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
js 三级关联菜单效果实例
2013/08/13 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
Python图像灰度变换及图像数组操作
2016/01/27 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
Python标准库shutil用法实例详解
2018/08/13 Python
python实现大转盘抽奖效果
2019/01/22 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
Python tkinter实现日期选择器
2021/02/22 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
12月红领巾广播稿
2014/02/13 职场文书
《日月潭》教学反思
2014/02/28 职场文书
纠风工作实施方案
2014/03/15 职场文书
大学生入党自荐书
2015/03/05 职场文书
opencv 分类白天与夜景视频的方法
2021/06/05 Python
php修改word的实例方法
2021/11/17 PHP
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL