Logistic Regression
Last updated
# Importing libraries
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from math import exp
# Preparing the dataset
data = pd.DataFrame({'feature' : [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15], 'label' : [0,0,0,0,0,0,0,1,1,1,1,1,1,1,1]})
# Divide the data to training set and test set
X_train, X_test, y_train, y_test = train_test_split(data['feature'], data['label'], test_size=0.30)
## Logistic Regression Model
# Helper function to normalize data
def normalize(X):
return X - X.mean()
# Method to make predictions
def predict(X, theta0, theta1):
# Here the predict function is: 1/(1+e^(-x))
return np.array([1 / (1 + exp(-(theta0 + theta1*x))) for x in X])
# Method to train the model
def logistic_regression(X, Y):
# Normalizing the data
X = normalize(X)
# Initializing variables
theta0 = 0
theta1 = 0
learning_rate = 0.001
epochs = 300
# Training iteration
for epoch in range(epochs):
y_pred = predict(X, theta0, theta1)
## Here the loss function is: sum(y-y_pred)^2 a.k.a least squared error (LSE)
# Derivative of loss w.r.t. theta0
theta0_d = -2 * sum((Y - y_pred) * y_pred * (1 - y_pred))
# Derivative of loss w.r.t. theta1
theta1_d = -2 * sum(X * (Y - y_pred) * y_pred * (1 - y_pred))
theta0 = theta0 - learning_rate * theta0_d
theta1 = theta1 - learning_rate * theta1_d
return theta0, theta1
# Training the model
theta0, theta1 = logistic_regression(X_train, y_train)
# Making predictions
X_test_norm = normalize(X_test)
y_pred = predict(X_test_norm, theta0, theta1)
y_pred = [1 if p >= 0.5 else 0 for p in y_pred]
# Evaluating the model
print(list(y_test))
print(y_pred)