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

时间:2023-03-10 06:28:37
Orange的数据挖掘工具入门使用

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

声明:

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

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

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

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

0目录

目录

0目录    1

【1】为什么要写该博文    1

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 第二行和第三行

第二行主要是属性的赋值类型,包括几种。类似于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的读入,否则报错。

2.1.3 第三行以后

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

2.2 TAB的相关资料(补充)

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

  (1)How to Create Tab Delimited Files

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

  (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的标准库,看来还是要自己去制作)。使用Python写TAB的数据是非常方便,比起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会内置编号,但是我不知道如何使用,并且使用自己的编号,利于数据库管理。

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

上述右侧请注意,如果标注了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的数值参与影响,必定影响层次聚类的距离计算,但是结果输出为如下:

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

编号1与编号300的聚成一起,既说明没有影响,而且在层次聚类的图后还能看见编号。(如果使用class,是在上图中看不到编号的,手动则左侧栏也是找不到调不出属性的,因为class的属性被忽略掉了。)

3.3 层次聚类的实验过程

聚类的过程非常简单,因为都是可视化操作。可视化操作的图标都在左侧栏里,都可以找到。

(1)建立FILE,点选FILE图标,拖动放置画布上。

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

打开FILE,可以读取TAB数据,选中所要读取的文件(已经制作好的TAB数据文件)

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

读取后,需要显示数据,然后选择DATA栏目里的第二行第一个,Data Table图标,拖放至画布中,然后从FILE图标的右侧引出一根线,可以连接Data Table。

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

则在Paint Data里可以显示数据了,显示情况如下。

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

同时注意,在显示的时候,是看不到Order的属性,但是如果是class属性,默认会是灰色的,自己试试就知道了。

看到上图左下角有一个commit on any change是用于修改数据后,重新保存提交,重新运行的操作按钮。不要选上钩,因为"不选钩"的操作就是每一步操作如果影响了数据,立刻就会投入到后续生产线(这里我将整个聚类的完整过程比喻成生产线),为避免牵一发动全身。建议不要勾上,使用手动提交的方式,便于生产线根据人的意志去调节调试。

(2)由于我们的主题是层次聚类,但是层次聚类之前需要计算距离。因此接下来,将Paint Data送入距离计算模块,选择不带任何标记的纯粹的三角形状的Distance(在Unsupervised里有纯粹三角形的Distance)。

下图因为我已经做了实验,就不重头一个一个拖放了,就指出下面红色框内的为distance模块。同时,从Data Table图标引出一条线接上Distance。

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

双击点开Data Table图标,弹出的菜单左下角点击send selections。这样数据就被送入到distance了。在distance中可以选择距离公式,默认是欧式距离。

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

如果你需要更换公式,可以在Distance Metric一栏,选择完其他的公式,点击commit,然后再由Data Table送入数据,重新计算。

请注意,发送数据(send selection)是需要你选择数据的,即可以使用鼠标拉选EXCEL那样。如果你发送全部数据,也应该是需要手动选择的,如果数据太多,不想鼠标拉选,可以像下图一样,下图红框处,双击即可全选,然后发送数据即可。如果你发送数据(send selection)没有任何反应,很有可能就是你没有选择数据。没有选择数据,送出去是空数据。

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

(3)然后是层次聚类,在Unsupervised栏目的第二行第三个,选择层次聚类图标,然后拖放至白布上。从distance图标引出一根线,连接层次聚类的图标。

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

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

当把数据送过去后,如果数据很多的话,可以看到distance图标在环形缓冲,这个显示效果做的很赞(上图是如果数据很多的情况,distance环形缓冲的示意)。打开层次聚类后,发现生成了系谱树。

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

上图右侧是阈值,拖动阈值阀门,可以显示不同的聚类数目。

上图左侧三个红框,分别指距离准则,属性显示,标注额外属性。

第一个,距离准则,有如下的选择。

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

这几个选择从上到下分别是最小距离,平均距离,最小方差距离,最大距离。(想学习具体方法,可以参看百度文库,文档贡献网友627004473的上传文档《聚类分析PDF》,在第29页)

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

一般序列计算距离还是选择类平均法比较法,因此选择它average linkage。

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

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

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

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

(4)层次聚类结束后,需要把数据导出,则分别拖放selected data和save,如下图所示。

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

请注意,你的selected data是空白的,请双击层次聚类的图标,在弹出的菜单左下角,点击commit,提交你的操作变化。这样内部程序发现变化,随即将数据传入selected data。然后你可按照自己的属性去提取对应的数据。如下图所示,我按照Order编号所在的聚类类号,保存我想要的数据,同时我还知道聚类划分的数据属于原集合的第几条数据。由于在层次聚类的界面,有一个append cluster ID之前介绍过了,勾选上,则在selected data中会多出一个类号的属性。下图中HierarCluster是我在层次聚类的图中,append cluser ID命名新增所致。

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

save的图标则在上图的上图中,用于存储数据。首先在上图的基础上,产生规则,如下图所示。

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

在上图中,定义HierarCluster属于Cluster1的样本,点击add,在规则区就产生了样本,data out区域也注明了样本数和特征数。此时把save图标拖出,回过来将select data打开,勾选(active)想要的数据样本,点击commit提交,就会传到save里。最后双击SAVE图标,在弹出的的菜单中,再保存数据即可,如下图所示。

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

3.4 本实验的不足

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

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

本实验的特色特点在于:

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

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

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

非常热切地希望和期盼有一起使用的朋友,一起讨论,一起交流,如果有前辈指导就更好了!我的工作邮箱和github都挂在博客上,有兴趣的可以联系。


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

如果读者亲愿意的话,可以小额打赏我,感谢您的打赏。您的打赏是我的动力,非常感激。

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

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

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