跳到主要内容

Transformation 转换类型节点之一 列处理节点 之 Binning 分桶节点

Transformation 转换类型节点

上几节我们讲了 KNIME 节点的一些基础知识,以及了解了Data Access 数据访问类型节点从各种各样的数据源获取数据的方法。下面我们重点看一下 KNIME 中的 Transformation 节点 -- 转换节点。转换这个词的含义外延很广,甚至可以说所有的数据分析其实都是一个 Transformation 转换过程。我们这里限定转换仅仅指数据从原始数据源出来之后,到投喂给数学模型之前,要经历的一系列处理过程。转换过程包含且不限于数据的清理( clean, 将不用的数据去除 ),数据的减少 (reduce, 将很多数据浓缩为少量数据 ),数据的扩展或生成( expand、generate,从现有数据组合生成新的数据 ) 等多个步骤。

我们在 KNIME 这个环境中,认为 Transformation 转换系列节点主要包含了 Manipulation 操作节点集合,以及关于时间序列( time series )的节点集合。当然还有一些基础的循环分支节点,以及一些其他特定的数据类型的操作节点也应该属于 Transformation 节点,为清晰起见,我们将在后面单独描述这部分内容。我们先看 Manipulation 节点。

Manipulation 操作节点集合简述

KNIME 的 Manipulation 节点集合 KNIME 的 Manipulation 节点集合

Manipulation 节点集合中主要包括4方面的内容,Column 列、Row 行、Table 表、PMML 模型相关,从名字可以看出,它们分别对应不同的操作对象。其中有一些基础节点我们在第二章的基础数据操作部分已经做过串讲,还记得我们学习过的关于行处理和列处理的不同吗?忘记的话回去复习一下。

Column 列处理类型节点

Binning 分桶节点

bin 是箱子或桶的意思,而 binning 就是把数据分桶的操作,而 binner 就是分桶的工具和方法。使用数学术语来讲,binning 就是将连续数据离散化的过程。比如气温、身高、价格这类特征在某个区间内具有较多或无数个值,我们将其分桶离散化,比如对于各种数值的气温,我们可以将其变换为气温高、气温适中、气温低三种,或是将其分类为更细的区间。这样做的好处显而易见,这个指标可以变得更容易理解。同样,从数学模型的角度来说,这样做也可以增加模型的鲁棒性,对比直接处理数值型数据的模型来说,这样的模型也相对计算量较小。当然,这样做也不是没有缺点,将连续数据离散化之后会有一定的信息丢失,在具体实践中是否分桶以及如何分桶需要权衡利弊。

先撇开 KNIME 中的 binning 节点不提,我们先想下可能有哪些分桶方案。比如有 1、2、6、10 这四个数据,我们想将它们划分为两个桶。第一种直观的方案就是取得数据的中点做为两个桶的分界线,即 最小值 + (最大值-最小值)/2= 5.5,所有小于等于 5.5 的数据放入第一个桶中,大于 5.5 的桶放入第二个桶中;第二种直观的方案就是,看一共有多少个数,除以 2,然后从小到大排列,两个桶各放一半数就可以了。对于上面的数据,那就是小于等于 2 的放一个桶,大于 2 的放另外一个桶。实质上这两种方法前一个是和均值有关的方法,后一个是和中位数有关的方法。除了这两种方法之外,你还可以自定义边界,设计分桶方法。对于 Column 中的 binning 节点下面节点,其实就是这几种方法。

Auto-Binner 自动分桶节点中,对应于前面所说的第一种方法的分桶方法叫做根据 width (宽度)来分桶。如图设置分桶的个数、方法,以及桶的名字。如果想使用我们上面所说的第二种分桶方法,那么只需要把 Equal 选项改成 frequency (频率)就可以了。除此之外就是一些细节选项,比如分桶的边界是不是要强制整数,是不是直接用桶的名字把桶的内容替代了,以及具体的边界数字形式(在 Number Format Settings 标签页中)等。按照我们的配置,得到的分桶结果如图所示。除了分桶结果之外,Auto-Binner 在另外一个端口输出的是 PMML 模型,也就是最后计算出来的分桶边界模型,供其他节点使用。

Auto-binner 配置 Auto-binner 配置

Auto-binner 结果 Auto-binner 结果

Auto-Binner (Apply) 自动分桶(应用)节点有两个输入端口,其中一个接收原始数据,另外一个接收 PMML 模型,比如前面输出的分桶边界模型,就可以当作这个 Apply 节点的输入。具体使用如下图所示。

Auto-binner(Apply)节点使用 Auto-binner(Apply)节点使用

Numeric Binner 数字分桶节点就是一种自己设置桶边界的分类方法。具体设置界面如下,增加桶,设置桶名、桶的上下边界,就可以了。

Numeric Binner 节点配置 Numeric Binner 节点配置

Binner (Dictionary) (按字典方式)分桶节点也是一种自己设置桶边界的分类方法,和 Numeric Binner 不同的是,这个节点除了原始数据做为输入以外,需要另外一个分桶的规则表,在这个表中设置桶的上界、下界以及桶名,然后再在 Binner 的设置界面中配置即可。虽然这个节点和上一个节点功能类似,但这个节点可维护性比较强 -- 甚至它可以从另外的数据源中获取分桶的规则,如果有很多的分桶规则, 且会经常变化,那么上一个分桶节点的可维护性就比较差了。

分桶的规则表 分桶的规则表

Binner(Dictionary) 节点配置 Binner(Dictionary) 节点配置

CAIM Binner CAIM 算法分桶节点,以及 CAIM Applier 这两个节点使用了 CAIM 离散化方法,除了分桶的数据外,还需要指定对应的类别数据(但不需要指定分成几桶),它会根据类别的内部独立性(the class interdependency measure)来进行分类。具体可自行了解一下 CAIM 算法。

除了这几种简单的对一个指标进行分桶的方式以外,还有一些其他高级算法也可以处理分桶问题。比如可以使用机器学习中的一些聚类算法来分桶,一般的聚类算法是根据多个指标进行分类,贴标签(桶名),如果其中的多个指标降维成一个指标,那么就是这里的分桶问题。同样,对于聚类算法来说,也会分为需要知道多少桶的分桶算法,以及不需要知道多少桶的分桶算法。