Я все еще изучаю различные применения методов класса. У меня есть код, который выполняет линейную регрессию. Поэтому я решил создать общий класс под названием LinRegression и использовать более конкретные методы, которые вызывают класс, основанный на типе линейной регрессии (например, для регрессии используется один трейлинг-день или 5 трейлинг-дней и т. Д.).Каков правильный способ вызова и использования этого класса? Также есть TypeError: missing 1 required positional argument: 'self'
В любом случае, вот оно. Я чувствую, что я делаю что-то неправильно здесь в отношении того, как я определил класс и вызываю класс. Это из файла main.py:
lin_reg = LinRegression(daily_vol_result)
lin_reg.one_day_trailing()
И это из файла linear_regression (только показывая один день задний случай):
class LinRegression:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression as lr
from sklearn.metrics import mean_squared_error as mse
from SEplot import se_plot as SE
def __init__(self, daily_vol_result):
"""
:param daily_vol_result: result from def daily_vol_calc
"""
import numpy as np
data = np.asarray(daily_vol_result['Volatility_Daily'])
self.data = data
@classmethod
def one_day_trailing(cls, self):
"""
Compute one day trailing volatility
:return: Mean Squared error, slope: b, and y-int: c
"""
x = self.data[:-1]
y = self.data[1:]
x = x.reshape(len(x), 1)
cls.lr.fit(x, y)
b = cls.lr.coef_[0]
c = cls.lr.intercept_
y_fit1 = b * x + c
MSE1 = cls.mse(y, y_fit1)
print("MSE1 is " + str(MSE1))
print("intercept is " + str(c))
print("slope is " + str(b))
cls.SE(y, y_fit1)
return MSE1, b, c
Что я «думать» я делаю что когда я вызываю lin_reg, у меня уже есть daily_vol_result, то lin_reg.one_day_trailing() должен просто выполнить one_day_trailing def, используя self, определенную в init.
Однако, я получаю TypeError: one_day_trailing() отсутствует 1 обязательный позиционный аргумент: 'self'. Некоторая другая информация, переменная, daily_vol_result - это DataFrame, и я конвертирую в np-массив, чтобы выполнить линейную регрессию с помощью sklearn.
Кроме того, когда я пытался испортить код для работы, у меня была дополнительная проблема, когда строка: lr.fit (x, y) дала мне ошибку типа без позиционного arg для y. Я проверил существование и длину y, чтобы убедиться, что он соответствует x и он проверяет. Я довольно смущен тем, как я проходил только один арг.
Ваши идеи и советы приветствуются, спасибо!