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中何种情况下需要使用断言
Apr 01 Python
Python中SOAP项目的介绍及其在web开发中的应用
Apr 14 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
使用Python简单的实现树莓派的WEB控制
Feb 18 Python
浅谈python中的__init__、__new__和__call__方法
Jul 18 Python
Python中pillow知识点学习
Apr 30 Python
Python二次规划和线性规划使用实例
Dec 09 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
Apr 26 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
Python extract及contains方法代码实例
Sep 11 Python
python 操作excel表格的方法
Dec 05 Python
Python Django框架介绍之模板标签及模板的继承
May 27 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
使用php测试硬盘写入速度示例
2014/01/27 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
Vue 组件间的样式冲突污染
2017/08/31 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
Python 变量类型及命名规则介绍
2013/06/08 Python
Python中subprocess模块用法实例详解
2015/05/20 Python
在Python的列表中利用remove()方法删除元素的教程
2015/05/21 Python
python中字符串类型json操作的注意事项
2017/05/02 Python
python 删除非空文件夹的实例
2018/04/26 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
python cookie反爬处理的实现
2020/11/01 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
顺丰快递Java软件工程师面试题
2015/07/31 面试题
幼师自荐信范文
2013/10/06 职场文书
工商管理自荐书
2014/07/06 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
早安问候语大全
2015/11/10 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书