我正在尝试编写一个小型的机器学习库,与此同时,我想创建一个方便的界面来管理库中模型的参数。
我应该强调,这是一个编程练习,因此我的方法可能不太理想,因此我选择了它们进行工作以练习使用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"))
}
}
类来模仿某些原始变量(Parameter
,int
等),但是我也希望我能够将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协议的理解不够充分,无法在这里分辨出什么地方。