如何制作一个继承自 Sklearn 的 RandomForestRegressor 的自定义类?



我想从sklearn中取一个回归算法,比如RandomForestRegressor:

from sklearn import ensemble
clf = ensemble.RandomForestRegressor(max_depth=None)
class model(clf):
def __init__(self):
clf.__init__(self)
def inSampleAccuracy(self):
print('"accuracy is calculated"')
testModel = model()

我得到一个警告:

FutureWarning: Pass criterion=(RandomForestRegressor(),), max_depth={'__module__': '__main__', '__qualname__': 'model', '__init__': <function model.__init__ at 0x7f2304dd67b8>, 'inSampleAccuracy': <function model.inSampleAccuracy at 0x7f2304d6d6a8>} as keyword args. From version 1.0 (renaming of 0.25) passing these as positional arguments will result in an error
"will result in an error", FutureWarning)
Traceback (most recent call last):

最后一行第12行出现错误。

TypeError: 'RandomForestRegressor' object is not callable

我尝试了一些变化:

from sklearn import ensemble
clf = ensemble.RandomForestRegressor(max_depth=None)
class model(clf):
def __init__(self):
super().__init__(self)
def inSampleAccuracy(self):
print('"accuracy is calculated"')
testModel = model()

这个更简单的例子

from sklearn import ensemble
clf = ensemble.RandomForestRegressor(max_depth=None)
class model(clf):
def inSampleAccuracy(self):
print('"accuracy is calculated"')
testModel = model()

其他两种情况的错误是相同的。

我不确定这是因为我不了解继承还是因为我不充分了解sklearn。

我的动机很简单,我认为拥有一个具有sklearn.ensemble.RandomForestRegressor提供的所有功能的回归工具,并具有一些额外的方法和封装数据,是我试图解决的特定问题的唯一方法,这将是很整洁的

As @Dr。史努比和胡安帕。arrivillaga指出,在我的问题中给出的例子中,我错误地试图从一个对象的实例中继承一个类。

从python模块对象继承的语法看起来更像这样:

from sklearn import ensemble
clf = ensemble.RandomForestRegressor
class model(clf):    
def __init__(self):
super().__init__()
在我的例子中,我想保留大多数继承类的功能,我可以将对象参数添加到这个新类中。这样的:
from sklearn import ensemble
clf = ensemble.RandomForestRegressor
class model(clf):    
def __init__(self, max_depth):
super().__init__()
self.max_depth = max_depth

def inSampleAccuracy(self):
print('"accuracy is calculated"')

myModel = model(max_depth=1000)
print(myModel.get_params())
myModel.inSampleAccuracy()

输出:

{"max_depth":1000}计算精度">

结果对象的行为似乎是预期的(我将在代码主体中实验这个对象,如果它不太正确,我会很快回到这里),但这种方法对我来说似乎有点粗糙。我敢打赌,有一种方法可以规定,创建继承类的实例所需的所有属性都可以在编写对象实例时定义。当创建对象的实例时,显式地写出我希望更改的参数似乎有点繁琐。

但是感谢你的评论,这似乎是一种很酷的使用python库中的类的方法。

相关内容

  • 没有找到相关文章

最新更新