Orange的数据挖掘工具入门使用

Orange的数据挖掘工具入门使用html

声明:python

1)本报告由博客园bitpeach撰写,版权全部,免费转载,请注明出处,并请勿做商业用途。git

2)若本文档内有侵权文字或图片等内容,请联系做者bitpeach删除相应部分。github

3)本文档内容涉及配合Python编程语言,介绍Orange数据挖掘工具的简单实用主题。数据库

4)仅仅做为参考用途,抛砖引玉,不做为证据证实用途,请自行取舍,核实引用。编程

0目录

目录 微信

0目录    1数据结构

1】为何要写该博文    1app

1.1缘由    2编程语言

2】数据格式    2

2.1 TAB数据格式    2

2.1.1 第一行    2

2.1.2 第二行和第三行    2

2.1.3 第三行之后    3

3小实验    3

3.1 在小实验以前的内容    3

3.2 数据格式的制做    3

3.3 层次聚类的实验过程    4

3.4 本实验的不足    14

 

 

1】为何要写该博文

本文大体介绍Orange的简单知识,关键词为:Orange 的使用,Orange的数据挖掘简介等

 

1.1 缘由

 

上一篇博文,介绍了Orange 的简单状况。本篇博文介绍如何入门使用。

=====================================================================================================================================

2】数据格式

有网友表示没有看懂相关的数据格式,我也查询了相关的网页,搜索引擎等。没有TAB的数据格式详细文法说明,即使是有,也不是数据挖掘里的TAB格式,也有多是我没有找到,若是有兴趣的网友向交流,能够与个人邮箱联系。

2.1 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>

2.1.1 第一行

因为粘贴过来,空格或缩进世不可见的。因此我将数据修改一下,写成较为明白的格式。第一行主要是属性,属性只要使用TAB(缩进)隔开,就代表是不一样的属性,因此若是使用空格隔开,仍然认为是同一属性的名字。彼此之间使用缩进隔开,也正是tab数据格式的由来。

2.1.2 第二行和第三行

第二行主要是属性的赋值类型,包括几种。相似于WEKAARFF格式,可是ARFF格式,网上讲得很是清楚,因此TAB反而缺乏不少资料。在官方的描述符(descriptor)相关网页上记录了第二行的相关属性,引用以下:

Data instances in Orange can contain several types of variables: discrete, continuous, strings, and Python and types derived from it.

由引用结果可知,赋值的类型比WEKAARFF要少一些,主要是连续数值型,离散数值型,字符型和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的读入,不然报错。

2.1.3 第三行之后

主要是数据,就不赘述了。数据与数据属性一一对应,使用缩进隔开就好了。

 

2.2 TAB的相关资料(补充)

      本部分为补充,是今晚新增的查证的相关材料。

  (1)How to Create Tab Delimited Files

  (2)请问clusfavor软件中的delimited Text应该怎么翻译呢

  (3)Orange的File图标的说明

  总结:说明查找相关的关键词不能查询“tab文件”或“tab数据格式”,而应该查询“tab delimited 文件”之类的骨架关键词。

                    同时材料how to create tab delimited files提供了EXCEL能够另存为的方法。(OFFICE2010里的选择是另存为“文本(带分隔).txt”)

How to Create Tab Delimited Files

Read more : http://www.ehow.com/how_5079116_create-tab-delimited-files.html
How to Create Tab Delimited Files

Read more : http://www.ehow.com/how_5079116_create-tab-delimited-files.html
How to Create Tab Delimited Files

Read more : http://www.ehow.com/how_5079116_create-tab-delimited-files.html

================================================================================================================================

3小实验

Orange不可能所有介绍,只能去阅读官方资料。这里就作一个聚类的小实验,把实验过程当中的问题总结起来,避免后面的人走弯路。记录实验的目的,绝对不只仅是证实成功,更是提醒后来者实验的问题,去解决重现实验的问题,这才是正确的态度。我选取的小实验主题为聚类分析,专门是层次聚类。

3.1 在小实验以前的内容

在说到聚小实验类以前,不得不提到Orange能够做为模块导入python,所以不只可使用可视化操做,还可使用代码脚本验证。这些做为模块的官方说明文档,均可以去阅读,下面总结几个:

