Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions Akoh_Victor_Ojodom
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import numpy as np

class LogisticRegression:
def __init__(self, lr=0.01, num_iter=100000, fit_intercept=True, verbose=False):
self.lr = lr
self.num_iter = num_iter
self.fit_intercept = fit_intercept
self.verbose = verbose

def sigmoid(self, z):
return 1 / (1 + np.exp(-z))

def addIntercept(self, X):
intercept = np.ones((X.shape[0], 1))
return np.concatenate((intercept, X), axis=1)

def loss(self, h, y):
return (-y * np.log(h) - (1 - y) * np.log(1 - h)).mean()

def fit(self, X, y):
if self.fit_intercept:
X = self.addIntercept(X)

self.theta = np.zeros(X.shape[1])

for i in range(self.num_iter):
z = np.dot(X, self.theta)
h = self.sigmoid(z)
gradient = np.dot(X.T, (h - y)) / y.size
self.theta -= self.lr * gradient

z = np.dot(X, self.theta)
h = self.sigmoid(z)
loss = self.loss(h, y)

if(self.verbose == True and i % 10000 == 0):
print('Loss: {} \t'.format(loss))

def predictProb(self, X):
if self.fit_intercept:
X = self.addIntercept(X)

return self.sigmoid(np.dot(X, self.theta))

def predict(self, X):
return self.predictProb(X).round()

#Evaluating Using Logistic Regression created
mdl = LogisticRegression(lr=0.1, num_iter=300000)

from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data[:, :3]
y = (iris.target != 0) * 1
mdl.fit(X, y)
pred = mdl.predict(X)
(pred == y).mean()
mdl.theta

#Evaluating Using Default/In-built Logistic Regression from sklearn
from sklearn.linear_model import LogisticRegression
md = LogisticRegression()
md.fit(X,y)
md.predict(X)
md.coef_
md.intercept_