Реализуйте Logistic Regression (бинарная классификация) с обучением через gradient descent.
Формулы:
- Sigmoid: σ(z) = 1 / (1 + exp(-z))
- Предсказание: ŷ = σ(X·w + b)
- Градиенты: dw = 1/n · Xᵀ·(ŷ - y), db = 1/n · Σ(ŷ - y)
- Обновление: w -= lr · dw, b -= lr · db
Задача основана на вопросах с собеседований в Яндекс и Avito.
def logistic_regression(X: list[list[float]], y: list[int], lr: float, n_iter: int) -> dict:
Верните dict:
- loss: финальный BCE loss (округлить до 4 знаков)
- weights: список весов (округлить до 4 знаков)
- bias: bias (округлить до 4 знаков)
- predictions: предсказанные классы (0/1, порог 0.5)
logistic_regression([[0,0],[0,1],[1,0],[1,1]], [0,0,0,1], 0.5, 1000)
→ {"loss": 0.0346, "weights": [6.0141, 6.0141], "bias": -9.1984, "predictions": [0,0,0,1]}X = [[0,0],[0,1],[1,0],[1,1]]y = [0,0,0,1]lr = 0.5n_iter = 1000{"loss":0.0346,"weights":[6.0141,6.0141],"bias":-9.1984,"predictions":[0,0,0,1]}AND gate
X = [[1],[2],[3],[4]]y = [0,0,1,1]lr = 1n_iter = 500{"loss":0.0494,"weights":[4.586],"bias":-11.269,"predictions":[0,0,1,1]}1D threshold