调用和使用此类的正确方法是什么?还有类型错误:缺少 1 个必需的位置参数:"self"



我仍在学习类方法的各种用途。我有一些执行线性回归的代码。因此,我决定制作一个称为Linrefression的通用类,并使用基于线性回归的类型来调用类的更具体的方法(即使用一个落后日或5个落后日等进行回归)。

无论如何,它去了。我觉得我在这里的定义方式并打电话给班级方面做错了。这是来自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,然后使用 init 中的自定义执行one_day_trailing def()。

但是,我得到typeError:one_day_trailing()缺少1所需的位置参数:'self'。其他一些信息,变量,daily_vol_result是一个dataFrame,我将其转换为NP数组以使用Sklearn进行线性回归。

另外,当我尝试将代码弄乱时,我还有一个其他问题,即行:lr.fit(x,y)给了我一个类型错误,而没有位置arg的y。我检查了y的存在和长度,以查看它是否与x匹配并检查。我对我只通过一个arg的方式感到非常困惑。

欢迎您的想法和建议,谢谢!

事实是,您在方法one_day_trailing(cls, self)中使用了错误的self位置。您已经在方法定义中的第二个位置指定了self

如果不传递任何内容并像在第二行代码中一样执行该方法:

lin_reg.one_day_trailing()

类对象self将作为第一个参数传递,因此selfcls参数中传递。因此,one_day_trailing()中的self参数仍未使用。

以下def中的参数互换: -

def one_day_trailing(self, cls):

会更好。但是随后您需要通过cls对象。

请参阅以下问题以了解更多信息:

  • 缺少1所需的位置参数:'self'
  • typeError:Attack()缺少1所需的位置参数:'self'

我发现线性回归软件包的作用就像一个类,因此lr.fit(self,x,y)是它想要的输入。我首先将课程实例化为:

A = lr(), then A.fit(x,y).

我的主文件中有这一行:

ASDF = LinRegression.one_day_trailing(daily_vol_result)

我还发现了一种更通用的产生这些功能的方法。我最终不需要使用@classmethod或@staticmethod

相关内容

  • 没有找到相关文章

最新更新