我想实现一个多元线性回归的梯度下降函数类。我想根据迭代次数绘制成本函数
我试图记录迭代数组中的每个迭代值,以及成本数组中每个迭代的成本函数值。然而,当我运行代码时,我得到一个错误,说我的梯度下降类没有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'
我的初始化有问题吗?或者有没有更简单的方法来记录迭代次数和成本,这样我就可以绘制它了
试试这个
plt.plot(gd._iterationArray,gd._costArray)
。您错过了下划线(\u)。它应该是gd._iterationArray
而不是gd.iterationArray
你不希望一个单独的列表来存储你的迭代,因为你已经知道了。所以你可以试试这个
plt.plot(list(range(iterations)), gd._costArray)
相关问题 更多 >
编程相关推荐