Dec-08-2017, 05:09 PM
I am trying to implement a gradient descent algorithm for linear regression. I am using the attached data. My algorithm is shown below:
import numpy as np import csv import matplotlib.pyplot as plt path = '' with open(path + 'ex1data1.txt', 'r') as f: results = list(csv.reader(f)) population = [] profit = [] for i in results: population.append(float(i[0])) profit.append(float(i[1])) def gradientDescent(xData, yData, a, iterations, theta0, theta1): J = [] it = [] for i in xrange(iterations): print i cost0 = 0 cost1 = 0 for j in xrange(len(xData)): cost0 += (theta0 + theta1*xData[j] - yData[j]) ** 2 cost1 += (theta0 + theta1*xData[j] - yData[j]) ** 2 * xData[j] tmp0 = theta0 - a*cost0 tmp1 = theta1 - a*cost1 theta0 = tmp0 theta1 = tmp1 J.append(cost1) it.append(i) return theta0, theta1, J, it result = gradientDescent(population, profit, 0.000000005, 8000, 1, 2) print 'y = %s + %sx' % (result[0], result[1]) plt.plot(result[3], result[2]) plt.show() x = np.arange(0, 30, 1) y = result[0] + result[1]*x plt.plot(x, y) plt.plot(population, profit, 'rx') plt.show()