机器学习库中的Python描述符协议

时间:2019-01-04 18:57:59

标签: python

我正在尝试编写一个小型的机器学习库,与此同时,我想创建一个方便的界面来管理库中模型的参数。

我应该强调,这是一个编程练习,因此我的方法可能不太理想,因此我选择了它们进行工作以练习使用python的周期性特征。

我想实现connector.withSessionDo { session => val res = session.execute("SELECT k,o,token(k) as t FROM keys.t1") import scala.collection.JavaConversions._ for (row <- res) { println(row.getLong("t")) } } 类来模仿某些原始变量(Parameterint等),但是我也希望我能够将float识别为Parameter类,以及与即时问题无关的其他一些功能。

这是我到目前为止编写的代码:

Parameter

class Parameter(): def __init__(self, name, default=None, type_=None): self.name = name self.value = default if type_: self.type = type_ elif default: self.type = type(default) else: self.type = None def __get__(self, owner, instance): return self.value def __set__(self, owner, value): if type(value) == self.type: self.value = value else: raise TypeError(f"Hyperparameter {self.name} has type {self.type} but tried to set it to {type(value)}") def __str__(self): return f"{self.name}: {self.value}" def __repr__(self): return f"<{self}>" class Model(): @property def parameters(self): properties = [ getattr(self,x) for x in dir(self) if not x.startswith("__") and x != 'parameters'] return [x for x in properties if isinstance(x,Parameter)] class LinearRegression(Model): slope = Parameter("slope",type_=float) intercept = Parameter("intercept",type_=float) 目前缺少大多数功能,但是我想在继续之前得到Model。 我使用以下代码测试了此代码,并希望两个print语句都可以输出此列表Parameter,但是两个语句都可以打印一个空列表。

[<intercept: None>, <slope: None>]

我想我对Desprator协议的理解不够充分,无法在这里分辨出什么地方。

0 个答案:

没有答案