Я подгоняю несколько моделей к нескольким наборам данных. Я хотел бы сохранить методы и атрибуты наборов данных (например, X, y, trainTestSplit () и т. Д.) В объектах «Набор данных» и сохранить методы и атрибуты моделей (например, fit (), гиперпараметры, оценки и т. д.) в объектах «Модель» и сохраните «Модели» в «наборах данных» (несколько моделей для каждого набора данных).
Я пробовал несколько разных способов заставить это работать, включая наследование с использованием super (); выравнивание (вложение) класса Model внутри класса набора данных; и с функциями в классе Dataset, которые могут быть вызваны классом 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)
В приведенном выше примере переменные недоступны для класса Model, поэтому он возвращает и ошибку.
Если бы это сработало, я ожидал бы выполнить следующие вызовы функций, как примеры.
Создание экземпляра объекта набора данных:
dataset_1 = Dataset(X, y, 'string')
Разделение данных на обучающие и тестовые наборы:
dataset_1.trainTestSplit(test_size=0.3))
Создание экземпляра модели и применение его к набору данных:
dataset_1.svr = Model(SVR(hyperParams))
Примерка модели:
dataset_1.svr.fit()
На самом деле, если я правильно подумаю об этом, метод fit () класса Model может быть применен как часть init , так что он подходит для набора данных на конкретизации.
Чтение результатов обучения:
dataset_1.svr.training_score_
Поскольку у меня так много наборов данных, и я буду приспосабливать множество моделей к каждой, сохранение методов и атрибутов таким образом, казалось, имело смысл, но я не уверен, как это реализовать.
Есть ли способ создать экземпляр класса (назовите его подклассом), чтобы он наследовал или имел доступ к атрибутам или объектам, содержащимся в другом классе (скажем, к корневому классу), и поэтому подкласс содержится как объект внутри корневого класса? Или я думаю об этом не так?