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实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
python中遍历文件的3个方法
Sep 02 Python
Python MySQLdb模块连接操作mysql数据库实例
Apr 08 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
python跳出双层for循环的解决方法
Jun 24 Python
详解Django 时间与时区设置问题
Jul 23 Python
Python使用正则实现计算字符串算式
Dec 29 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
python str字符串转uuid实例
Mar 03 Python
python实现经纬度采样的示例代码
Dec 10 Python
Python爬虫基础之爬虫的分类知识总结
May 13 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中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
删除数组元素实用的PHP数组函数
2008/08/18 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
JQuery Ajax 跨域访问的解决方案
2010/03/12 Javascript
Javascript 面向对象之重载
2010/05/04 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
Javascript动画的实现原理浅析
2015/03/02 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
2020/08/14 Javascript
Python程序设计入门(1)基本语法简介
2014/06/13 Python
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
浅谈Python 对象内存占用
2016/07/15 Python
python直接访问私有属性的简单方法
2016/07/25 Python
Python随机生成手机号、数字的方法详解
2017/07/21 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
ROSEFIELD手表荷兰官方网上商店:北欧极简设计女士腕表品牌
2018/01/24 全球购物
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
历史系自荐信范文
2013/12/24 职场文书
中学音乐课教学反思
2016/02/18 职场文书
基于PyQt5制作一个群发邮件工具
2022/04/08 Python
js判断两个数组相等的5种方法
2022/05/06 Javascript