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保存MongoDB上的文件到本地的方法
Mar 16 Python
python爬虫获取多页天涯帖子
Feb 23 Python
解决python 输出是省略号的问题
Apr 19 Python
Python多继承顺序实例分析
May 26 Python
python实现自动解数独小程序
Jan 21 Python
python实现词法分析器
Jan 31 Python
Python基础之条件控制操作示例【if语句】
Mar 23 Python
Python的条件锁与事件共享详解
Sep 12 Python
解决pycharm不能自动补全第三方库的函数和属性问题
Mar 12 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
Feb 22 Python
python开发人人对战的五子棋小游戏
May 02 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
PHP网站提速三大“软”招
2006/10/09 PHP
smarty实例教程
2006/11/19 PHP
php上传文件中文文件名乱码的解决方法
2013/11/01 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
教你用十行node.js代码读取docx的文本
2017/03/08 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
Angular中的interceptors拦截器
2017/06/25 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
Python中设置变量访问权限的方法
2015/04/27 Python
python写一个md5解密器示例
2018/02/23 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
淘宝网店营销策划书
2014/01/11 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
yy婚礼主持词
2014/03/14 职场文书
《谁的本领大》教后反思
2014/04/25 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
年会主持人开场白台词
2015/05/29 职场文书
公司的力量观后感
2015/06/05 职场文书
员工离职证明范本
2015/06/12 职场文书