Python KMeans聚类问题分析


Posted in Python onFebruary 23, 2018

今天用python实现了一下简单的聚类分析,顺便熟悉了numpy数组操作和绘图的一些技巧,在这里做个记录。

from pylab import *
from sklearn.cluster import KMeans

## 利用numpy.append()函数实现matlab多维数组合并的效果,axis 参数值为 0 时是 y 轴方向合并,参数值为 1 时是 x 轴方向合并,分别对应matlab [A ; B] 和 [A , B]的效果

#创建5个随机的数据集
x1=append(randn(500,1)+5,randn(500,1)+5,axis=1)
x2=append(randn(500,1)+5,randn(500,1)-5,axis=1)
x3=append(randn(500,1)-5,randn(500,1)+5,axis=1)
x4=append(randn(500,1)-5,randn(500,1)-5,axis=1)
x5=append(randn(500,1),randn(500,1),axis=1)

# 下面用较笨的方法把5个数据集合并成 (2500,2)大小的数组data
data=append(x1,x2,axis=0)
data=append(data,x3,axis=0)
data=append(data,x4,axis=0)
data=append(data,x5,axis=0)

plot(x1[:,0],x1[:,1],'oc',markersize=0.8)
plot(x2[:,0],x2[:,1],'og',markersize=0.8)
plot(x3[:,0],x3[:,1],'ob',markersize=0.8)
plot(x4[:,0],x4[:,1],'om',markersize=0.8)
plot(x5[:,0],x5[:,1],'oy',markersize=0.8)


k=KMeans(n_clusters=5,random_state=0).fit(data)
t=k.cluster_centers_ # 获取数据中心点

plot(t[:,0],t[:,1],'r*',markersize=16) # 显示这5个中心点,五角星标记~

title('KMeans Clustering')
box(False)

xticks([])  # 去掉坐标轴的标记
yticks([])

show()

结果如下:

Python KMeans聚类问题分析

2017/01/11更新

今天重新试运行程序的出现报错了,提示导入NUMPY_MKL失败,因为之前用命令pip install -U numpy手动更新了numpy,最初的是在http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy 里下载的numpy-1.11.2+mkl-cp27-cp27m-win_amd64.whl 文件安装的,只要重新安装回去就可以了

2017/1/18更新

python中还有一个叫plotly 的package,可以通过pip install plotly 或 pip3 install plotly(Python3.X) ,使用这个package可以绘制精美的图像,官网中有很多例子介绍,同时plotly 还支持matlab,R等,但是个人觉得plotly 的绘图语法相比matplotlib 的繁琐,需要照着例程来修改才比较方便,不过如果只是要想数据可视化更好看的话参考官网例程并做修改也无妨,下面是来自官网的一段示例代码:

import plotly.plotly as py
import plotly.graph_objs as go
import plotly
import numpy as np

#生成三组高斯分布(Gaussian Distribution)点集

x0 = np.random.normal(2, 0.45, 300)
y0 = np.random.normal(2, 0.45, 300)

x1 = np.random.normal(6, 0.8, 200)
y1 = np.random.normal(6, 0.8, 200)

x2 = np.random.normal(4, 0.3, 200)
y2 = np.random.normal(4, 0.3, 200)

#创建图形对象 graph object
trace0 = go.Scatter(
 x=x0,
 y=y0,
 mode='markers',
)
trace1 = go.Scatter(
 x=x1,
 y=y1,
 mode='markers'
)
trace2 = go.Scatter(
 x=x2,
 y=y2,
 mode='markers'
)
trace3 = go.Scatter(
 x=x1,
 y=y0,
 mode='markers'
)
#布局是一个字典,字典关键字keys包括:'shapes', 'showlegend'
layout = {
 'shapes': [
  {
   'type': 'circle',
   'xref': 'x',
   'yref': 'y',
   'x0': min(x0),
   'y0': min(y0),
   'x1': max(x0),
   'y1': max(y0),
   'opacity': 0.2,
   'fillcolor': 'blue',
   'line': {
    'color': 'blue',
   },
  },
  {
   'type': 'circle',
   'xref': 'x',
   'yref': 'y',
   'x0': min(x1),
   'y0': min(y1),
   'x1': max(x1),
   'y1': max(y1),
   'opacity': 0.2,
   'fillcolor': 'orange',
   'line': {
    'color': 'orange',
   },
  },
  {
   'type': 'circle',
   'xref': 'x',
   'yref': 'y',
   'x0': min(x2),
   'y0': min(y2),
   'x1': max(x2),
   'y1': max(y2),
   'opacity': 0.2,
   'fillcolor': 'green',
   'line': {
    'color': 'green',
   },
  },
  {
   'type': 'circle',
   'xref': 'x',
   'yref': 'y',
   'x0': min(x1),
   'y0': min(y0),
   'x1': max(x1),
   'y1': max(y0),
   'opacity': 0.2,
   'fillcolor': 'red',
   'line': {
    'color': 'red',
   },
  },
 ],
 'showlegend': False,
}
data = [trace0, trace1, trace2, trace3]
#图像包括数据部分和布局部分
fig = {
 'data': data,
 'layout': layout,
}
#使用离线的方式绘制图像,因为没有注册官方的网站,而且那个网站不容易进去,所以用离线绘制
plotly.offline.plot(fig, filename='clusters')

结果是通过浏览器打开图片的,可以保存到本地,如下图:

Python KMeans聚类问题分析

总结:plotly 这个库虽然语法比较繁琐,但是对数据显示要求较高的情况下可以充分利用,一般绘图的话使用matplotlib比较方便,特别是ipython模式下先执行from pylab import * 可以获得和MATLAB 类似的工作环境。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现k均值算法示例(k均值聚类算法)
Mar 16 Python
python实现调用其他python脚本的方法
Oct 05 Python
python之PyMongo使用总结
May 26 Python
1 行 Python 代码快速实现 FTP 服务器
Jan 25 Python
python实现装饰器、描述符
Feb 28 Python
浅谈解除装饰器作用(python3新增)
Oct 15 Python
在Pycharm terminal中字体大小设置的方法
Jan 16 Python
python3实现逐字输出的方法
Jan 23 Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 Python
python 并发编程 非阻塞IO模型原理解析
Aug 20 Python
Python requests上传文件实现步骤
Sep 15 Python
Python hashlib模块的使用示例
Oct 09 Python
浅谈python爬虫使用Selenium模拟浏览器行为
Feb 23 #Python
python kmeans聚类简单介绍和实现代码
Feb 23 #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
You might like
php Memcache 中实现消息队列
2009/11/24 PHP
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
几行js代码实现自适应
2017/02/24 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
vue实现在进行增删改操作后刷新页面
2020/08/05 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
在Django框架中设置语言偏好的教程
2015/07/27 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
Django中的文件的上传的几种方式
2018/07/23 Python
Python requests模块实例用法
2019/02/11 Python
python中的列表和元组区别分析
2020/12/30 Python
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
大学生求职推荐信
2013/11/27 职场文书
中药学专业求职信
2014/05/31 职场文书
个人工作表现评价材料
2014/09/21 职场文书
同意迁入证明模板
2014/10/26 职场文书
违纪检讨书范文
2015/01/27 职场文书
教师理论学习心得体会
2016/01/21 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS