我用firtree创建了一个回归树
我想取一些参数,例如CutPoint,并降低精度,如下所示:

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

但是我不能这样做,因为CutPoint被设置为只读,我想修改它,或者创建一个与此树基本相同但经过这些修改的树不幸的是,文档只显示通过firtree函数的构造函数有可能这样做吗如果是,怎么做?

最佳答案

这只是一个部分暗示性的解决方案我希望有人能想出更好的解决办法。
非功能解决方案:
通常,每当出现这样的问题时,(乏味的)解决方案是找到类的构造函数,然后将包括round(tree.CutPoint,5)在内的所有字段都赋给构造函数为CutPoint,即如下所示

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

理论上应该创建一个新的树,NewTree它与tree相同,除了已经被舍入的CutPoint
但是,在构造器的文档(或帮助中心)中可以看到
无法通过调用构造函数创建此类的对象使用firtree通过将树与训练数据拟合来创建回归树对象。
所以这种方法也行不通然后我尝试在类的层次结构中进一步向上,看看是否可以使用这些方法来实现它,然后向下发展,这(我发现的)也不可能。
我的建议:
似乎Mathworks在确保我们不会篡改生成的树方面做了大量工作因此,我的基本建议是不要使用这种方法但是,这可以通过几种方式实现:
如果您键入例如edit RegressionTree的话,似乎所有用于构建树的代码都是可用的,因此您应该能够找到结果树设置为private的点,然后可以将其更改为public
如果你没有改变现有的Matlab代码,那么Kota Hara已经实现了自己的binary regression trees的实现,你可以尝试一下。
最后一个建议是自己实现它,注意不需要编写一个非常通用的方法,只需要编写一个解决问题的方法这可以是任何语言。
正如一开始所说的,我希望有人比我幸运,尽管我非常怀疑,因为看起来Mathworks已经做了很多工作,使你远离它-也许有一个漏洞,但我不知道。

09-26 06:06