ML_lab5/LogisticRegression.py

41 lines
1.3 KiB
Python

import numpy as np
class LogisticRegression:
def __init__(self, weights, bias, learning_rate=0.001, epochs=1000):
self.learning_rate = learning_rate
self.epochs = epochs
self.weights = weights
self.bias = bias
def sigmoid(self, z):
return 1 / (1 + np.exp(-z))
def cost_function(self, X, y):
N = y.shape[0]
pred = self.sigmoid(np.dot(X.T, self.weights) + self.bias)
cost = -(1/N) * np.sum(y * np.log(pred) + (1 - y) * np.log(1 - pred))
return cost
def fit(self, X, y):
size, features = X.shape
self.weights = np.zeros(features)
self.bias = 0
for epoch in range(self.epochs):
linear = np.dot(X.T, self.weights) + self.bias
pred = self.sigmoid(linear)
E = 1/size * np.dot(X.T, (pred - y))
dB = 1/size * np.sum(pred - y)
self.weights -= self.learning_rate * E
self.bias -= self.learning_rate * dB
if epoch % 100 == 0:
cost = self.cost_function(X, y)
print(f'epoch: {epoch}, cost: {cost}')
def predict(self, X):
linear = np.dot(X.T, self.weights) + self.bias
pred = self.sigmoid(linear)
return [1 if i > 0.5 else 0 for i in pred] # seuil de 0.5 pour la classification