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关闭windows进程的方法
Apr 18 Python
详解Python的Twisted框架中reactor事件管理器的用法
May 25 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
Python使用剪切板的方法
Jun 06 Python
Python中collections模块的基本使用教程
Dec 07 Python
opencv转换颜色空间更改图片背景
Aug 20 Python
将tensorflow模型打包成PB文件及PB文件读取方式
Jan 23 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
使用Python pip怎么升级pip
Aug 11 Python
Python3如何实现Win10桌面自动切换
Aug 11 Python
最新Python idle下载、安装与使用教程图文详解
Nov 28 Python
python中操作文件的模块的方法总结
Feb 04 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
SONY SRF-40W电路分析
2021/03/02 无线电
通过对服务器端特性的配置加强php的安全
2006/10/09 PHP
php文件怎么打开 如何执行php文件
2011/12/21 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
[33:17]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
Python元组知识点总结
2019/02/18 Python
深入理解Django-Signals信号量
2019/02/19 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
Python class的继承方法代码实例
2020/02/14 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
应届生程序员求职信
2013/11/05 职场文书
活动策划求职信模板
2014/04/21 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
出纳工作检讨书
2014/10/18 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
入党申请书怎么写?
2019/06/11 职场文书
python绘制云雨图raincloud plot
2022/08/05 Python