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使用fileinput模块实现逐行读取文件的方法
Apr 29 Python
分析并输出Python代码依赖的库的实现代码
Aug 09 Python
详解Python装饰器由浅入深
Dec 09 Python
Python变量和字符串详解
Apr 29 Python
Python使用pymysql小技巧
Jun 04 Python
Django自定义manage命令实例代码
Feb 11 Python
jupyter notebook 中输出pyecharts图实例
Apr 23 Python
django使用django-apscheduler 实现定时任务的例子
Jul 20 Python
Python 多线程,threading模块,创建子线程的两种方式示例
Sep 29 Python
python文件和文件夹复制函数
Feb 07 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
python Tkinter的简单入门教程
Apr 11 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
一个改进的UBB类
2006/10/09 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
php中stdClass的用法分析
2015/02/27 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
event.srcElement+表格应用
2006/08/29 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
日本卡普空电视游戏软件公司官方购物网站:e-CAPCOM
2018/07/17 全球购物
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
什么是数据抽象
2016/11/26 面试题
电子商务毕业生求职信
2013/11/10 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
《影子》教学反思
2014/02/21 职场文书
八一建军节感言
2014/02/28 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
运动会通讯稿100字
2015/07/20 职场文书
MySQL创建管理RANGE分区
2022/04/13 MySQL