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 encode和decode的妙用
Sep 02 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
python实现批量图片格式转换
Jun 16 Python
对Python 数组的切片操作详解
Jul 02 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
python多线程同步实例教程
Aug 11 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
Python绘制词云图之可视化神器pyecharts的方法
Feb 23 Python
python 常用的异步框架汇总整理
Jun 18 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中显示格式化的用户输入
2006/10/09 PHP
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
域名查询代码公布
2006/10/09 PHP
常用的PHP数据库操作方法(MYSQL版)
2011/06/08 PHP
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
Ext 今日学习总结
2010/09/19 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
python微信公众号之关键词自动回复
2018/06/15 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
详解Python做一个名片管理系统
2019/03/14 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
Django 再谈一谈json序列化
2020/03/16 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
学生会离职感言
2014/02/11 职场文书
挖掘机司机岗位职责
2014/02/12 职场文书
总经理任命书
2014/03/29 职场文书
大学同学会活动方案
2014/08/20 职场文书
2015年党员个人自我评价
2015/03/03 职场文书
民事纠纷协议书
2016/03/23 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python