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中的一些类型转换函数小结
Feb 10 Python
Python脚本实现集群检测和管理功能
Mar 06 Python
Python实现模拟时钟代码推荐
Nov 08 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
Dec 09 Python
Python机器学习之SVM支持向量机
Dec 27 Python
pandas 两列时间相减换算为秒的方法
Apr 20 Python
对python添加模块路径的三种方法总结
Oct 16 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
Python django搭建layui提交表单,表格,图标的实例
Nov 18 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
Mar 10 Python
用Python 爬取猫眼电影数据分析《无名之辈》
Jul 24 Python
python3 sqlite3限制条件查询的操作
Apr 07 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中对缓冲区的控制实现代码
2013/09/29 PHP
php提取微信账单的有效信息
2018/10/01 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
node.js require() 源码解读
2015/12/13 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
Python操作json数据的一个简单例子
2014/04/17 Python
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
python遍历类中所有成员的方法
2015/03/18 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
adidas美国官网:adidas US
2016/09/21 全球购物
德国大型的家具商店:Pharao24.de
2016/10/02 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
大专生自我鉴定范文
2013/10/01 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
继承权公证书范本
2015/01/23 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
学校德育工作总结2015
2015/05/11 职场文书
Nginx 502 Bad Gateway错误原因及解决方案
2021/03/31 Servers
Vue监视数据的原理详解
2022/02/24 Vue.js