1)关于官方数据输入(DATA Input)的代码导入和代码DEMO说明很是有用,解释了如何使用Orange的标准库来制做TAB数据,这是很是方便的。

2)既然要聚类,必然要选择聚类距离准则,关于官方网址提供计算距离(Distance)的方法和模块接口能够参看超连接。官方提供的例程很是容易理解,很是好用,很是好验证。

3)聚类选择了层次聚类,能够参看官方提供的层次聚类(Hierarchical Clustering)的模块接口和代码DEMO

3.2 数据格式的制做

在这里,我目前还在学习Orange 的标准库制做TAB的方法,尚未彻底学会,所以就不提早撰写相关的知识了(笔者注:貌似我犯了错误,我没有发现Orange提供标准库,好像它没有制做TAB的标准库,看来仍是要本身去制做)。使用PythonTAB的数据是很是方便,比起C语言来,真的是很快速迅捷。本实验的时候,制做的时候须要提醒几点,并举一个例子:  

  • TAB的数据格式设计问题(请具体问题具体分析,我下面这个例子的解决方法也是具体的,不是普遍适用的)

若是我分析的数据对象是一个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会内置编号,可是我不知道如何使用,而且使用本身的编号,利于数据库管理。

上述左侧请注意,若是不对属性进行元信息的标注,那么空出一行,什么也不要写。

上述右侧请注意,若是标注了classOrder必定要离散的,不然可能报错(好像我实验的时候报错了)。标注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),依然给123等编号,既能够层次聚类的时候观察编号,也能够不参与聚类距离的计算。验证方式为:

我新建一个数据,并有四个序列,分别为(这里不给出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的属性被忽略掉了。)

3.3 层次聚类的实验过程

聚类的过程很是简单,由于都是可视化操做。可视化操做的图标都在左侧栏里,均可以找到。

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

第二个,属性显示。就是我以前提到的,若是想在聚类图谱中看到序列所属的编号,若是使用classannotation里会没有Order,因此使用string属性,能够解决这个问题。如今谱图中就出现了编号,以下图。

第三个额外标注,是为了写出聚类内样本内容,须要标注一下序列所属的类的类号。经过额外写入,方便样本保存的时候,里面会有类标记。建议勾选,并本身起一个名字。

4层次聚类结束后,须要把数据导出,则分别拖放selected datasave,以下图所示。

请注意,你的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图标,在弹出的的菜单中,再保存数据便可,以下图所示。

 

3.4 本实验的不足

局限于目前接受学习的水平,还没足够的时间掌握orange的数据挖掘资料,本实验有如下不足:

  • 解决tab文件的部分数据格式概念知识,仍有一部分未解决。如除离散值和连续值,classstring外还有什么属性?离散和连续的区别在哪里?(这个问题我参阅《数据挖掘概念与技术》一书29页,第二章2.1.6小节关于离散属性和连续属性的问题,可是仍然不解)
  • 层次聚类有没有评估性能的模块?如召回率等。便于解决k-means的性能评价问题。也利于完成学术的基本实验证实。

     

本实验的特点特色在于:

1Orange的接口简单易行,它的模块类有demo可追溯,入手较快。

2)全过程可视化操做,极其简单,在操做上胜于WEKA

3Orange的聚类分析虽没有WEKA参数全面,但独具特色,含有信息预测的模块,也很是有特点。

 

很是热切地但愿和期盼有一块儿使用的朋友,一块儿讨论,一块儿交流,若是有前辈指导就更好了!个人工做邮箱和github都挂在博客上,有兴趣的能够联系。

 


   <<<<<<<<<  写在页面最底的小额打赏  >>>>>>>>>

若是读者亲愿意的话,能够小额打赏我,感谢您的打赏。您的打赏是个人动力,很是感激。

必读:如您愿意打赏,打赏方式任选其一,本页面右侧的公告栏有支付宝方式打赏,微信方式打赏。

避免因打赏产生法律问题,两种打赏方式的任一打赏金额上限均为5元,谢谢您的支持。

若有问题,请24小时内通知本人邮件。

相关文章
相关标签/搜索