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入门篇之数字
Oct 20 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
利用Python2下载单张图片与爬取网页图片实例代码
Dec 25 Python
python3之模块psutil系统性能信息使用
May 30 Python
python使用多进程的实例详解
Sep 19 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
pytorch 输出中间层特征的实例
Aug 17 Python
Python对接支付宝支付自实现功能
Oct 10 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 24 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
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
JS之小练习代码
2008/10/12 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
关于angular js_$watch监控属性和对象详解
2017/04/24 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
Angular6 写一个简单的Select组件示例
2018/08/20 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
深入理解Python中的super()方法
2017/11/20 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
python用post访问restful服务接口的方法
2018/12/07 Python
详解Python3中ceil()函数用法
2019/02/19 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
商务日语毕业生自荐信范文
2013/11/14 职场文书
求职自荐信范文格式
2013/11/29 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
新书发布会策划方案
2014/06/09 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
学习党章心得体会2016
2016/01/15 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python