将模型应用于数据 - 从子 class(模型)继承或访问根 class(数据)的属性
Applying models to data - Inheriting or accessing the attributes of a root class (data) from a sub-class (model)
我正在为几个不同的数据集拟合多个模型。我想将数据集的方法和属性(例如 X、y、trainTestSplit() 等)存储在 'Dataset' 对象中,并存储模型的方法和属性(例如 fit()、超参数,分数等)在'Model'对象中,并将'Models'存储在'Datasets'(每个数据集的几个模型)中。
我尝试了几种不同的方法来完成这项工作,包括使用 super() 进行继承;缩进(嵌套)数据集 class 中的模型 class;以及数据集 class 中的函数,模型 class 可以调用这些函数。
这与我来的差不多:
class Dataset :
def __init__(self, X, y, attr) :
self.X = X
self.y = y
self.attr = attr
def trainTestSplit(self, **kwargs):
self.X_train, self.X_test, self.y_train, self.y_test = train_test_split(self.X, self.y, **kwargs)
class Model(Dataset) :
def __init__(self, regressor):
self.reg = regressor
super().__init__(self)
def fit(self):
self.reg.fit(X=self.X_train, y=self.y_train)
def predict(self):
self.yPredict = self.reg.predict(X=self.X_test)
在上面,模型无法访问变量 class,因此 returns 和错误。
如果这可行,我希望执行以下函数调用,例如。
正在创建数据集对象的实例:
dataset_1 = Dataset(X, y, 'string')
将数据拆分为训练集和测试集:
dataset_1.trainTestSplit(test_size=0.3))
创建模型实例,并将其应用于数据集:
dataset_1.svr = Model(SVR(hyperParams))
拟合模型:
dataset_1.svr.fit()
实际上,如果我以正确的方式考虑这个问题,模型 class 的 fit() 方法可以作为 init 的一部分应用, 因此它适合实例化时的数据集。
正在读取训练分数:
dataset_1.svr.training_score_
因为我有这么多数据集,并且要为每个数据集拟合大量模型,以这种方式存储方法和属性似乎很有意义,但我不确定如何实现它。
有什么方法可以实例化一个 class(称之为子 class),这样它就可以继承或访问另一个 class 中包含的属性或对象(比如根 class),因此子 class 作为对象包含在根 class 中?还是我的想法不对?
所以我可能一直在尝试使用 类 字典更适合的地方。
以下似乎完成了我正在尝试做的事情,即将数据集和应用于它的模型的结果存储在一个对象中(其他属性,如 training/CV/test 分数等是仍待添加在下面的答案中)。
如果有人 suggestions/comments 关于如何做得更好,请发表评论。
谢谢。
from sklearn.model_selection import train_test_split
class Dataset(object):
def __init__(self, X, y):
self.X = X
self.y = y
self.models = {}
def add_model(self, model, regressor):
self.models[model] = {}
self.models[model]['reg'] = regressor
regressor.fit(self.X_train, self.y_train)
yPredict = regressor.predict(self.X_test)
self.models[model]['yPredict'] = yPredict
def trainTestSplit(self, **kwargs):
self.X_train, self.X_test, self.y_train, self.y_test = train_test_split(self.X, self.y, **kwargs)
我正在为几个不同的数据集拟合多个模型。我想将数据集的方法和属性(例如 X、y、trainTestSplit() 等)存储在 'Dataset' 对象中,并存储模型的方法和属性(例如 fit()、超参数,分数等)在'Model'对象中,并将'Models'存储在'Datasets'(每个数据集的几个模型)中。
我尝试了几种不同的方法来完成这项工作,包括使用 super() 进行继承;缩进(嵌套)数据集 class 中的模型 class;以及数据集 class 中的函数,模型 class 可以调用这些函数。
这与我来的差不多:
class Dataset :
def __init__(self, X, y, attr) :
self.X = X
self.y = y
self.attr = attr
def trainTestSplit(self, **kwargs):
self.X_train, self.X_test, self.y_train, self.y_test = train_test_split(self.X, self.y, **kwargs)
class Model(Dataset) :
def __init__(self, regressor):
self.reg = regressor
super().__init__(self)
def fit(self):
self.reg.fit(X=self.X_train, y=self.y_train)
def predict(self):
self.yPredict = self.reg.predict(X=self.X_test)
在上面,模型无法访问变量 class,因此 returns 和错误。
如果这可行,我希望执行以下函数调用,例如。
正在创建数据集对象的实例:
dataset_1 = Dataset(X, y, 'string')
将数据拆分为训练集和测试集:
dataset_1.trainTestSplit(test_size=0.3))
创建模型实例,并将其应用于数据集:
dataset_1.svr = Model(SVR(hyperParams))
拟合模型:
dataset_1.svr.fit()
实际上,如果我以正确的方式考虑这个问题,模型 class 的 fit() 方法可以作为 init 的一部分应用, 因此它适合实例化时的数据集。
正在读取训练分数:
dataset_1.svr.training_score_
因为我有这么多数据集,并且要为每个数据集拟合大量模型,以这种方式存储方法和属性似乎很有意义,但我不确定如何实现它。
有什么方法可以实例化一个 class(称之为子 class),这样它就可以继承或访问另一个 class 中包含的属性或对象(比如根 class),因此子 class 作为对象包含在根 class 中?还是我的想法不对?
所以我可能一直在尝试使用 类 字典更适合的地方。
以下似乎完成了我正在尝试做的事情,即将数据集和应用于它的模型的结果存储在一个对象中(其他属性,如 training/CV/test 分数等是仍待添加在下面的答案中)。
如果有人 suggestions/comments 关于如何做得更好,请发表评论。
谢谢。
from sklearn.model_selection import train_test_split
class Dataset(object):
def __init__(self, X, y):
self.X = X
self.y = y
self.models = {}
def add_model(self, model, regressor):
self.models[model] = {}
self.models[model]['reg'] = regressor
regressor.fit(self.X_train, self.y_train)
yPredict = regressor.predict(self.X_test)
self.models[model]['yPredict'] = yPredict
def trainTestSplit(self, **kwargs):
self.X_train, self.X_test, self.y_train, self.y_test = train_test_split(self.X, self.y, **kwargs)