我继承了从sklearn.ensemble导入的随机森林分类器
,我试图打印我的新估计:
class my_rf(RandomForestClassifier):
def __str__(self):
return "foo_" + RandomForestClassifier.__str__(self)
foo_my_rf代码
我还尝试:
class my_rf(RandomForestClassifier):
def __str__(self):
return "foo_" + super(RandomForestClassifier, self).__str__()
与相同的结果。预期是类似于sk学默认行为的东西:
>>> a = RandomForestClassifier() >>> print a RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini', max_depth=None, max_features='auto', max_leaf_nodes=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1, oob_score=False, random_state=None, verbose=0, warm_start=False) >>>
这也是我使用打印a.\uuu str\uuuu()
时的结果。
我错过了什么?谢谢。
与如何更改Python类的字符串表示有关?
在RandomForestClassifier
中,和
\uuuuuu str\uuuu
查找从中调用它们的实例的类的名称(self
)。您应该直接引用超类的名称。
更新这就是你如何获得你想要的输出,尽管我不明白,你为什么想要这样的东西。有一个原因,为什么
R随机森林分类器
的__str__
和__repr__
返回一个类的实际名称。这样,您可以ava
来恢复对象。不管怎样,
In [1]: from sklearn.ensemble import RandomForestClassifier
In [2]: class my_rf(RandomForestClassifier):
def __str__(self):
superclass_name = RandomForestClassifier.__name__
return "foo_" + superclass_name + "(" + RandomForestClassifier.__str__(self).split("(", 1)[1]
In [3]: forest = my_rf()
In [4]: print forest
foo_RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini', max_depth=None,
max_features='auto', max_leaf_nodes=None, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=10,
n_jobs=1, oob_score=False, random_state=None, verbose=0,
warm_start=False)
更新2:重写
\uuuuu init\uuuu
时,您不会得到任何参数,因为在超类\uuuu str\uuuuu
和\uuuu repr\uuuu
中实现了扫描传递给的参数列表。通过运行以下代码,您可以清楚地看到它:
In [5]: class my_rf(RandomForestClassifier):
def __init__(self, *args, **kwargs):
RandomForestClassifier.__init__(self, *args, **kwargs)
def __str__(self):
superclass_name = RandomForestClassifier.__name__
return "foo_" + superclass_name + "(" + RandomForestClassifier.__str__(self).split("(", 1)[1]
In [6]: forest = my_rf()
In [7]: print forest
...
RuntimeError: scikit-learn estimators should always specify their parameters in the signature of their __init__ (no varargs). <class '__main__.my_rf'> with constructor (<self>, *args, **kwargs) doesn't follow this convention.
问题内容: 有一个简单的程序代码。在构造函数中,没有扩展到超类的调用,我不明白在这种情况下会发生什么? 问题答案: 没有显式扩展另一个类的每个类都隐式扩展。因此,只需调用Object的no-arg构造函数。 请注意,此显式调用是不必要的,因为编译器会为您添加它。当您要使用参数调用超类构造函数时,只需在构造函数中添加调用。
问题内容: 我正在尝试将MySQL数据库从Amazon EC2复制到RDS: 我成功使用以下命令将数据库的一个放入我的根文件夹中: 然后,我尝试将此.sql文件传输到新的RDS数据库中: 不幸的是,我收到以下错误消息: 我尝试了多种方式,但是当我尝试这样做时也会遇到错误。键入也不起作用。 我是mysql的初学者,所以很抱歉遇到这样一个简单的问题。有什么想法吗? 问题答案: 根据http://get
问题内容: 您能帮忙检查一下为什么doFilter没有被调用吗 web.xml: 类签名: 调用http:// localhost:8080 / hello / world时 返回404 ,我在doFilter处设置了断点,看来doFilter没有被调用?(我尝试了tomcat 6.0.18、6.0.29,jdk1.6) 问题答案: 在以下情况下将不会调用该过滤器: 过滤器类在类路径中丢失和/或不
我试图在EclipseIDE中使用Java编写一个插件。我必须在类中扩展JavaPlugin,但它说它不存在,我需要用它创建一个新类。我试着手动导入JavaPlugin,结果发现它不是一个包。 我试过导入org。巴基特。插件。JAVAJavaPlugin,但这似乎不起作用 现在应该是JConsolePlugin吗?当我悬停在问题上时,它要么说“创建类‘JavaPlugin’要么说“更改为JCons
我有两个服务类和一个存储库类。当我尝试将一个服务bean自动连接到另一个服务bean时,一个bean会被注入。但是当我尝试调用该方法时,它会显示。请帮帮我。过去3天我一直坚持这样做。 我的第一堂服务课: 我的第二个服务类别: 我的存储库类: 我已经尝试了一切(例如
问题内容: 我有一个自动运行git clone /pull的脚本(这实际上发生在jenkinsCI中,但我的问题更笼统)。远程git服务器基于HTTPS。带有git客户端的计算机具有不稳定的DSL Internet连接,因此有时会重新连接并更改IP地址,从而丢失所有现有连接。当git客户端运行时连接失败时,客户端将永远不会成功,但也不会因超时而失败,因此我的脚本会挂断。 我想设置客户端,使其在一段