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的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
详解Python的Lambda函数与排序
Oct 25 Python
使用Python写一个贪吃蛇游戏实例代码
Aug 21 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
Jun 21 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
pymysql模块的使用(增删改查)详解
Sep 09 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
tensorflow转换ckpt为savermodel模型的实现
May 25 Python
解决python图像处理图像赋值后变为白色的问题
Jun 04 Python
python使用scapy模块实现ARP扫描的过程
Jan 21 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
PHP生成带有雪花背景的验证码
2006/10/09 PHP
php 文件上传代码(限制jpg文件)
2010/01/05 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
网页自动跳转代码收集
2009/09/27 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
js 蒙版进度条(结合图片)
2010/03/10 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
Python反射的用法实例分析
2018/02/11 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
旅游管理实习自我鉴定
2013/09/29 职场文书
会计出纳员的自我评价
2014/01/15 职场文书
食品销售计划书
2014/04/26 职场文书
施工安全汇报材料
2014/08/17 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
员工自我工作评价
2015/03/06 职场文书
千与千寻观后感
2015/06/04 职场文书
运动会开幕式主持词
2015/07/01 职场文书
九年级语文教学反思
2016/03/03 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
Go语言基础map用法及示例详解
2021/11/17 Golang
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB