我最近接触过提升树算法并为多维输出实现了一个小的回归树类y1 .. yo取决于ob特征x1 .. xn。
实际上,我读过几篇关于提升和弗里德曼随机梯度增强的优点的文章,但是我有点实施这个,因为所有的数学方程对我来说都很难 - 需要更多'编码风格'。
首先:我没有在任何地方找到关于该主题的实际例子。我知道有第三方库可以很好地适应,但我想了解那里发生了什么,因此我自己实现; - )
好的,假设我的回归树产生了增强实现所需的结果,现在我的问题是:
该算法构建了一个回归函数,该函数由n个树组成,其中一棵树的结果是下一棵树的输入的一部分。由于这是一种迭代方法,它首先猜测目标功能(预测=截距+ x1 * T1 + x2 * T2 + ... + xnTn),其中Tn是位置n和x处回归树的预测是预测的权重。
伪代码:
使用o目标维度(列)的平均值初始化截距
用n行,o列初始化矩阵“h values”(第i次迭代的当前预测结果)
对于迭代= 1到n(树的数量)
3.1创建一个梯度矩阵(n行,o cols),并用当前预测结果函数减去当前训练数据来初始化每一行
3.2选择给定大小的0到n之间的索引的随机子集(例如,所有数据的50%)
3.3获取渐变行作为y的输入和相应的x值并设置新的回归树
3.4训练树并将其添加到结果函数
3.5使用新行值+ = Prediciton * LearningRate
逐行修改“h values”- 结束迭代
4返回结果函数
首先,您是否看到我的理解错误?如果我采用样本数据,它对单个树表现很好(5%误差,深度为10,每个节点至少有3个节点),我得到的误差约为50% - 图表几乎是一个平均值线
其次,我不确定,我是否得到了“渐变”的观点,因为我只使用预测 - 结果函数的当前值而不是我到处读到的“真实”丢失函数。
第三也是最后一点,我对第2.5点也不太确定,这就是我要做的一切吗?
任何帮助或提示都会很棒。
提前多多感谢
艋舺