如何在梯度下降类中初始化代价和迭代数组

2024-04-26 09:36:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想实现一个多元线性回归的梯度下降函数类。我想根据迭代次数绘制成本函数

我试图记录迭代数组中的每个迭代值,以及成本数组中每个迭代的成本函数值。然而,当我运行代码时,我得到一个错误,说我的梯度下降类没有costArray或iterationArray,尽管我已经在init类中初始化了这两个类

class GradientDescent():
    def __init__(self, learningRate=0.1, tolerance=0.02, iterations=500):
        self._learningRate = learningRate
        self._tolerance = tolerance
        self._iterations = iterations
        self._thetas = None
        self._iterationArray = []
        self._costArray = []    

    def fit(self, xs, ys):
        num_examples, num_features = np.shape(xs)
        self._thetas = np.ones(num_features)
        xs_transposed = xs.transpose()
        for i in range(self._iterations):
            self._iterationArray.append(i)
            diffs = np.dot(xs,self._thetas) - ys
            cost = np.sum(diffs**2) / (2*num_examples)
            self._costArray.append(cost)            
            gradient = np.dot(xs_transposed, diffs) / num_examples
            self._thetas = self._thetas-self._learningRate*gradient

            if cost < self._tolerance:
                return self._thetas

        return self._thetas

当我试图使用“gd”作为渐变下降对象,通过以下命令绘制成本与迭代次数的关系图时:

plt.plot(gd.iterationArray,gd.costArray)

我得到以下错误:

AttributeError: 'GradientDescent' object has no attribute 'iterationArray'

我的初始化有问题吗?或者有没有更简单的方法来记录迭代次数和成本,这样我就可以绘制它了


Tags: 函数selfnp绘制次数toleranceexamplesnum
1条回答
网友
1楼 · 发布于 2024-04-26 09:36:40

试试这个plt.plot(gd._iterationArray,gd._costArray)。您错过了下划线(\u)。它应该是gd._iterationArray而不是gd.iterationArray

你不希望一个单独的列表来存储你的迭代,因为你已经知道了。所以你可以试试这个plt.plot(list(range(iterations)), gd._costArray)

相关问题 更多 >