Реализация логистической регрессии с нуля на Python: практическое руководство

Реализация логистической регрессии с нуля на Python: практическое руководство

Реализация логистической регрессии с нуля на Python: практическое руководство

Логистическая регрессия - это классификационный алгоритм, который используется для прогнозирования вероятности некоторого события, основанного на заданном наборе признаков. В отличие от линейной регрессии, которая предсказывает непрерывное значение, логистическая регрессия выводит категориальное значение (обычно "да" или "нет").

В этой статье мы шаг за шагом рассмотрим, как реализовать логистическую регрессию с нуля с помощью Python. Мы рассмотрим основные понятия, математику и код, необходимый для построения и оценки логистической модели регрессии.

Предпосылки

Для работы с этой статьей вам потребуются следующие предпосылки:

  • Базовые знания Python
  • Понимание основ вероятности и статистики
  • Знакомство с линейной регрессией (рекомендуется)

Математика логистической регрессии

Математическим уравнением логистической регрессии является:

P(y = 1 | x) = 1 / (1 + e^(-β0 + β1x1 + β2x2 + ... + βnxn))

где:

  • P(y = 1 | x) - вероятность того, что y = 1 при данном x
  • β0, β1, ..., βn - коэффициенты модели
  • x1, x2, ..., xn - признаки

Это уравнение выводит вероятность события y = 1, которая ограничена между 0 и 1. Коэффициенты модели определяют форму и наклон кривой логической функции.

Реализация с помощью Python

Давайте теперь реализуем логистическую регрессию с нуля на Python. Мы рассмотрим следующие шаги:

  1. Импорт библиотек
  2. Загрузка и подготовка данных
  3. Инициализация модели
  4. Определение функции потери
  5. Оптимизация модели
  6. Оценка модели

1. Импорт библиотек

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

Мы импортируем необходимые библиотеки: numpy для математических операций, pandas для работы с данными, а train_test_split для разделения набора данных на обучающее и тестовое множества.

2. Загрузка и подготовка данных

Мы используем набор данных о раке молочной железы Висенсского университета для этой демонстрации. Загрузим данные и подготовим их:

data = pd.read_csv('breast_cancer.csv')
X = data.drop(['diagnosis'], axis=1)
y = data['diagnosis'].values

Мы загрузили набор данных, удалили целевой столбец (diagnosis) и сохранили его в X, а также сохранили целевой столбец в y.

3. Инициализация модели

Теперь мы инициализируем нашу модель логической регрессии:

class LogisticRegression:

    def __init__(self, learning_rate=0.01, max_iter=1000):
        self.learning_rate = learning_rate
        self.max_iter = max_iter
        self.coefficients = np.zeros(X.shape[1])

Мы определяем класс LogisticRegression с атрибутами learning_rate (скорость обучения), max_iter (максимальное число итераций) и коэффициенты модели coefficients.

4. Определение функции потери

Мы определяем функцию потери как бинарную кросс-энтропию:

    def loss_function(self, X, y):
        m = X.shape[0]
        h = self.sigmoid(np.dot(X, self.coefficients))
        loss = (-1 / m) * (np.sum(y * np.log(h) + (1 - y) * np.log(1 - h)))
        return loss

Мы вычисляем потерю для каждого экземпляра в наборе данных и усредняем ее по размеру выборки.

5. Оптимизация модели

Мы используем градиентный спуск для обновления коэффициентов модели:

    def gradient_descent(self, X, y):
        for _ in range(self.max_iter):
            gradient = (-1 / X.shape[0]) * (np.dot(X.T, (y - self.sigmoid(np.dot(X, self.coefficients))))
            self.coefficients -= self.learning_rate * gradient

Мы выполняем max_iter итераций градиентного спуска, обновляя коэффициенты на каждом шаге.

6. Оценка модели

После оптимизации модели мы оцениваем ее производительность с помощью точности:

    def accuracy(self, X, y):
        predictions = self.predict(X)
        return np.mean(predictions == y)

Мы сначала делаем прогнозы для набора данных, а затем вычисляем точность как долю правильных прогнозов.

Использование модели

Мы создаем экземпляр нашей модели и обучаем ее на данных:

model = LogisticRegression()
model.fit(X, y)

После обучения мы можем сделать прогнозы для новых данных:

predictions = model.predict(new_data)

Вывод

Мы успешно реализовали логистическую регрессию с нуля на Python. Наш код охватывает весь процесс, от подготовки данных до оптимизации модели и оценки ее производительности. Этот подход дает гибкость и понимание того, как работает логистическая регрессия под капотом.

Помните, что оптимизация hyperparameter модели является важным шагом для достижения наилучших результатов. Дополнительные функции, такие как регуляризация, могут быть добавлены для повышения производительности модели. Рассмотрите возможность использования библиотек машинного обучения, таких как scikit-learn, для более быстрого и простого решения.

To leave a comment you need to Login / Create account