Напишите простую реализацию логистической регрессии с нуля (без sklearn) для бинарной классификации. Это поможет лучше понять, как работает один из самых базовых алгоритмов в машинном обучении.
Решение задачи🔽
import numpy as np
# Сигмоида
def sigmoid(z):
return 1 / (1 + np.exp(-z))
# Функция логистической регрессии
def logistic_regression(X, y, lr=0.1, epochs=1000):
m, n = X.shape
X = np.c_[np.ones(m), X] # добавляем bias
theta = np.zeros(n + 1)
for _ in range(epochs):
z = np.dot(X, theta)
h = sigmoid(z)
gradient = np.dot(X.T, (h - y)) / m
theta -= lr * gradient
return theta
# Предсказание
def predict(X, theta):
X = np.c_[np.ones(X.shape[0]), X]
return sigmoid(np.dot(X, theta)) >= 0.5
# Пример
X = np.array([[1], [2], [3], [4]])
y = np.array([0, 0, 1, 1])
theta = logistic_regression(X, y)
print(predict(X, theta)) # [False False True True]