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 相关文章推荐
pyside写ui界面入门示例
Jan 22 Python
Python中强大的命令行库click入门教程
Dec 26 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
Dec 12 Python
python+pandas+时间、日期以及时间序列处理方法
Jul 10 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
python求绝对值的三种方法小结
Dec 04 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
Pycharm同步远程服务器调试的方法步骤
Nov 04 Python
详解NumPy中的线性关系与数据修剪压缩
May 25 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 版获取重定向后的地址(代码)
2013/06/26 PHP
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
Git命令之分支详解
2021/03/02 PHP
Firefox div高度自适应
2009/04/28 Javascript
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
js动态为代码着色显示行号
2013/05/29 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
基于iview的router常用控制方式
2019/05/30 Javascript
JS实现可用滑块滑动的缓动图代码
2019/09/01 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
Python实现的文本编辑器功能示例
2017/06/30 Python
详解Python中的type和object
2018/08/15 Python
django 外键model的互相读取方法
2018/12/15 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
Python小程序之在图片上加入数字的代码
2019/11/26 Python
Python猴子补丁知识点总结
2020/01/05 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
Linux机考试题
2015/10/16 面试题
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
带香烟到学校抽的检讨书
2014/09/25 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL