将模型应用于数据-从子类(模型)继承或访问根类(数据)的属性

时间:2019-05-25 16:31:05

标签: class inheritance attributes parent

我正在将多个模型拟合到几个不同的数据集。我想将数据集的方法和属性(例如X,y,trainTestSplit()等)存储在“数据集”对象中,并存储模型的方法和属性(例如fit(),超参数,分数等等),然后将“模型”存储在“数据集”(每个数据集有多个模型)中。

我尝试了几种不同的方法来完成这项工作,包括使用super()进行继承;在数据集类中缩进(嵌套)模型类;以及Dataset类中的函数,这些函数可以由Model类调用。

这与我来的差不多:

obj

在上面,Model类无法访问变量,因此它会返回并出错。

如果这行得通,我希望可以执行以下函数调用,例如。

创建数据集对象的实例:

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)

将数据拆分为训练集和测试集:

dataset_1 = Dataset(X, y, 'string')

创建模型实例,并将其应用于数据集:

dataset_1.trainTestSplit(test_size=0.3))

拟合模型:

dataset_1.svr = Model(SVR(hyperParams))

实际上,如果我以正确的方式考虑问题,则可以将Model类的fit()方法用作 init 的一部分,以便适合数据集实例化。

阅读训练成绩:

dataset_1.svr.fit()

因为我有这么多的数据集,并且将为每个模型拟合许多模型,所以以这种方式存储方法和属性似乎很有意义,但是我不确定如何实现它。

有没有什么方法可以实例化一个类(称为子类),以便它继承或有权访问另一个类(例如根类)中包含的属性或对象,因此该子类为作为对象包含在根类中?还是我以错误的方式考虑这个问题?

1 个答案:

答案 0 :(得分:0)

所以我可能一直在尝试使用更适合字典的类。

以下内容似乎可以完成我想做的事情,那就是将一个数据集和应用于该数据集的模型结果存储在一个对象中(其他属性(例如训练/简历/测试成绩等)仍在在下面的答案中添加。)

如果有人对如何更好地做到这一点有任何建议/评论,请发表评论。

谢谢。

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)