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学习笔记:字典的使用示例详解
Jun 13 Python
Python切片用法实例教程
Sep 08 Python
python开发之thread线程基础实例入门
Nov 11 Python
彻底搞懂Python字符编码
Jan 23 Python
78行Python代码实现现微信撤回消息功能
Jul 26 Python
Python算法中的时间复杂度问题
Nov 19 Python
Python中bisect的使用方法
Dec 31 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
浅谈django 重载str 方法
May 19 Python
python实现126邮箱发送邮件
May 20 Python
Django中的JWT身份验证的实现
May 07 Python
移除Selenium中window.navigator.webdriver值
Jun 10 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/11/25 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
JS的反射问题
2010/04/07 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
JS使用面向对象技术实现的tab选项卡效果示例
2017/02/28 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
自己使用总结Python程序代码片段
2015/06/02 Python
Django在win10下的安装并创建工程
2017/11/20 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
汽车销售求职自荐信
2013/10/01 职场文书
中文师范生自荐信
2014/01/30 职场文书
小学生综合素质评语
2014/04/23 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
2014年检验科工作总结
2014/11/22 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
校运会加油稿大全
2015/07/22 职场文书
在Python中如何使用yield
2021/06/07 Python