python kmeans聚类简单介绍和实现代码


Posted in Python onFebruary 23, 2018

一、k均值聚类的简单介绍

假设样本分为c类,每个类均存在一个中心点,通过随机生成c个中心点进行迭代,计算每个样本点到类中心的距离(可以自定义、常用的是欧式距离)  

将该样本点归入到最短距离所在的类,重新计算聚类中心,进行下次的重新划分样本,最终类中心不改变时,聚类完成   

二、伪代码  

三、python代码实现  

#!/usr/bin/env python 
# coding=utf-8 
 
import numpy as np 
import random 
import matplotlib.pyplot as plt 
 
#data:numpy.array dataset 
#k the number of cluster 
def k_means(data,k): 
   
  #random generate cluster_center 
  sample_num=data.shape[0] 
  center_index=random.sample(range(sample_num),k) 
  cluster_cen=data[center_index,:] 
 
  is_change=1 
  cat=np.zeros(sample_num) 
   
 
  while is_change: 
    is_change=0 
 
    for i in range(sample_num): 
      min_distance=100000 
      min_index=0 
 
      for j in range(k): 
        sub_data=data[i,:]-cluster_cen[j,:] 
        distance=np.inner(sub_data,sub_data) 
        if distance<min_distance: 
          min_distance=distance 
          min_index=j+1 
 
      if cat[i]!=min_index: 
        is_change=1 
        cat[i]=min_index 
    for j in range(k): 
      cluster_cen[j]=np.mean(data[cat==(j+1)],axis=0) 
 
  return cat,cluster_cen 
 
 
if __name__=='__main__': 
 
  #generate data 
  cov=[[1,0],[0,1]] 
  mean1=[1,-1] 
  x1=np.random.multivariate_normal(mean1,cov,200) 
 
  mean2=[5.5,-4.5] 
  x2=np.random.multivariate_normal(mean2,cov,200) 
 
  mean3=[1,4] 
  x3=np.random.multivariate_normal(mean3,cov,200) 
 
  mean4=[6,4.5] 
  x4=np.random.multivariate_normal(mean4,cov,200) 
 
  mean5=[9,0.0] 
  x5=np.random.multivariate_normal(mean5,cov,200) 
   
  X=np.vstack((x1,x2,x3,x4,x5)) 
   
  #data distribution 
  fig1=plt.figure(1) 
  p1=plt.scatter(x1[:,0],x1[:,1],marker='o',color='r',label='x1') 
  p2=plt.scatter(x2[:,0],x2[:,1],marker='+',color='m',label='x2') 
  p3=plt.scatter(x3[:,0],x3[:,1],marker='x',color='b',label='x3') 
  p4=plt.scatter(x4[:,0],x4[:,1],marker='*',color='g',label='x4') 
  p5=plt.scatter(x5[:,0],x4[:,1],marker='+',color='y',label='x5') 
  plt.title('original data') 
  plt.legend(loc='upper right') 
   
  cat,cluster_cen=k_means(X,5)    
 
  print 'the number of cluster 1:',sum(cat==1) 
  print 'the number of cluster 2:',sum(cat==2) 
  print 'the number of cluster 3:',sum(cat==3) 
  print 'the number of cluster 4:',sum(cat==4) 
  print 'the number of cluster 5:',sum(cat==5) 
 
   
  fig2=plt.figure(2) 
  for i,m,lo,label in zip(range(5),['o','+','x','*','+'],['r','m','b','g','y'],['x1','x2','x3','x4','x5']): 
 
    p=plt.scatter(X[cat==(i+1),0],X[cat==(i+1),1],marker=m,color=lo,label=label) 
  plt.legend(loc='upper right') 
  plt.title('the clustering result') 
  plt.show()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python translator使用实例
Sep 06 Python
Python中的闭包实例详解
Aug 29 Python
Python3实现从指定路径查找文件的方法
May 22 Python
Django实现自定义404,500页面教程
Mar 26 Python
Python实现获取磁盘剩余空间的2种方法
Jun 07 Python
教你使用python实现微信每天给女朋友说晚安
Mar 23 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
python如何使用socketserver模块实现并发聊天
Dec 14 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
python 生成任意形状的凸包图代码
Apr 16 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 Python
python MysqlDb模块安装及其使用详解
Feb 23 #Python
Python实现k-means算法
Feb 23 #Python
python语言中with as的用法使用详解
Feb 23 #Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 #Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 #Python
python3调用R的示例代码
Feb 23 #Python
python中kmeans聚类实现代码
Feb 23 #Python
You might like
牡丹941资料
2021/03/01 无线电
php Smarty初体验二 获取配置信息
2011/08/08 PHP
PHP的加密方式及原理
2012/06/14 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
php中JSON的使用方法
2015/04/30 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
Javascript算符的优先级介绍
2013/03/20 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
JS实现的简单图片切换功能示例【测试可用】
2017/02/14 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
js实现微信聊天效果
2020/08/09 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
用Python生成器实现微线程编程的教程
2015/04/13 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
Django中处理出错页面的方法
2015/07/15 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
Python爬取网页信息的示例
2020/09/24 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
迪拜航空官方网站:flydubai
2017/04/20 全球购物
安全隐患整改报告
2014/11/06 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
2016春节家属慰问信
2015/03/25 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python