Как я могу хранить / кэшировать значения из методов в классе для последующего использования в других методах того же класса? - PullRequest
0 голосов
/ 10 декабря 2018

Я пишу класс линейной регрессии, который подгоняет модель к некоторым данным, аналогично реализации scikit-learn .

Как только модель подойдет, я хочу иметь возможностьвызовите predict() метод без необходимости передавать веса обученной модели в качестве параметра методу.То, что у меня есть, находится ниже

class LinReg:
    """ Fit a linear model to data"""
    def __init__(self):
        ....

    def fit(self, x, y):
        """Fit a model to data x with targets y"""
        ...
        # model weights w are calculated here
        return w

    def predict(self, x, w):
        """Predict the target variable of the data x using trained weights w"""
        ...
        # predicted y values, y_pred, are calulated here
        return y_pred

. Обученные веса w возвращаются из fit(), поэтому пользователь может сохранить их в виде переменной для последующей передачи в метод predict().

lm = LinReg()
w = lm.fit(x,y)
y_pred = lm.predict(x_new, w) # don't want to pass w here

Однако я не хочу возвращать w из fit();Я хочу как-то сохранить w после того, как он будет вычислен в fit(), чтобы пользователю не приходилось заботиться о весах, но также о том, чтобы веса можно было легко использовать в методе predict().

Как мне это сделать?Есть ли питонский или стандартный ОО способ сделать это?

1 Ответ

0 голосов
/ 10 декабря 2018

Я бы сохранил его как свойство уровня экземпляра:

def __init__(self):
    self.w = None  # define the prop here...
    ....

def fit(self, x, y):
    """Fit a model to data x with targets y"""
    ...
    # model weights w are calculated here
    self.w = your_computed_value

def predict(self, x):
    """Predict the target variable of the data x using trained weights w"""
    ...
    # predicted y values, y_pred, are calulated here
    do_something_here(self.w)
    return y_pred
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...