矩阵真的是一个很神奇的东西。
你能想象决策树的推理过程也可以用矩阵乘法来表示吗?
决策树推理是一个迭代的过程。我们通过评估某一层中特定节点的条件来遍历决策树,直到到达叶子节点。
接下来就让我们看看是如何将决策树的推理过程转换成矩阵操作的。
结果:
1.使得推理速度大大加快,因为矩阵操作可以进行大规模并行化。
2.这些操作可以加载到GPU上,实现更快的推理。
欢迎加入自动驾驶实战群
步骤
考虑下面有5个特征的二分类数据集。
通过在数据集上拟合一个决策树,最终得到如下结构的树。
符号
在开始之前,我们先假设:
● m→ 数据集中的总特征(上述数据集中有5个特征)。
● e→ 树中的总评估节点(上述树中有4个蓝色节点)。
● l→ 树中的总叶子节点(有5个绿色节点)。
● c→ 数据集中的总类别(上述数据集中有2个类别)。
从决策树到矩阵
转换过程的核心思想是推导出能够捕获决策树结构的五个矩阵(A,B,C,D,E)。
让我们一个一个理解。
#1)矩阵A
该矩阵捕获特征和评估节点(上述蓝色节点)之间的关系。
如果列中的相应节点评估了行中的相应特征,则设置为‘1’。例如,在我们的决策树中,‘Node0’ 评估 ‘Feature2’。
因此,相应的条目将为“1”,而其他所有条目将为“0”。
填充整个矩阵,得到最终的矩阵A。
#2)矩阵B
矩阵 B 对应每个节点的阈值。因此,它的形状是 1×e。
#3)矩阵C
矩阵 C 捕获评估节点和叶子节点(上述绿色节点)之间的关系。
1:如果列中的相应叶节点位于行中对应评估节点的左子树。
-1:如果列中的相应叶节点位于行中对应评估节点的右子树。
0:如果相应的叶节点和评估节点之间没有直接联系。
例如,“叶节点4”位于“评估节点0”和“评估节点1”的左子树中。因此,对应的值将为1。
继续填充矩阵,最终得到矩阵C。
#4)矩阵D
向量 𝐷 的每个元素是矩阵𝐶每一列中非负元素的总和。
#5)矩阵E
矩阵E将叶子节点映射成最终的类别标签,维度是l×c。
如果叶节点将样本分类为“类1”,则对应的条目将为1,其他条目将为0。例如,“叶节点4”输出“类1”,因此第一行的对应条目将为 (1, 0)。
继续填充矩阵,最终得到矩阵E。
现在我们就将决策树转换成了下面5个矩阵。
通过矩阵进行推断
假设输入一个五维特征向量X。
整个推理过程就可以通过下面矩阵操作来完成。
XA<B :
结果乘C:
结果与D比较:
最后,乘E:
最终预测结果是:类别1。
受益于矩阵操作的并行化和GPU,推理时间大大缩小。
通过这篇文章,了解具体的转换方法不是最重要的,而是要培养自己的数学思想,如果还没有触动你,那我建议你再看看下面这几篇文章。
在手书动画系列中,我们将许多AI中的操作都转换成矩阵乘法,例如,MLP、卷积、自注意力、Transformer等等。
最后别忘了,帮忙点“在看”。
您的点赞,在看,是我创作的动力。
AiFighing是全网第一且唯一以代码、项目的形式讲解自动驾驶感知方向的关键技术。
长按扫描下面二维码,加入知识星球。