(本文会用到的所有代码都在这里)
由于决策树的生成算法中会用到各种定义下的信息量的计算,所以我们应该先把这些计算信息量相关的算法实现出来。注意到这些算法同样是在不断地进行计数工作,所以我们同样需要尽量尝试利用好上一章讲述过的 bincount 方法。由于我们是在决策树模型中调用这些算法的,所以数据预处理应该交由决策树来做、这里就只需要专注于算法本身。值得一提的是,这一套算法不仅能够应用在决策树中,在遇到任何其它需要计算信息量的场合时都能够进行应用
首先实现其基本结构:
|
|
接下来就需要定义计算不确定性的两个函数。由于一个 Cluster 只接受一份数据,所以其实总的不确定性只用计算一次:
|
|
然后就需要定义计算和的函数。从算法公式可以看出它们具有形式一致性,所以我们可以把它们的实现整合在一起:
|
|
注意:如果仅仅是为了获得总的条件不确定性、是不用将划分后数据的各个部分的条件不确定记录下来的;之所以我们把它记录下来、是因为在决策树生成的过程里会用到这个中间变量。我们会在后面讲解决策树结构时进行相应的说明
最后需要定义计算信息增益的函数。我们将会实现涉及过的三种定义方法,而且由于它们同样具有形式一致性、所以它们的实现同样可以整合在一起:
|
|
考虑到二类问题的特殊性,我们需要定义专门处理二类问题的、计算信息增益相关的函数。它们大部分和以上定义的函数没有区别、代码也有大量重复,只是它会多传进一个代表二分标准的参数。为简洁,我们略去上文已经给出过的注释
|
|
定义计算二类问题信息增益的函数时,只需将之前定义过的、计算信息增益的函数中计算条件不确定性的函数替换成计算二类问题条件不确定性的函数即可