Я пытаюсь реализовать класс для функции градиентного спуска для многомерной линейной регрессии. Я хочу построить функцию стоимости в зависимости от количества итераций.
Я пытаюсь записать каждое значение итерации в массиве итераций и значение функции стоимости для каждой итерации в массиве затрат. Однако, когда я запускаю код, я получаю сообщение об ошибке, в котором говорится, что у моего класса Gradient Descent нет 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'
Что-то не так с моей инициализацией? Или есть более простой способ, чтобы я мог записать итерации и стоимость, чтобы я мог построить это?