在MATLAB中修改决策树的精度

我使用fitrtree创建了一个回归树

我想采取CutPoint等参数并降低精度,如下所示:

tree.CutPoint=round(tree.CutPoint,5);

但我不能这样做,因为CutPoint被设置为只读,我想要修改它或者创建一个与这个基本相同的树,但是要进行这些修改.遗憾的是,文档仅通过fitrtree函数显示构造函数.是否有可能做到这一点?如果是的话,怎么样?

最佳答案 这只是部分暗示性的解决方案.我希望其他人能提出更好的解决方案.

无效的解决方案:

通常,每当出现这样的问题时,(繁琐)解决方案是找到类的构造函数,然后给构造函数提供所有字段,包括你的round(tree.CutPoint,5)作为CutPoint,即这样的东西

NewTree = RegressionTree('X',tree.X,'Y',tree.Y,...,'CutPoint',round(tree.CutPoint,5),...)

理论上应该创建一个新树,NewTree与树相同,除了CutPoint已被舍入.

但是,查看构造函数的文档(或帮助中心)

An object of this class cannot be created by calling the constructor. Use FITRTREE to create a RegressionTree object by fitting the tree to training data.

所以这种方法也行不通.然后我尝试在类的层次结构中进一步研究,看看是否可以用这些方法做到这一点然后向下发展,这也不是(我能找到的)可能的.

我的建议:

似乎Mathworks已经花了很长时间来确保我们不会篡改生成的树.因此,我的基本建议是不使用这种方法.但是,这可以通过以下几种方式完成:

>似乎所有用于构建树的代码都可用,如果您输入例如编辑RegressionTree,因此您应该能够找到结果树设置为私有的点,然后可以将其更改为public.
>如果您不想更改现有的Matlab代码,那么Kota Hara已经自己实现了binary regression trees,您可以试试.
>最后一个建议是自己实现它,并指出你不需要编写一个非常通用的方法来解决你的问题.这可以是任何语言.

正如一开始所说,我希望有人比我更幸运,虽然我高度怀疑它似乎Mathworks已经做了很多工作来阻止你 – 也许有一个漏洞,但我不知道.

点赞