Skip to content

Instantly share code, notes, and snippets.

@sarath-soman
Created June 17, 2018 12:25
Show Gist options
  • Save sarath-soman/bfeffb28a4273353a9dd7c891b11945b to your computer and use it in GitHub Desktop.
Save sarath-soman/bfeffb28a4273353a9dd7c891b11945b to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
"""
Linear regression learning algorithm
"""
class LinearRegression:
def train(self, x, y):
"""
Trains a linear model from the data set
Args:
x -> independent variable matrix
y -> dependent variable column vector
Return:
List of learn co-efficients
"""
#Augmenting idv with constant intercept value
for xi in x:
xi.insert(0, 1)
no_idv = len(x[0])
#Todo: make it a hyper param
alpha = 0.001
#Todo: randomization
theta = [0] * no_idv
theta_temp = [t for t in theta]
#Convergence criteria is -> iterating 100000 times, this is for the sake of impl
for j in range(0, 100000):
for i in range(0, no_idv):
theta[i] = theta_temp[i] - alpha * self._partial_diff(theta_temp, x, y, i)
theta_temp = [t for t in theta]
return theta
def _partial_diff(self, theta, x, y, index):
"""
Computes the paritial differentiation of htheta
Args:
theta -> coefficients row vector
x -> independent variable matrix
y -> dependent variable column vector
index -> coefficient term being differentiated
Return:
updated coefficient at given 'index'
"""
no_idv = len(x[0])
m = len(x)
sigma = 0.0
for i in range(0, m):
htheta = self._htheta(theta, x, i)
sigma = sigma + (htheta - y[i][0]) * x[i][index]
return sigma / m
def _htheta(self, theta, x, index):
"""
htheta function computation
Args:
theta -> coefficient row vector
x -> independent variable matrix
index -> row index of x
"""
no_idv = len(x[0])
htheta = 0.0
for i in range(0, no_idv):
htheta = htheta + theta[i] * x[index][i]
return htheta
def main():
regression = LinearRegression()
#y = 2 + x
x = [[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11]]
y = [[3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13]]
thetas = regression.train(x, y)
print(thetas)
for xi in x:
htheta = thetas[0] * 1 + thetas[1] * xi[1]
print("{xi} -> {htheta}".format(xi=xi[1], htheta=htheta))
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment