虎克的博客

Enthusiasm Biogeography-Biodiversity Informatics-Data Sciences

解读IUCN濒危物种评估工具CAT分析结果

| Comments

黑色实线:最小多边形(minimum convex polygon) ,代表Extent of Occurrence (EOO)

红色网格:Area of Occupancy (AOO)

蓝色圆圈:利用Rapoport’s mean propinquity technique所定义的亚居群

短蓝色线:

长蓝色线:

   original link:
   <a href='http://Apiaceae.github.io/blog/2009/04/27/%E8%A7%A3%E8%AF%BBIUCN%E6%BF%92%E5%8D%B1%E7%89%A9%E7%A7%8D%E8%AF%84%E4%BC%B0%E5%B7%A5%E5%85%B7CAT%E5%88%86%E6%9E%90%E7%BB%93%E6%9E%9C/'>http://Apiaceae.github.io/blog/2009/04/27/%E8%A7%A3%E8%AF%BBIUCN%E6%BF%92%E5%8D%B1%E7%89%A9%E7%A7%8D%E8%AF%84%E4%BC%B0%E5%B7%A5%E5%85%B7CAT%E5%88%86%E6%9E%90%E7%BB%93%E6%9E%9C/</a><br/>
   &nbsp;written by <a href='http://Apiaceae.github.io'>Hooker</a>
   &nbsp;posted at <a href='http://Apiaceae.github.io'>http://Apiaceae.github.io</a>
   </p>

最大熵模型-Maxent介绍(二)

| Comments

数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型

2006年11月16日 上午 06:50:00

发表者:Google 研究员,吴军
我们上次谈到用最大熵模型可以将各种信息综合在一起。我们留下一个问题没有回答,就是如何构造最大熵模型。我们已经所有的最大熵模型都是指数函数的形式,现在只需要确定指数函数的参数就可以了,这个过程称为模型的训练。
最原始的最大熵模型的训练方法是一种称为通用迭代算法 GIS(generalized iterative scaling) 的迭代 算法。GIS 的原理并不复杂,大致可以概括为以下几个步骤:
1. 假定第零次迭代的初始模型为等概率的均匀分布。
2. 用第 N 次迭代的模型来估算每种信息特征在训练数据中的分布,如果超过了实际的,就把相应的模型参数变小;否则,将它们便大。
3. 重复步骤 2 直到收敛。
GIS 最早是由 Darroch 和 Ratcliff 在七十年代提出的。但是,这两人没有能对这种算法的物理含义进行很好地解释。后来是由数学家希萨(Csiszar)解释清楚的,因此,人们在谈到这个算法时,总是同时引用 Darroch 和Ratcliff 以及希萨的两篇论文。GIS 算法每次迭代的时间都很长,需要迭代很多次才能收敛,而且不太稳定,即使在 64 位计算机上都会出现溢出。因此,在实际应用中很少有人真正使用 GIS。大家只是通过它来了解最大熵模型的算法。
八十年代,很有天才的孪生兄弟的达拉皮垂(Della Pietra)在 IBM 对 GIS 算法进行了两方面的改进,提出了改进迭代算法 IIS(improved iterative scaling)。这使得最大熵模型的训练时间缩短了一到两个数量级。这样最大熵模型才有可能变得实用。即使如此,在当时也只有 IBM 有条件是用最大熵模型。
由于最大熵模型在数学上十分完美,对科学家们有很大的诱惑力,因此不少研究者试图把自己的问题用一个类似最大熵的近似模型去套。谁知这一近似,最大熵模型就变得不完美了,结果可想而知,比打补丁的凑合的方法也好不了多少。于是,不少热心人又放弃了这种方法。第一个在实际信息处理应用中验证了最大熵模型的优势的,是宾夕法尼亚大学马库斯的另一个高徒原 IBM 现微软的研究员拉纳帕提(Adwait Ratnaparkhi)。拉纳帕提的聪明之处在于他没有对最大熵模型进行近似,而是找到了几个最适合用最大熵模型、而计算量相对不太大的自然语言处理问题,比如词性标注和句法分析。拉纳帕提成功地将上下文信息、词性(名词、动词和形容词等)、句子成分(主谓宾)通过最大熵模型结合起来,做出了当时世界上最好的词性标识系统和句法分析器。拉纳帕提的论文发表后让人们耳目一新。拉纳帕提的词性标注系统,至今仍然是使用单一方法最好的系统。科学家们从拉纳帕提的成就中,又看到了用最大熵模型解决复杂的文字信息处理的希望。
但是,最大熵模型的计算量仍然是个拦路虎。我在学校时花了很长时间考虑如何简化最大熵模型的计算量。终于有一天,我对我的导师说,我发现一种数学变换,可以将大部分最大熵模型的训练时间在 IIS 的基础上减少两个数量级。我在黑板上推导了一个多小时,他没有找出我的推导中的任何破绽,接着他又回去想了两天,然后告诉我我的算法是对的。从此,我们就建造了一些很大的最大熵模型。这些模型比修修补补的凑合的方法好不少。即使在我找到了快速训练算法以后,为了训练一个包含上下文信息,主题信息和语法信息的文法模型(language model),我并行使用了 20 台当时最快的 SUN 工作站,仍然计算了三个月。由此可见最大熵模型的复杂的一面。最大熵模型快速算法的实现很复杂,到今天为止,世界上能有效实现这些算法的人也不到一百人。有兴趣实现一个最大熵模型的读者可以阅读我的论文
最大熵模型,可以说是集简与繁于一体,形式简单,实现复杂。值得一提的是,在Google的很多产品中,比如机器翻译,都直接或间接地用到了最大熵模型。
讲到这里,读者也许会问,当年最早改进最大熵模型算法的达拉皮垂兄弟这些年难道没有做任何事吗?他们在九十年代初贾里尼克离开 IBM 后,也退出了学术界,而到在金融界大显身手。他们两人和很多 IBM 语音识别的同事一同到了一家当时还不大,但现在是世界上最成功对冲基金(hedge fund)公司——文艺复兴技术公司 (Renaissance Technologies)。我们知道,决定股票涨落的因素可能有几十甚至上百种,而最大熵方法恰恰能找到一个同时满足成千上万种不同条件的模型。达拉皮垂兄弟等科学家在那里,用于最大熵模型和其他一些先进的数学工具对股票预测,获得了巨大的成功。从该基金 1988 年创立至今,它的净回报率高达平均每年 34%。也就是说,如果 1988 年你在该基金投入一块钱,今天你能得到 200 块钱。这个业绩,远远超过股神巴菲特的旗舰公司伯克夏哈撒韦(Berkshire Hathaway)。同期,伯克夏哈撒韦的总回报是 16 倍。
值得一提的是,信息处理的很多数学手段,包括隐含马尔可夫模型、子波变换、贝叶斯网络等等,在华尔街多有直接的应用。由此可见,数学模型的作用。

原文链接:http://www.googlechinablog.com/2006/11/blog-post.html

   original link:
   <a href='http://Apiaceae.github.io/blog/2009/04/27/%E6%9C%80%E5%A4%A7%E7%86%B5%E6%A8%A1%E5%9E%8B-Maxent%E4%BB%8B%E7%BB%8D%28%E4%BA%8C%29/'>http://Apiaceae.github.io/blog/2009/04/27/%E6%9C%80%E5%A4%A7%E7%86%B5%E6%A8%A1%E5%9E%8B-Maxent%E4%BB%8B%E7%BB%8D%28%E4%BA%8C%29/</a><br/>
   &nbsp;written by <a href='http://Apiaceae.github.io'>Hooker</a>
   &nbsp;posted at <a href='http://Apiaceae.github.io'>http://Apiaceae.github.io</a>
   </p>

最大熵模型-Maxent的介绍(一)

| Comments

数学之美 系列十六(上) 不要把所有的鸡蛋放在一个篮子里 – 谈谈最大熵模型

2006年10月8日 上午 07:27:00

发表者:Google 研究员,吴军
[我们在投资时常常讲不要把所有的鸡蛋放在一个篮子里,这样可以降低风险。在信息处理中,这个原理同样适用。在数学上,这个原理称为最大熵原理(the maximum entropy principle)。这是一个非常有意思的题目,但是把它讲清楚要用两个系列的篇幅。]
前段时间,Google 中国研究院的刘骏总监谈到在网络搜索排名中,用到的信息有上百种。更普遍地讲,在自然语言处理中,我们常常知道各种各样的但是又不完全确定的信息,我们需要用一个统一的模型将这些信息综合起来。如何综合得好,是一门很大的学问。
让我们看一个拼音转汉字的简单的例子。假如输入的拼音是"wang-xiao-bo",利用语言模型,根据有限的上下文(比如前两个词),我们能给出两个最常见的名字“王小波”和“王晓波”。至于要唯一确定是哪个名字就难了,即使利用较长的上下文也做不到。当然,我们知道如果通篇文章是介绍文学的,作家王小波的可能性就较大;而在讨论两岸关系时,台湾学者王晓波的可能性会较大。在上面的例子中,我们只需要综合两类不同的信息,即主题信息和上下文信息。虽然有不少凑合的办法,比如:分成成千上万种的不同的主题单独处理,或者对每种信息的作用加权平均等等,但都不能准确而圆满地解决问题,这样好比以前我们谈到的行星运动模型中的小圆套大圆打补丁的方法。在很多应用中,我们需要综合几十甚至上百种不同的信息,这种小圆套大圆的方法显然行不通。
数学上最漂亮的办法是最大熵(maximum entropy)模型,它相当于行星运动的椭圆模型。“最大熵”这个名词听起来很深奥,但是它的原理很简单,我们每天都在用。说白了,就是要保留全部的不确定性,将风险降到最小。让我们来看一个实际例子。
有一次,我去 AT&T 实验室作关于最大熵模型的报告,我带去了一个色子。我问听众“每个面朝上的概率分别是多少”,所有人都说是等概率,即各点的概率均为1/6。这种猜测当然是对的。我问听众们为什么,得到的回答是一致的:对这个“一无所知”的色子,假定它每一个朝上概率均等是最安全的做法。(你不应该主观假设它象韦小宝的色子一样灌了铅。)从投资的角度看,就是风险最小的做法。从信息论的角度讲,就是保留了最大的不确定性,也就是说让熵达到最大。接着,我又告诉听众,我的这个色子被我特殊处理过,已知四点朝上的概率是三分之一,在这种情况下,每个面朝上的概率是多少?这次,大部分人认为除去四点的概率是 1/3,其余的均是 2/15,也就是说已知的条件(四点概率为 1/3)必须满足,而对其余各点的概率因为仍然无从知道,因此只好认为它们均等。注意,在猜测这两种不同情况下的概率分布时,大家都没有添加任何主观的假设,诸如四点的反面一定是三点等等。(事实上,有的色子四点反面不是三点而是一点。)这种基于直觉的猜测之所以准确,是因为它恰好符合了最大熵原理。
最大熵原理指出,当我们需要对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知的条件,而对未知的情况不要做任何主观假设。(不做主观假设这点很重要。)在这种情况下,概率分布最均匀,预测的风险最小。因为这时概率分布的信息熵最大,所以人们称这种模型叫“最大熵模型”。我们常说,不要把所有的鸡蛋放在一个篮子里,其实就是最大熵原理的一个朴素的说法,因为当我们遇到不确定性时,就要保留各种可能性。
回到我们刚才谈到的拼音转汉字的例子,我们已知两种信息,第一,根据语言模型,wang-xiao-bo 可以被转换成王晓波和王小波;第二,根据主题,王小波是作家,《黄金时代》的作者等等,而王晓波是台湾研究两岸关系的学者。因此,我们就可以建立一个最大熵模型,同时满足这两种信息。现在的问题是,这样一个模型是否存在。匈牙利著名数学家、信息论最高奖香农奖得主希萨(Csiszar)证明,对任何一组不自相矛盾的信息,这个最大熵模型不仅存在,而且是唯一的。而且它们都有同一个非常简单的形式 — 指数函数。下面公式是根据上下文(前两个词)和主题预测下一个词的最大熵模型,其中 w3 是要预测的词(王晓波或者王小波)w1 和 w2 是它的前两个字(比如说它们分别是“出版”,和“”),也就是其上下文的一个大致估计,subject 表示主题。

我们看到,在上面的公式中,有几个参数 lambda 和 Z ,他们需要通过观测数据训练出来。
最大熵模型在形式上是最漂亮的统计模型,而在实现上是最复杂的模型之一。我们在将下一个系列中介绍如何训练最大熵模型的诸多参数,以及最大熵模型在自然语言处理和金融方面很多有趣的应用。

原文链接:http://www.googlechinablog.com/2006/10/blog-post.html

   original link:
   <a href='http://Apiaceae.github.io/blog/2009/04/27/%E6%9C%80%E5%A4%A7%E7%86%B5%E6%A8%A1%E5%9E%8B-Maxent%E7%9A%84%E4%BB%8B%E7%BB%8D%28%E4%B8%80%29/'>http://Apiaceae.github.io/blog/2009/04/27/%E6%9C%80%E5%A4%A7%E7%86%B5%E6%A8%A1%E5%9E%8B-Maxent%E7%9A%84%E4%BB%8B%E7%BB%8D%28%E4%B8%80%29/</a><br/>
   &nbsp;written by <a href='http://Apiaceae.github.io'>Hooker</a>
   &nbsp;posted at <a href='http://Apiaceae.github.io'>http://Apiaceae.github.io</a>
   </p>

DotNetNuke C#版本的下载

| Comments

新建一个文件夹,取名为DNN,右键选择SVN Checkout,然后在弹出的对话框填入要下载的源代码的地址:http://cs-dotnetnuke.google.com/svn/tags

 

   original link:
   <a href='http://Apiaceae.github.io/blog/2009/04/27/DotNetNuke+C%23%E7%89%88%E6%9C%AC%E7%9A%84%E4%B8%8B%E8%BD%BD/'>http://Apiaceae.github.io/blog/2009/04/27/DotNetNuke+C%23%E7%89%88%E6%9C%AC%E7%9A%84%E4%B8%8B%E8%BD%BD/</a><br/>
   &nbsp;written by <a href='http://Apiaceae.github.io'>Hooker</a>
   &nbsp;posted at <a href='http://Apiaceae.github.io'>http://Apiaceae.github.io</a>
   </p>

根据地名查找经纬度两个实用网站

| Comments

植物标本的地标化过程中,有很多信息需要手工查询进行确认,比如根据非常老的小地名例如:“平利药妇山”来查找这个地点的经纬度,并且方便的将查询到的经纬度拷贝到自己的文档或者是数据库中。下面两个网站就实现了这个功能,不过需要输入汉语拼音的地名。

1、MapBuilder

http://www.mapbuilder.net/

2、Global Mapper in Discovery of Life

http://www.discoverlife.org/mp/20m?&amp;act=make_map

   original link:
   <a href='http://Apiaceae.github.io/blog/2009/04/27/%E6%A0%B9%E6%8D%AE%E5%9C%B0%E5%90%8D%E6%9F%A5%E6%89%BE%E7%BB%8F%E7%BA%AC%E5%BA%A6%E4%B8%A4%E4%B8%AA%E5%AE%9E%E7%94%A8%E7%BD%91%E7%AB%99/'>http://Apiaceae.github.io/blog/2009/04/27/%E6%A0%B9%E6%8D%AE%E5%9C%B0%E5%90%8D%E6%9F%A5%E6%89%BE%E7%BB%8F%E7%BA%AC%E5%BA%A6%E4%B8%A4%E4%B8%AA%E5%AE%9E%E7%94%A8%E7%BD%91%E7%AB%99/</a><br/>
   &nbsp;written by <a href='http://Apiaceae.github.io'>Hooker</a>
   &nbsp;posted at <a href='http://Apiaceae.github.io'>http://Apiaceae.github.io</a>
   </p>

物种2000数据库结构SQL脚本

