Как использовать метод для возврата / вычисления атрибута? - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу сделать что-то вроде:

class Model:
    def __init__(self, X, y):
        self.X = X
        self.y = y
        self.X_train = self.split_scale_data(X,y)[0]
        self.X_test = self.split_scale_data(X,y)[1]

    def split_scale_data(self, X, y):
        X_train, X_test, y_train, y_test = train_test_split(X, y)
        scaler = MinMaxScaler()
        X_train_scaled = scaler.fit_transform(X_train)
        X_test_scaled = scaler.transform(X_test)
        return self.X_train, self.X_test

Но я не могу заставить это работать, и я не могу найти никаких примеров в Интернете, где кто-то использует метод для вычисления атрибута. Я получаю ошибку атрибута: объект «Модель» не имеет атрибута «X_train» Я что-то упустил?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Ваш метод split_scale_data возвращает следующее

return self.X_train, self.X_test

, но он должен возвращать локальные переменные этого метода

return X_train, X_test

Кстати, вы также можете изменить свой __init__ метод использовать этот метод как

self.X_train, self.X_test = self.split_scale_data(X,y)
0 голосов
/ 12 февраля 2020

Вы возвращаете атрибуты, которые не определены

return self.X_train, self.X_test

и здесь ошибка. Вы должны изменить его на

return X_train, X_test

Однако для вашего случая использования может быть целесообразно использовать classmethod и оставить __init__ простым.

class Model:
    def __init__(self, X, y, X_train, X_test):
        self.X = X
        self.y = y
        self.X_train = X_train
        self.X_test = X_test

    @classmethod
    def from_data(cls, X, y):
       ...
       return cls(X, y, X_train, X_test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...