KNIME 模块( Transformation 类型模块之一 列处理模块集合 之 Binning)

*欢迎关注公众号 数据分析指北*数据分析指北 — KNIME 模块( Transformation 类型模块之一 列处理模块集合 之 Binning)

历史回看:
模块基础
基础(Data Access 类型模块之二 Database 模块集合)
基础( Data Access 类型模块之三 JSON、XML、Web 与 MongoDB)

*Photo by Paweł Czerwiński on Unsplash*微信公众号:数据分析指北

Transformation 类型模块上几节我们讲了 KNIME 模块的一些基础知识,以及了解了Data Access 类型模块从各种各样的数据源获取数据的方法。下面我们重点看一下 KNIME 中的 Transformation 模块 — 转换模块。转换这个词的含义外延很广,甚至可以说所有的数据分析其实都是一个 Transformation 转换过程。我们这里限定转换仅仅指数据从原始数据源出来之后,到投喂给数学模型之前,要经历的一系列处理过程。转换过程包含且不限于数据的清理( clean, 将不用的数据去除 ),数据的减少 (reduce, 将很多数据浓缩为少量数据 ),数据的扩展或生成( expand、generate,从现有数据组合生成新的数据 ) 等多个步骤。我们在 KNIME 这个环境中,认为 Transformation 系列模块主要包含了 Manipulation 模块集合,以及关于时间序列( time series )的模块集合。当然还有一些基础的循环分支模块,以及一些其他特定的数据类型的操作模块也应该属于 Transformation 模块,为清晰起见,我们将在后面单独描述这部分内容。我们先看 Manipulation 模块。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 (Apply) 模块有两个输入端口,其中一个接收原始数据,另外一个接收 PMML 模型,比如前面输出的分桶边界,就可以当作这个 Apply 模块的输入。具体使用如下图所示。

*Auto-binner(Apply)模块使用*[重点:✨;难度:✨] Numeric Binner 就是一种自己设置桶边界的分类方法。具体设置界面如下,增加桶,设置桶名、桶的上下界,就可以了。

*Numeric Binner 模块配置*[重点:✨✨✨;难度:✨] Binner (Dictionary) 也是一种自己设置桶边界的分类方法,和 Numeric Binner 不同的是,这个模块除了原始数据做为输入以外,需要另外一个分桶的规则表,在这个表中设置桶的上界、下界以及桶名,然后再在 Binner 的设置界面中配置即可。虽然这个模块和上一个模块功能类似,但这个模块可维护性比较强 — 甚至它可以从另外的数据源中获取分桶的规则,如果有很多的分桶规则,那么上一个的可维护性就比较差了。对于以上几种分桶方法,可以关注公众号”数据分析指北”,回复”作业”,获取示例进行练习。

*分桶的规则表*

*Binner(Dictionary) 模块配置*[重点:✨;难度:✨✨✨] CAIM Binner,以及 CAIM Applier 这两个模块使用了 CAIM 离散化方法,除了分桶的数据外,还需要指定对应的类别数据(但不需要指定分成几桶),它会根据类别的内部独立性(the class interdependency measure)来进行分类。具体可自行了解一下 CAIM 算法。除了这几种简单的对一个指标进行分桶的方式以外,还有一些其他高级算法也可以处理分桶问题。比如可以使用一些聚类算法来分桶,一般的聚类算法是根据多个指标进行分类,贴标签(桶名),如果其中的多个指标降维成一个指标,那么就是这里的分桶问题。同样,对于聚类算法来说,也会分为需要知道多少桶的分桶算法,以及不需要知道多少桶的分桶算法。

回头聊

反馈,转发或赞赏?