Python函数虽然在类中声明但未定义

时间:2017-01-31 09:42:17

标签: python class methods

我在GradientDescent类中声明了一个函数isPrecisied(),并在另一个函数(gd())中调用它。我创建了一个类的实例,然后使用它调用一个函数(b.gd()),其中包含isPrecisied()函数,方式如下

        import numpy as np
        import matplotlib.pyplot as plt

        class GradientDescent:
            def __init__(self,x,y,yhat,alpha=0.01,pre=0.1):
                self.x=x # This is the x array
                self.y=y  # y is the array  
                self.yhat=yhat  # yhat is the array
                self.precision=pre
                self.alpha=alpha

            def isPrecisied(self,e):
                if (np.sum(e)/2)>self.precision:
                    return False
                return True

            def gd(self):
                self.beta=[0.0]*len(self.y)
                error=[]
                while True:
                    for j in range(0,len(self.y),1):
                        temp=self.beta[0]+np.sum(np.multiply(self.beta,self.x))
                        error.append(np.square(self.y[j]-temp))
                    t=isPrecisied(error)
                    print(np.sum(error)/2)
                    if t==False:
                        self.beta=np.subtract(self.beta,self.alpha*np.array(self.beta))
                    else:
                        return self.beta


                #take the average precision by 1/2*summition((y-yhat)^2)

                #B0(t+1) = B0(t) – alpha * error(of individual not combined)


        a = GradientDescent([1,2,3,4,5],[10,20,30,40,50],[11,21,30,38,48])
        b=a.gd()

我收到了错误:

Traceback (most recent call last):

  File "<ipython-input-10-744f30ba0c28>", line 2, in <module>
    b=a.gd()

  File "<ipython-input-9-13f85a04a1e0>", line 23, in gd
    t=isPrecisied(error)

NameError: name 'isPrecisied' is not defined

请让我知道我在哪里犯了错误。

1 个答案:

答案 0 :(得分:0)

你应该改变你的

t=isPrecisied(error)

致电

t=self.isPrecisied(error)

因为你必须总是使用self来调用类方法