K-Means++ 聚类之数据可视化:使用gnuplot
2016-02-01 00:00
381 查看
http://blog.chinaunix.net/uid-24774106-id-3415470.html
周末做了K-Means++聚类分析之NBA后卫分类,但是我不爽的一点是最后的结果不直观,需要我仔细研究数据,才能确定,我的分类效果对不对。当时就想做个可视化的图,对还是错,一目了然。
matlab是一个可视化的工具,其实他更是一个编程的开发工具,他太厚重了,matlab2012a的安装包就5.4G
。。后来我找到了gnuplot。这个是我买的恶意软件分析诀窍与工具箱里面推荐的一个工具,我这两天试了试,工具很不错,功能很强大,是杀人越货,居家
旅行之必备工具,呵呵。
安装很简单:
apt-get install gnuplot gnuplot-doc
上
面博文K-means++算法,我将NBA后卫分成了8类,我绘制了图,不是很直观,所以选择3类,重新绘制了图,就比较直观了。我将代码改动了一下,将
不同类别的数据输出的不同的文件中去,中间结果就不显示了,这样的花,第一类球员的数据存在out0文件,第二类存放在out1文件。。。
int output_result(struct player* players,int player_num,int cluster_num)
{
int i ,j;
char cmd[256] = {0};
struct player *p =players;
for(i =0 ; i< cluster_num;i++)
{
fprintf(stderr,"\nthe group %d\n",i);
for(j=0,p=players;j
{
if(p->group == i)
{
snprintf(cmd,256,"cat %s |sed -n \"%dp\" >>out%d",FILEPATH,j+1,i);
system(cmd);
// fprintf(stderr,"%s\t",p->name);
}
}
}
fprintf(stderr,"\n");
}
root@manu:~/code/c/lin_rank# wc out*
55 220 2164 out0
23 92 899 out1
22 88 848 out2
100 400 3911 总用量
root@manu:~/code/c/lin_rank#
可以看到,out0里面有55个球员,out1有23个球员。
gnuplot的使用比较简单,就是终端上敲入gnuplot,就打开的这个工具。
root@manu:~/code/c/lin_rank#
root@manu:~/code/c/lin_rank# gnuplot
G N U P L O T
Version 4.4 patchlevel 3
last modified March 2011
System: Linux 3.2.0-29-generic-pae
Copyright (C) 1986-1993, 1998, 2004, 2007-2010
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help seeking-assistance"
immediate help: type "help"
plot window: hit 'h'
Terminal type set to 'wxt'
gnuplot>
在命令行执行这个命令会绘制图图像:
splot "out0" using 2:3:4 pointtype 16 title "group 0",\
"out1" using 2:3:4 pointtype 10 title "group 1",\
"out2" using 2:3:4 pointtype 2 title "group 2"
可是有个问题,和我们归一化篮板助攻得分是一样的问题,我们不告诉gnuplot,x轴-篮板 ,y轴-主攻,z轴-得分,的比例就会动态调整,这时候输出的结果很难分辨聚类的效果好不好,感兴趣的筒子可以自己try一下,不会怀孕的,呵呵。
我的解决办法和归一化也是一样的,就是我告诉他这个比例:
average[0] = 3.317520 average[1] = 3.990000 average[2] = 12.655000
100个人篮板的平均值是3.3,助攻是3.99,得分是12.65。比例大概是5:6:18,我们设置:
set xrange [0:10]
set yrange [0:12]
set zrange [0:36]
这样在输入刚才输入的指令,就可以绘制出比较好的图片了。
gnuplot还能导出png图片,指令如下:
set term pngcairo size 1200,600
set output "cluster.png"
replot
set output
set term wxt
这样我们就绘制出了图片,现在看看效果:
![](http://blog.chinaunix.net/attachment/201211/20/24774106_1353425109pvPv.png)
分类效果看起来还不错,呵呵。我不满意的地方就是人工干预太多,如果能一条龙完全用代码或者脚本实现就好了。
总之了,这个gnuplot的确是个好工具,很好使用,向大家推荐。
参考文献:
1 使用 gnuplot 科学作图 ,马欢前辈整理的pdf资料,非常好,十分感激前辈
周末做了K-Means++聚类分析之NBA后卫分类,但是我不爽的一点是最后的结果不直观,需要我仔细研究数据,才能确定,我的分类效果对不对。当时就想做个可视化的图,对还是错,一目了然。
matlab是一个可视化的工具,其实他更是一个编程的开发工具,他太厚重了,matlab2012a的安装包就5.4G
。。后来我找到了gnuplot。这个是我买的恶意软件分析诀窍与工具箱里面推荐的一个工具,我这两天试了试,工具很不错,功能很强大,是杀人越货,居家
旅行之必备工具,呵呵。
安装很简单:
apt-get install gnuplot gnuplot-doc
上
面博文K-means++算法,我将NBA后卫分成了8类,我绘制了图,不是很直观,所以选择3类,重新绘制了图,就比较直观了。我将代码改动了一下,将
不同类别的数据输出的不同的文件中去,中间结果就不显示了,这样的花,第一类球员的数据存在out0文件,第二类存放在out1文件。。。
int output_result(struct player* players,int player_num,int cluster_num)
{
int i ,j;
char cmd[256] = {0};
struct player *p =players;
for(i =0 ; i< cluster_num;i++)
{
fprintf(stderr,"\nthe group %d\n",i);
for(j=0,p=players;j
{
if(p->group == i)
{
snprintf(cmd,256,"cat %s |sed -n \"%dp\" >>out%d",FILEPATH,j+1,i);
system(cmd);
// fprintf(stderr,"%s\t",p->name);
}
}
}
fprintf(stderr,"\n");
}
root@manu:~/code/c/lin_rank# wc out*
55 220 2164 out0
23 92 899 out1
22 88 848 out2
100 400 3911 总用量
root@manu:~/code/c/lin_rank#
可以看到,out0里面有55个球员,out1有23个球员。
gnuplot的使用比较简单,就是终端上敲入gnuplot,就打开的这个工具。
root@manu:~/code/c/lin_rank#
root@manu:~/code/c/lin_rank# gnuplot
G N U P L O T
Version 4.4 patchlevel 3
last modified March 2011
System: Linux 3.2.0-29-generic-pae
Copyright (C) 1986-1993, 1998, 2004, 2007-2010
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help seeking-assistance"
immediate help: type "help"
plot window: hit 'h'
Terminal type set to 'wxt'
gnuplot>
在命令行执行这个命令会绘制图图像:
splot "out0" using 2:3:4 pointtype 16 title "group 0",\
"out1" using 2:3:4 pointtype 10 title "group 1",\
"out2" using 2:3:4 pointtype 2 title "group 2"
可是有个问题,和我们归一化篮板助攻得分是一样的问题,我们不告诉gnuplot,x轴-篮板 ,y轴-主攻,z轴-得分,的比例就会动态调整,这时候输出的结果很难分辨聚类的效果好不好,感兴趣的筒子可以自己try一下,不会怀孕的,呵呵。
我的解决办法和归一化也是一样的,就是我告诉他这个比例:
average[0] = 3.317520 average[1] = 3.990000 average[2] = 12.655000
100个人篮板的平均值是3.3,助攻是3.99,得分是12.65。比例大概是5:6:18,我们设置:
set xrange [0:10]
set yrange [0:12]
set zrange [0:36]
这样在输入刚才输入的指令,就可以绘制出比较好的图片了。
gnuplot还能导出png图片,指令如下:
set term pngcairo size 1200,600
set output "cluster.png"
replot
set output
set term wxt
这样我们就绘制出了图片,现在看看效果:
![](http://blog.chinaunix.net/attachment/201211/20/24774106_1353425109pvPv.png)
分类效果看起来还不错,呵呵。我不满意的地方就是人工干预太多,如果能一条龙完全用代码或者脚本实现就好了。
总之了,这个gnuplot的确是个好工具,很好使用,向大家推荐。
参考文献:
1 使用 gnuplot 科学作图 ,马欢前辈整理的pdf资料,非常好,十分感激前辈
相关文章推荐
- 谈谈开发者眼中的编程语言是怎样的?
- 荣耀4CROOT 成功!附本人ROOT过程——KINGROOT
- kali linux: /android-sdk-linux/platform-tools/adb: 没有那个文件或目录
- 美国罗斯福纪念公园墙上刻着的一段总统名言
- CentOS 6.2 下安装QQ2012完全可用
- 3.3.3 改变目标(运行级别)—— RHEL7 / CentOS7
- 正则表达式pcre在Android下的移植
- repo—清华TUNA镜像源—Android (AOSP)—CyanogenMod Android for Motorola Defy
- Linaro公司基于GCC推出的的ARM交叉编译工具
- 美国海军采购Linux系统去引导无人机舰队
- systemtap 在Ubuntu上安装
- Debian / Ubuntu Linux: Setup Wireless Access Point (WAP) with Hostapd
- (OK) android——Repo sync cm—解决—error
- linux设备驱动归纳总结(三):2.字符型设备的操作open、close、read、write
- Linux 从虚拟地址到物理地址
- airbase-ng stops working after a while--wifi热点只能连接20秒左右
- android——CyanogenMod rom编译尝试(简记)
- sed
- How to port pcre 8.33 to Android
- 德才真值表