Orange的数据挖掘工具入门使用html
声明:python
1)本报告由博客园bitpeach撰写,版权全部,免费转载,请注明出处,并请勿做商业用途。git
2)若本文档内有侵权文字或图片等内容,请联系做者bitpeach删除相应部分。github
3)本文档内容涉及配合Python编程语言,介绍Orange数据挖掘工具的简单实用主题。数据库
4)仅仅做为参考用途,抛砖引玉,不做为证据证实用途,请自行取舍,核实引用。编程
目录 微信
0目录 1数据结构
【1】为何要写该博文 1app
1.1缘由 2编程语言
本文大体介绍Orange的简单知识,关键词为:Orange 的使用,Orange的数据挖掘简介等
上一篇博文,介绍了Orange 的简单状况。本篇博文介绍如何入门使用。
=====================================================================================================================================
有网友表示没有看懂相关的数据格式,我也查询了相关的网页,搜索引擎等。没有TAB的数据格式详细文法说明,即使是有,也不是数据挖掘里的TAB格式,也有多是我没有找到,若是有兴趣的网友向交流,能够与个人邮箱联系。
以著名的鸢尾花格式为例说明,iris.tab来源于官方网址,这里截取部分。
sepal<space>length<\t>sepal<space>width<\t>petal<space>length<\t>petal<space>width<\t>iris<\r\n> c<\t>c<\t>c<\t>c<\t>d<\r\n> <\t><\t><\t><\t>class<\r\n> 5.1<\t>3.5<\t>1.4<\t>0.2<\t>Iris-setosa<\r\n> 4.9<\t>3.0<\t>1.4<\t>0.2<\t>Iris-setosa<\r\n> 4.7<\t>3.2<\t>1.3<\t>0.2<\t>Iris-setosa<\r\n> 4.6<\t>3.1<\t>1.5<\t>0.2<\t>Iris-setosa<\r\n> |
因为粘贴过来,空格或缩进世不可见的。因此我将数据修改一下,写成较为明白的格式。第一行主要是属性,属性只要使用TAB(缩进)隔开,就代表是不一样的属性,因此若是使用空格隔开,仍然认为是同一属性的名字。彼此之间使用缩进隔开,也正是tab数据格式的由来。
第二行主要是属性的赋值类型,包括几种。相似于WEKA的ARFF格式,可是ARFF格式,网上讲得很是清楚,因此TAB反而缺乏不少资料。在官方的描述符(descriptor)相关网页上记录了第二行的相关属性,引用以下:
Data instances in Orange can contain several types of variables: discrete, continuous, strings, and Python and types derived from it.
由引用结果可知,赋值的类型比WEKA的ARFF要少一些,主要是连续数值型,离散数值型,字符型和Python连接变量等。其中先说离散数值型(discrete),缩写为小写字母d,表达的是数值离散,但兼备字符特征。连续数值型,缩写为小写字母c,表达的是连续数字变化,不具有字符特色。字符型则从字面能够理解。(为何说离散兼备字符特征,由于排序的时候,依据离散数字值,排出来与字符ASCII排序是一致的,具体没有理解透彻,但愿交流指点。)
根据上面的例子,咱们发现第二行里四个c,第五个是d,表示的是前四个属性是连续数值,最后一个是离散的。Cloga网友在他的博客中也写道:Orange使用一种专有的数据结构,扩展名为.tab,其实就是用tab分隔每一个数据的纯文本。文档的第一行为属性的名称,用tab分隔,第二行为属性对应的数据类型,包含连续性,间断型和字符型。第三行包含一些元信息,用于指明依赖的特征(分类),不相关的特征(须要忽略的特征)和元特征。
因此第三行通常标注信息,至于什么是元信息,还来得及咨询CG老师,可是粗浅的理解能够认为第三行实际上就是在作备注,备注数据属性是否能够忽略,能够参与计算(这很重要!)。通常注明class,表示属性能够忽略。请注意class所对应的属性,只能选择离散型(d)。不知道为何(果断我没学好知识)。在某属性下选择连续型的赋值,还注明class,会在读入的时候报错,报错类型(没有及时截图)大体为class attribute is not legal value。(补充,左侧线划的句子是不正确的,是我没有抓住本质的错误结论。导入not legal value的根本问题是tab数据格式的问题,与class注明对应的属性类别没有关系,即某个属性,注明class,它能够是任意属性,能够是s,能够是c,能够是d。我如今还原不出当时的这个报错,我也回忆不起来出现not legal value的隐患在哪里,隐隐约约以为出现这个问题,估计是第三行class的tab数量错了,或者某个缩进打错了,致使not legal value,归根究竟是简简单单的格式错误。)
综上所述,须要注意上述数据例子的格式,关键的地方我都用红色标注了,不可见的其余字符也用蓝色标注。只有这样才能符合Orange的读入,不然报错。
主要是数据,就不赘述了。数据与数据属性一一对应,使用缩进隔开就好了。
本部分为补充,是今晚新增的查证的相关材料。
(1)How to Create Tab Delimited Files
(2)请问clusfavor软件中的delimited Text应该怎么翻译呢
总结:说明查找相关的关键词不能查询“tab文件”或“tab数据格式”,而应该查询“tab delimited 文件”之类的骨架关键词。
同时材料how to create tab delimited files提供了EXCEL能够另存为的方法。(OFFICE2010里的选择是另存为“文本(带分隔).txt”)
================================================================================================================================
Orange不可能所有介绍,只能去阅读官方资料。这里就作一个聚类的小实验,把实验过程当中的问题总结起来,避免后面的人走弯路。记录实验的目的,绝对不只仅是证实成功,更是提醒后来者实验的问题,去解决重现实验的问题,这才是正确的态度。我选取的小实验主题为聚类分析,专门是层次聚类。
在说到聚小实验类以前,不得不提到Orange能够做为模块导入python,所以不只可使用可视化操做,还可使用代码脚本验证。这些做为模块的官方说明文档,均可以去阅读,下面总结几个:
(1)关于官方数据输入(DATA Input)的代码导入和代码DEMO说明很是有用,解释了如何使用Orange的标准库来制做TAB数据,这是很是方便的。
(2)既然要聚类,必然要选择聚类距离准则,关于官方网址提供计算距离(Distance)的方法和模块接口能够参看超连接。官方提供的例程很是容易理解,很是好用,很是好验证。
(3)聚类选择了层次聚类,能够参看官方提供的层次聚类(Hierarchical Clustering)的模块接口和代码DEMO。
在这里,我目前还在学习Orange 的标准库制做TAB的方法,尚未彻底学会,所以就不提早撰写相关的知识了(笔者注:貌似我犯了错误,我没有发现Orange提供标准库,好像它没有制做TAB的标准库,看来仍是要本身去制做)。使用Python写TAB的数据是很是方便,比起C语言来,真的是很快速迅捷。本实验的时候,制做的时候须要提醒几点,并举一个例子:
若是我分析的数据对象是一个DNA序列数据,请注意数据格式须要以下书写:
No1<\t>No2<\t>No3<\t>No4<\t>No5<\t>Order<\r\n> d<\t>d<\t>d<\t>d<\t>d<\t>c<\r\n> <\r\n> G<\t>G<\t>T<\t>C<\t>G<\t>1<\r\n> G<\t>T<\t>A<\t> T<\t>C<\t>2<\r\n> …… |
No1<\t>No2<\t>No3<\t>No4<\t>No5<\t>Order<\r\n> d<\t>d<\t>d<\t>d<\t>d<\t>d<\r\n> <\t><\t><\t><\t><\t>class<\r\n> G<\t>G<\t>T<\t>C<\t>G<\t>1<\r\n> G<\t>T<\t>A<\t> T<\t>C<\t>2<\r\n> …… |
上述例子应该均可以使用,以前我都验证过是可使用的,只不过不报错,但不必定符合你的使用聚类计算。
两个的属性是五个碱基,加上一个序列的编号。尽管Orange会内置编号,可是我不知道如何使用,而且使用本身的编号,利于数据库管理。
上述左侧请注意,若是不对属性进行元信息的标注,那么空出一行,什么也不要写。
上述右侧请注意,若是标注了class,Order必定要离散的,不然可能报错(好像我实验的时候报错了)。标注class 的话,没有必要空出额外的一行。(补充,若是空了一行,可是不标注class,有时也报self.list out of range的溢出,可是仍然能够跑数据。这很可能是若是你不标注class,又空出了一行,可是你那一行带入不可见的字符,如空格或缩进,你空出的那一行必须只能是简简单单的回车换行。不然会出问题。)
可是不论上述两种设计数据格式,Order颇有可能会出现问题,缘由是:
(1)对于程序内部来讲,聚类须要计算距离,若是属性不是须要计算距离的,结果被带进去计算,致使结果是错误的。
详细状况:上述左侧,若是Order不去注明class(表示忽略该属性),则Order的数值带入计算,影响聚类。
解决方式:对于计算距离的情形,非计算属性能够标记为c,也能够标记s,尽可能不标记d。若是标记d,能够注明该属性为class,或许能够不带入运算。(补充:此为后续实验的体会)
(补充:)不管是连续型,仍是离散型。Orange的tab数据投入到聚类距离计算时,凡绝对值不是0和1,即大于等于2或小于等于-2,都会被程序认为是1。因此多维属性的数值通常为0或1。若是不参与计算的属性,如序列编号等,尽可能不要带入计算中。因此要么使用class注释不想参与计算的数据(注意,class只能使用一次,因此建议使用标注string来处理),要么使用string属性。这是后续实验的体会。
(2)对于人来讲,聚类结果须要输出,须要可视化的观察,须要编号的显示,可是Orange可能会出现必定问题。
详细状况:上述右侧,若是Order注明了class,则在层次聚类的时候,忽略掉了该属性,自动的remove掉了,致使层次聚类后,我不知道哪条序列是原来整体集合的顺序第几条?(补充:笔者此处语句不严谨,可能有问题。后续的进一步实验以为这句话是不正确的。)
综上所述,而上述的状况,经常见于入门知识,官方引言。所以这里摸索到使用string,则不会参与计算的方法。即给Order赋予string(缩写为s),依然给1,2,3等编号,既能够层次聚类的时候观察编号,也能够不参与聚类距离的计算。验证方式为:
我新建一个数据,并有四个序列,分别为(这里不给出TAB的完整格式了,就给出随便的格式了,主要是给序列内容):
S1 S2 S3 S4 S5 S6 S7 S8 Order discrete discrete discret discrete discrete discrete discret discrete string
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 300 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 4000 |
若是string的数值参与影响,一定影响层次聚类的距离计算,可是结果输出为以下:
编号1与编号300的聚成一块儿,既说明没有影响,并且在层次聚类的图后还能看见编号。(若是使用class,是在上图中看不到编号的,手动则左侧栏也是找不到调不出属性的,由于class的属性被忽略掉了。)
聚类的过程很是简单,由于都是可视化操做。可视化操做的图标都在左侧栏里,均可以找到。
(1)创建FILE,点选FILE图标,拖动放置画布上。
打开FILE,能够读取TAB数据,选中所要读取的文件(已经制做好的TAB数据文件)
读取后,须要显示数据,而后选择DATA栏目里的第二行第一个,Data Table图标,拖放至画布中,而后从FILE图标的右侧引出一根线,能够链接Data Table。
则在Paint Data里能够显示数据了,显示状况以下。
同时注意,在显示的时候,是看不到Order的属性,可是若是是class属性,默认会是灰色的,本身试试就知道了。
看到上图左下角有一个commit on any change是用于修改数据后,从新保存提交,从新运行的操做按钮。不要选上钩,由于"不选钩"的操做就是每一步操做若是影响了数据,马上就会投入到后续生产线(这里我将整个聚类的完整过程比喻成生产线),为避免牵一发动全身。建议不要勾上,使用手动提交的方式,便于生产线根据人的意志去调节调试。
(2)因为咱们的主题是层次聚类,可是层次聚类以前须要计算距离。所以接下来,将Paint Data送入距离计算模块,选择不带任何标记的纯粹的三角形状的Distance(在Unsupervised里有纯粹三角形的Distance)。
下图由于我已经作了实验,就不重头一个一个拖放了,就指出下面红色框内的为distance模块。同时,从Data Table图标引出一条线接上Distance。
双击点开Data Table图标,弹出的菜单左下角点击send selections。这样数据就被送入到distance了。在distance中能够选择距离公式,默认是欧式距离。
若是你须要更换公式,能够在Distance Metric一栏,选择完其余的公式,点击commit,而后再由Data Table送入数据,从新计算。
请注意,发送数据(send selection)是须要你选择数据的,便可以使用鼠标拉选EXCEL那样。若是你发送所有数据,也应该是须要手动选择的,若是数据太多,不想鼠标拉选,能够像下图同样,下图红框处,双击便可全选,而后发送数据便可。若是你发送数据(send selection)没有任何反应,颇有可能就是你没有选择数据。没有选择数据,送出去是空数据。
(3)而后是层次聚类,在Unsupervised栏目的第二行第三个,选择层次聚类图标,而后拖放至白布上。从distance图标引出一根线,链接层次聚类的图标。
当把数据送过去后,若是数据不少的话,能够看到distance图标在环形缓冲,这个显示效果作的很赞(上图是若是数据不少的状况,distance环形缓冲的示意)。打开层次聚类后,发现生成了系谱树。
上图右侧是阈值,拖动阈值阀门,能够显示不一样的聚类数目。
上图左侧三个红框,分别指距离准则,属性显示,标注额外属性。
第一个,距离准则,有以下的选择。
这几个选择从上到下分别是最小距离,平均距离,最小方差距离,最大距离。(想学习具体方法,能够参看百度文库,文档贡献网友627004473的上传文档《聚类分析PDF》,在第29页)
通常序列计算距离仍是选择类平均法比较法,所以选择它average linkage。
第二个,属性显示。就是我以前提到的,若是想在聚类图谱中看到序列所属的编号,若是使用class,annotation里会没有Order,因此使用string属性,能够解决这个问题。如今谱图中就出现了编号,以下图。
第三个额外标注,是为了写出聚类内样本内容,须要标注一下序列所属的类的类号。经过额外写入,方便样本保存的时候,里面会有类标记。建议勾选,并本身起一个名字。
(4)层次聚类结束后,须要把数据导出,则分别拖放selected data和save,以下图所示。
请注意,你的selected data是空白的,请双击层次聚类的图标,在弹出的菜单左下角,点击commit,提交你的操做变化。这样内部程序发现变化,随即将数据传入selected data。而后你可按照本身的属性去提取对应的数据。以下图所示,我按照Order编号所在的聚类类号,保存我想要的数据,同时我还知道聚类划分的数据属于原集合的第几条数据。因为在层次聚类的界面,有一个append cluster ID以前介绍过了,勾选上,则在selected data中会多出一个类号的属性。下图中HierarCluster是我在层次聚类的图中,append cluser ID命名新增所致。
save的图标则在上图的上图中,用于存储数据。首先在上图的基础上,产生规则,以下图所示。
在上图中,定义HierarCluster属于Cluster1的样本,点击add,在规则区就产生了样本,data out区域也注明了样本数和特征数。此时把save图标拖出,回过来将select data打开,勾选(active)想要的数据样本,点击commit提交,就会传到save里。最后双击SAVE图标,在弹出的的菜单中,再保存数据便可,以下图所示。
局限于目前接受学习的水平,还没足够的时间掌握orange的数据挖掘资料,本实验有如下不足:
本实验的特点特色在于:
(1)Orange的接口简单易行,它的模块类有demo可追溯,入手较快。
(2)全过程可视化操做,极其简单,在操做上胜于WEKA
(3)Orange的聚类分析虽没有WEKA参数全面,但独具特色,含有信息预测的模块,也很是有特点。
很是热切地但愿和期盼有一块儿使用的朋友,一块儿讨论,一块儿交流,若是有前辈指导就更好了!个人工做邮箱和github都挂在博客上,有兴趣的能够联系。
<<<<<<<<< 写在页面最底的小额打赏 >>>>>>>>>
若是读者亲愿意的话,能够小额打赏我,感谢您的打赏。您的打赏是个人动力,很是感激。
必读:如您愿意打赏,打赏方式任选其一,本页面右侧的公告栏有支付宝方式打赏,微信方式打赏。
避免因打赏产生法律问题,两种打赏方式的任一打赏金额上限均为5元,谢谢您的支持。
若有问题,请24小时内通知本人邮件。