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中一些自然语言工具的使用的入门教程
Apr 13 Python
Python的re模块正则表达式操作
May 25 Python
python如何为创建大量实例节省内存
Mar 20 Python
Python对多属性的重复数据去重实例
Apr 18 Python
python实现狄克斯特拉算法
Jan 17 Python
python之mock模块基本使用方法详解
Jun 27 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 Python
python 实现矩阵按对角线打印
Nov 29 Python
基于python生成英文版词云图代码实例
May 16 Python
django中嵌套的try-except实例
May 21 Python
Python读取多列数据以及用matplotlib制作图表方法实例
Sep 23 Python
5道关于python基础 while循环练习题
Nov 27 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
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
PHP中获取文件扩展名的N种方法小结
2012/02/27 PHP
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
jquery 插件学习(一)
2012/08/06 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
一道优雅面试题分析js中fn()和return fn()的区别
2016/07/05 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
Python OS模块常用函数说明
2015/05/23 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
python实现随机漫步方法和原理
2019/06/10 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
生产车间主管岗位职责
2013/12/28 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
出差报告格式模板
2014/11/06 职场文书
委托证明范本
2014/11/25 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
高中化学教学反思
2016/02/22 职场文书
合理缓解职场压力,让你随时保持最佳状态!
2019/06/21 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL