建模杂谈系列73 模型与规则

说明

有些概念还是要抽象再抽象

把模型视为规则可以更好的组织模型,用于构建更复杂的功能,以下简单的进行讨论。

内容

人类可以直接理解和利用的是简单规则。

规则就是IF ... THEN ... ,这个是可以直接用人类语言表达的逻辑;再往前走一步就是三段论(推理), 类似于 IF A is B and IF B is C THEN A is C这样的。

也可以这么理解规则是「道生一」,推理是「一生二」,大量的自动推理是「二生三」,最终得到的规则库(知识库)就是「三生万物」。

回到规则和模型上,可以说模型是一种复杂的规则,但仍然是一条规则。

人类的思维只能工作在低维区,例如基于年龄的规则, IF Age >=18 Then 1 Else 0。低维空间对于信息的利用非常有限,所以我们使用模型。

以逻辑回归为例(一种广义线性模型),它能用简洁的形式表达复杂的信息。大致可以做如下的一个对比:

类型 变量 组合数
人类直接处理的低维规则 3 64
逻辑回归 10 1,048,576

一般的人类的极限是同时处理3个变量(假设每个变量有4个分层),因此其组合极限是64。对于逻辑回归来说,通常我们可以获得10个有效的建模变量,其决策的组合数大约有100万个,是人类极限的1.6万倍。但是,逻辑回归的结果和简单规则的结果并无本质区别,只是精度更高而已。

P.S 模型并不是越复杂越好,要搭万丈高楼就要有万丈的地基(数据)。否则还不如使用简单模型搭个平房。

模型与规则比较

以上面的比较为例,从形式上,规则可以用64行代码表达(不重不漏的处理所有子空间的决策)。而模型(即使是最简单的逻辑回归)在处理上也复杂的多。逻辑回归算是最“接地气”的模型,其最终的表达形式也可以用规则表示。10个变量可以用40条规则映射分值,再把分值(模型决定了分值)映射为最终决策。性价比还是非常高的。

之所以用逻辑回归是因为这种模型基本上是线性的,可以转化为简单规则的形式来部署。其他的模型可能没有「变量分值」这样的映射,而是直接给出一个结果,其变换和映射只能包在模型对象的内部,存储可能是一个pickle文件。BTW, 业界曾经试图用一种通用的语言来描述模型对于变量的处理过程,也就是PMML。但是个人是在不太喜欢这种方式,事实上也不是所有模型都能够转换为PMML。

理论上如果用代码表达100万个组合,就需要100万行代码,模型做的最重要的事就是通过拟合给每个变量区间确定一个分值,从而避免了大量的显示声明。当然这是要代价的,这就是变换和拟合。

模型即规则

模型用精简的数据公式表达复杂的信息

从上面可以看到,模型可以表达非常丰富的可能空间,而看起来只是一个文件。从数学形式上,大多可以用带有层级的公式来表达,深度神经网络也只是一个特别大的高阶多项式。

模型的输入和规则没有什么不同,都是原始变量,只不过模型的输入变量个数可能会很多。当然像逻辑回归这样的模型通常也就十个变量,最多不会超过20个。

模型的内部蕴含了变量的变换信息,而且可能不止一层。例如逻辑回归就经历了缺失值处理、异常值处理、离散处理、WOE转换几个变换才最终用模型拟合。普通规则可能只需要考虑了离散化。在变量的变换上,模型可能还有一个优势 ,就是自动调整。传统的规则需要人进行一一指定,工作量是很大的,模型可以根据训练的结果自动给出理想的离散化方法/参数。

因此,需要把模型加一层封装,作为对象比较方便使用。

一旦模型封装为对象,也就意味着用起来也就像是一条简单规则。最终整个体系就抽象为了一个规则系统的运行问题,这方面的概念和实现都是比较多的,而规则的复杂性通过模型对象被封装起来。最终在不提高使用成本的前提下,大幅提高系统的复杂问题处理能力。另外,未来基于三段论的基础,结合图算法、图存储的技术可以实现知识发现:这可能是通向强智能的一条靠谱的路。

上一篇:shell 函数


下一篇:数据脱敏