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实现的监测服务器硬盘使用率脚本分享
Nov 07 Python
Python代码调试的几种方法总结
Apr 15 Python
Python的GUI框架PySide的安装配置教程
Feb 16 Python
Python基于xlrd模块操作Excel的方法示例
Jun 21 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
Oct 21 Python
python版DDOS攻击脚本
Jun 12 Python
对python中GUI,Label和Button的实例详解
Jun 27 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
django自带的权限管理Permission用法说明
May 13 Python
python文件排序的方法总结
Sep 13 Python
基于python实现简单C/S模式代码实例
Sep 14 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
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
php实现插入排序
2015/03/29 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
PHP 实现缩略图
2021/03/09 PHP
javascript 对象的定义方法
2007/01/10 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
JS中表单的使用小结
2014/01/11 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
总结JavaScript三种数据存储方式之间的区别
2016/05/03 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
nodejs操作mysql实现增删改查的实例
2017/05/28 NodeJs
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
基于Python列表解析(列表推导式)
2018/06/23 Python
python实现WebSocket服务端过程解析
2019/10/18 Python
python把一个字符串切开的实例方法
2020/09/27 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
html5 worker 实例(二) 图片变换效果
2013/06/24 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
企划经理的岗位职责
2013/11/17 职场文书
领导干部考察材料
2014/02/08 职场文书
优质服务标语口号
2015/12/26 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL