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实现跨文件全局变量的方法
Jul 07 Python
python基于右递归解决八皇后问题的方法
May 25 Python
python简单获取本机计算机名和IP地址的方法
Jun 03 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
python内置函数:lambda、map、filter简单介绍
Nov 16 Python
python爬虫框架scrapy实现模拟登录操作示例
Aug 02 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 Python
pytorch 预训练层的使用方法
Aug 20 Python
使用Python发现隐藏的wifi
Mar 04 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
简单的PHP留言本实例代码
2010/05/09 PHP
php实现的ping端口函数实例
2014/11/12 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
提高网站信任度的技巧
2008/10/17 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
vue实现购物车小案例
2019/09/27 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
Python绘制七段数码管实例代码
2017/12/20 Python
pytorch 数据集图片显示方法
2018/07/26 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
python游戏开发的五个案例分享
2020/03/09 Python
python os模块在系统管理中的应用
2020/06/22 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
九州传奇上机题
2014/07/10 面试题
护士上岗前培训自我鉴定
2014/04/20 职场文书
校园广播稿精选
2014/10/01 职场文书
实习协议书
2015/01/27 职场文书
学籍证明模板
2015/06/18 职场文书
2016年校园社会综合治理宣传月活动总结
2016/03/16 职场文书