| Comments

   1:  # SQL Manager 2007 for MySQL 4.3.2.3

   2:  # ——————————————————–

   3:  # Host     : localhost

   4:  # Port     : 3306

   5:  # Database : sp2000cn

   6:   

   7:   

   8:  /!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT /;

   9:  /!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS /;

  10:  /!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION /;

  11:  /!40101 SET NAMES utf8 /;

  12:   

  13:  SET FOREIGN_KEY_CHECKS=0;

  14:   

  15:  DROP DATABASE IF EXISTS sp2000cn;

  16:   

  17:  CREATE DATABASE sp2000cn

  18:      CHARACTER SET ‘utf8’

  19:      COLLATE ‘utf8_unicode_ci’;

  20:   

  21:  USE sp2000cn;

  22:   

  23:  #

  24:  # Structure for the common_names table : 

  25:  #

  26:   

  27:  CREATE TABLE common_names (

  28:    record_id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,

  29:    name_code VARCHAR(50) COLLATE latin1_swedish_ci NOT NULL DEFAULT ‘’,

  30:    common_name VARCHAR(500) COLLATE latin1_swedish_ci NOT NULL DEFAULT ‘’,

  31:    <span class="kwrd">language</span> VARCHAR(21) COLLATE latin1_swedish_ci NOT NULL DEFAULT ‘’,

  32:    country VARCHAR(44) COLLATE latin1_swedish_ci NOT NULL DEFAULT ‘’,

  33:    reference_id INTEGER(10) DEFAULT ‘0’,

  34:    database_id INTEGER(10) NOT NULL DEFAULT ‘0’,

  35:    is_infraspecies INTEGER(1) NOT NULL DEFAULT ‘0’,

  36:    PRIMARY KEY (record_id),

  37:    KEY common_name (common_name),

  38:    KEY <span class="kwrd">language</span> (<span class="kwrd">language</span>, common_name, name_code),

  39:    KEY common_name_2 (common_name, name_code, database_id),

  40:    KEY name_code (name_code),

  41:    KEY common_name_3 (common_name, database_id)

  42:   

  43:  )ENGINE=MyISAM

  44:  AUTO_INCREMENT=1661048 CHARACTER SET ‘latin1’ COLLATE ‘latin1_swedish_ci’;

  45:   

  46:  #

  47:  # Structure for the databases table : 

  48:  #

  49:   

  50:  CREATE TABLE databases (

  51:    database_name_displayed VARCHAR(100) COLLATE latin1_swedish_ci DEFAULT NULL,

  52:    record_id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,

  53:    database_name VARCHAR(150) COLLATE latin1_swedish_ci DEFAULT NULL,

  54:    database_full_name VARCHAR(100) COLLATE latin1_swedish_ci NOT NULL DEFAULT ‘’,

  55:    web_site LONGTEXT,

  56:    organization VARCHAR(255) COLLATE latin1_swedish_ci DEFAULT NULL,

  57:    

   original link:
   <a href='http://Apiaceae.github.io/blog/2009/04/26/%E7%89%A9%E7%A7%8D2000%E6%95%B0%E6%8D%AE%E5%BA%93%E7%BB%93%E6%9E%84SQL%E8%84%9A%E6%9C%AC/'>http://Apiaceae.github.io/blog/2009/04/26/%E7%89%A9%E7%A7%8D2000%E6%95%B0%E6%8D%AE%E5%BA%93%E7%BB%93%E6%9E%84SQL%E8%84%9A%E6%9C%AC/</a><br/>
   &nbsp;written by <a href='http://Apiaceae.github.io'>Hooker</a>
   &nbsp;posted at <a href='http://Apiaceae.github.io'>http://Apiaceae.github.io</a>
   </p>

50个提高C#编程水平的要诀

| Comments

1.总是用属性 (Property) 来代替可访问的数据成员
2.在 readonly 和 const 之间,优先使用 readonly
3.在 as 和 强制类型转换之间,优先使用 as 操作符
4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if
5.总是为自定义类重载 ToString 方法
6.区别值类型和引用类型
7.使用不可变的值类型(Immutable Atomic Value Types)
8.在值类型中,确保0是一个合法的数据
9.理解 ReferenceEquals, static Equals, instance Equals 和 比较运算符(==)之间的关系
10.理解 GetHashCode方法的缺陷
11.在编写循环时,优先使用 foreach.
12.在定义变量的时候就将其初始化
13.使用静态构造函数来初始化静态成员变量
14.用多个构造函数时,利用构造函数链
15.使用using和try/finally来处理资源的释放
16.尽量避免产生资源垃圾
17.尽量避免使用装箱(boxing)和拆箱(unboxing)
18.实现类的 Dispose 方法
19.在接口和继承(Inheritance)之间,优先使用接口(interface)
20.区分接口和重载(overrides)
21.用委托(delegate)来实现回调(callback)
22.用事件(event)来定义外部接口
23.避免返回类内部成员的引用
24.使用元数据来控制程序
25.优先使用可序列化(serilizable)类型
26.对需要排序的对象实现IComparable和IComparer接口
27.避免使用 ICloneable接口
28.避免使用类型转换操作符
29.只有当基类加入了与派生类中现有的函数名称相同的函数时,才需要使用 new 操作符
30.尽量使用 CLS-Compliant
31.尽量编写短少,简单的函数
32.尽量编写比较小的程序集(assembly)
33.限定类型的可见性(visibility)
34.编写大粒度的 web API
35.在使用事件时,优先继承基类事件,而不是重新创建一个事件
36.多使用 framework 的运行时调试 (DEBUG, TRACE, EVENTLOG等)
37.使用.net标准的配置机制
38.使用并且在类中支持.net的数据绑定功能 (Data Binding)
39.使用.net的验证机制 (Validation)
40.根据你的需求选择正确的集合类(Collection)
41.在自定义结构中使用 DataSet
42.利用属性(Attributes)
43.不要过度使用反射(Reflection)
44.创建完整的,应用程序特定的异常
45.尽可能多的考虑程序可能出现的异常,并作出处理
46.尽可能少的使用 Interop
47.尽量使用安全代码 (safe code)
48.多多学习、使用外部工具和资源
49.准备使用 C# 2.0
50.学习 ECMA 标准

名称:生物多样性的一把钥匙

| Comments

 

Besides biodiversity, the one thing all the talks given here have in common is scientific names. These names form the essential language, the means we use to communicate about biodiversity. To avoid a Tower of Babel, a common system of nomenclature is required: a system that is effective and efficient (and at minimal cost). Presented below are the essential aspects of this language for biodiversity and where we are in respect to their implementation.

The long-term conservation of biodiversity can only be achieved through the Instituto Nacional de Biodiversidad (INBio) approach of "save it," "characterize it" and "use it sustainably" (sensu Dan Janzen). Characterization requires that we have a language to communicate about biodiversity: a way of describing it, so that we all know what we are talking about and that we are talking about the same things. How do we characterize biodiversity? The first step is to name its components. Biodiversity is divisible into three levels: ecological, taxonomic, and genetic. Of these levels, taxonomic diversity is critical because taxa are the units that contain genetic diversity and are the units that make up ecological diversity. As taxa are the core of biodiversity, names for taxa are the most critical component of any language of biodiversity.

AN UNIVERSAL LANGUAGE OF BIODIVERSITY

What are names? Names are tags. Tags are words, short sequences of symbols used in place of something complex, which would require many more words to describe. Hence, tags save time and space. Instead of a long description, we use a short tag. A scientific name differs from a common name in that the scientific name is a unique tag. In other languages, there may be multiple tags for the same thing. Imagine the various words in English that are used to describe Homo sapiens. In computer (database) jargon, data elements that are used to index information are termed keys, and keys that are unique are called primary keys. Scientific names are primary keys. The word "key"; has another meaning in English, which is, "something that unlocks something." Think of scientific names as those critical keys that unlock biosystematic information, all that we know about living organisms. To reiterate: scientific names are tags that replace descriptions of objects or, more precisely, concepts based on objects (specimens). Scientific names are unique, there being only one scientific name for a particular concept, and each concept has only one scientific name.

Scientific names are more than just primary keys to information. They represent hypotheses. To most systematists, this is a trivial characteristic that is usually forgotten and thereby becomes a source of confusion later. To most users, this is an unknown characteristic that prevents them from obtaining the full value from scientific names. If a scientific name were only a unique key used for storing and retrieving information, it would be just like a social security number. Homo sapiens is another unique key used to store and retrieve information about man, but that key also places the information about man into a hierarchical classification. Hierarchical classifications allow for the storage at each node of the hierarchy of the information common to the subordinate nodes. Hence, redundant data, which would be spread throughout a nonhierarchical system, are eliminated. Biological classifications, however, do more than just hierarchically store information. Given that one accepts a single common (unique) history for life and that our biological classifications reflect this common history in their hierarchical arrangement, then biological classifications allow for prediction: To predict that some information stored at a lower hierarchical node may belong to a higher node, that is, is common to all members of the more inclusive group. These predictions take the form of: If some members of a group share a characteristic that is unknown for other members of the same group, then that characteristic is likely to be common to all members of the group. So scientific names are tags, unique keys, hierarchical nodes, and phylogenetic hypotheses. Thus systematists pack a lot of information into their names and users can get a lot from them.

Scientific names are hypotheses, not proven facts. Systematists may and frequently do disagree about hypotheses. Hypotheses, which in systematics range from what is a character to what is the classification that best reflects the history of life, are always prone to falsification, and, hence, change. Disagreements about classification can arise from differences in paradigm and/or information. Systematists use different approaches to construct classifications, such as cladistic versus phylogenetic versus phenetic methods. Given the same set of data that underlies a given hierarchy, cladists can derive classifications different from those derived by the phenetists (Fig. 1). Even among cladists, there can be differences as to the rank (genus, family, order, etc.) and thereby the hierarchical groups used. These are disagreements based on paradigm. There can be disagreement about the hypotheses that underlie the information used to construct the classifications, such as what are the characters. And disagreement can arise among systematists because they use different information. While disagreements will affect the ability to predict, they need not affect the ability to retrieve information. The desirable attribute that must be preserved to ensure complete access to information across multiple classifications is uniqueness. Our scientific nomenclature must guarantee that any scientific name that is used in any classification is unique among all classifications. This can be assured by having two primary keys. Unfortunately, having two keys increases the overhead of our information systems. So most systematists and all users want to avoid this problem by mandating that there be only one classification. Although in theory there is only one correct classification as there was only one history of life, in reality there have been multiple classifications in the past, there may be multiple classifications in use today, and there will be multiple classifications in the future. That is the price of scientific progress, of the increase in our knowledge of the world. If information is to be retrieved across time, that is, if we want to extract information stored under obsolete classifications, and if we want to avoid dictating "the correct" classification, then we need a nomenclatural system that supports two unique keys.

The two keys for our language of biodiversity are the valid name and the original name. The valid name is the correct name for a concept within a classification; the original name is the valid name in the classification in which it was proposed. Valid names may be different among classifications, but the original name is invariant across classifications (Table 1). Valid names are the best names to use as they provide the full value of scientific names. These are the names that provide a basis for prediction. The original name is useful only for information retrieval across multiple classifications. Although valid and or

   original link:
   <a href='http://Apiaceae.github.io/blog/2009/04/23/%E5%90%8D%E7%A7%B0%EF%BC%9A%E7%94%9F%E7%89%A9%E5%A4%9A%E6%A0%B7%E6%80%A7%E7%9A%84%E4%B8%80%E6%8A%8A%E9%92%A5%E5%8C%99/'>http://Apiaceae.github.io/blog/2009/04/23/%E5%90%8D%E7%A7%B0%EF%BC%9A%E7%94%9F%E7%89%A9%E5%A4%9A%E6%A0%B7%E6%80%A7%E7%9A%84%E4%B8%80%E6%8A%8A%E9%92%A5%E5%8C%99/</a><br/>
   &nbsp;written by <a href='http://Apiaceae.github.io'>Hooker</a>
   &nbsp;posted at <a href='http://Apiaceae.github.io'>http://Apiaceae.github.io</a>
   </p>