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开发微信支付的注意事项
Aug 19 Python
关于numpy中np.nonzero()函数用法的详解
Feb 07 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
Apr 25 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
python输出电脑上所有的串口名的方法
Jul 02 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
Python通过socketserver处理多个链接
Mar 18 Python
python实现在线翻译
Jun 18 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 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静态文件返回304技巧分享
2015/01/06 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
javascript操作cookie
2017/01/17 Javascript
MUI  Scroll插件的使用详解
2017/04/13 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
学习Vue组件实例
2018/04/28 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
利用Python学习RabbitMQ消息队列
2015/11/30 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
python 实现波浪滤镜特效
2020/12/02 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
审计工作个人的自我评价
2013/12/25 职场文书
大学三年的自我评价
2013/12/25 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
项目投资建议书
2014/05/16 职场文书
企业年检委托书范本
2014/10/14 职场文书
房屋租房协议书范本
2014/12/04 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
推销搭讪开场白
2015/05/28 职场文书
Java对文件的读写操作方法
2022/04/29 Java/Android