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统计字符串中指定字符出现次数的方法
Apr 04 Python
Python实现选择排序
Jun 04 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
May 22 Python
Windows下PyCharm安装图文教程
Aug 27 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
详解Python用户登录接口的方法
Apr 17 Python
Python中Numpy ndarray的使用详解
May 24 Python
python实现雪花飘落效果实例讲解
Jun 18 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
python通过移动端访问查看电脑界面
Jan 06 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
利用Python实现Json序列化库的方法步骤
Sep 09 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
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
php命令行模式代码实例详解
2021/02/26 PHP
[原创]用javascript实现检测指定目录是否存在的方法
2008/01/12 Javascript
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
基于jquery循环map功能的代码
2011/02/26 Javascript
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
2011/03/25 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
react.js 获取真实的DOM节点实例(必看)
2017/04/17 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
python判断windows隐藏文件的方法
2014/03/21 Python
web.py获取上传文件名的正确方法
2014/08/26 Python
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
python+opencv实现摄像头调用的方法
2019/06/22 Python
python实现实时视频流播放代码实例
2020/01/11 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
护理中职生求职信范文
2014/02/24 职场文书
农民工工资支付承诺函
2014/03/31 职场文书
2014年班主任自我评价范文
2014/04/23 职场文书
基层党支部整改方案
2014/10/25 职场文书
人事文员岗位职责
2015/02/04 职场文书
送达通知书
2015/04/25 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
七年级语文教学反思
2016/03/03 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js
Android自定义双向滑动控件
2022/04/19 Java/Android