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标准日志模块logging的使用方法
Nov 01 Python
Python 的 with 语句详解
Jun 13 Python
跟老齐学Python之玩转字符串(3)
Sep 14 Python
Python编程中的异常处理教程
Aug 21 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
如何在python中使用selenium的示例
Dec 26 Python
python hbase读取数据发送kafka的方法
Dec 27 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
python-视频分帧&amp;多帧合成视频实例
Dec 10 Python
Python批量启动多线程代码实例
Feb 18 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 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
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
javascript 写类方式之九
2009/07/05 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
vue项目中使用bpmn为节点添加颜色的方法
2020/04/30 Javascript
通过实例解析vuejs如何实现调试代码
2020/07/16 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
详解python的变量缓存机制
2021/01/24 Python
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
NET程序员上机面试题
2015/05/23 面试题
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
《母鸡》教学反思
2014/02/25 职场文书
会计毕业生自荐书
2014/06/12 职场文书
色戒观后感
2015/06/12 职场文书
听证会主持词
2015/07/03 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis