繁体   English   中英

在MATLAB中修改决策树的精度

[英]modify precision of a decision tree in 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 ,它与tree相同,但CutPoint已舍入。

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

此类的对象无法通过调用构造函数来创建。 使用FITRTREE通过将树适合训练数据来创建RegressionTree对象。

因此,这种方法也不起作用。 然后,我尝试在类的层次结构中更进一步,以查看是否可以使用这些方法来完成该方法,然后向下扩展它,这也是(我无法找到的)可能性。

我的建议:

看起来Mathworks在确保我们不篡改结果树的过程中花了很大的力气。 因此,我的基本建议是不使用此方法。 但是,可以通过以下几种方式完成此操作:

  • 如果您键入例如edit RegressionTree ,似乎所有用于构建树的代码都可用,因此您应该能够找到将结果树设置为private ,然后可以将其更改为public

  • 如果您不打算更改现有的Matlab代码,那么Kota Hara可以自己实现二进制回归树的实现,您可以尝试一下。

  • 最后的建议是自己实施,并指出您不需要编写一种非常通用的方法即可解决问题。 这样可以是任何语言。

如开始时所说,我希望有人比我幸运,尽管我对此表示高度怀疑,因为看来Mathworks在阻止您使用它方面已经做了很多工作-也许有漏洞利用,但我不知道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM