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 提取文件的小程序
Jul 29 Python
Python实现从百度API获取天气的方法
Mar 11 Python
用Python登录Gmail并发送Gmail邮件的教程
Apr 17 Python
浅谈python为什么不需要三目运算符和switch
Jun 17 Python
Python变量和字符串详解
Apr 29 Python
Pandas中把dataframe转成array的方法
Apr 13 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
Apr 25 Python
python字符串与url编码的转换实例
May 10 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
Jun 26 Python
一篇文章搞定Python操作文件与目录
Aug 13 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
用Python编写简单的gRPC服务的详细过程
Jul 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
用PHP进行MySQL删除记录操作代码
2008/06/07 PHP
php中实现记住密码自动登录的代码
2011/03/02 PHP
微博短链接算法php版本实现代码
2012/09/15 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
php猜单词游戏
2015/09/29 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
用JQuery调用Session的实现代码
2010/10/29 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
2013/11/06 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
vue数据控制视图源码解析
2018/03/28 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
Python的设计模式编程入门指南
2015/04/02 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
python判断设备是否联网的方法
2018/06/29 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
python中有函数重载吗
2020/05/28 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
初三学生评语大全
2014/04/24 职场文书
员工规章制度范本
2015/08/07 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书