**Формула логистической регрессии**
Основная формула логистической регрессии выглядит следующим образом:
$$ P (y=1|x) = \frac {1} {1 + e^ {– (\beta_0 + \beta_1 x)}}
$$
где:
– $P (y=1|x) $ – вероятность того, что объект принадлежит к классу 1 при заданном значении $x$,
– $\beta_0$ – свободный член,
– $\beta_1$ – коэффициент наклона,
– $e$ – основание натурального логарифма.
Пример: Представьте, что вы хотите определить, является ли электронное письмо спамом или нет. Используя логистическую регрессию, вы можете предсказать вероятность того, что письмо является спамом, основываясь на его содержимом.
**Множественная логистическая регрессия**
Как и в случае с множественной линейной регрессией, можно использовать несколько независимых переменных:
$$ P (y=1|X) = \frac {1} {1 + e^ {– (\beta_0 + \beta_1 x_1 + \beta_2 x_2 + … + \beta_n x_n)}}
$$
где:
– $X$ – вектор независимых переменных,
– $n$ – количество независимых переменных,
– $x_i$ – i-я независимая переменная,
– $\beta_i$ – соответствующий коэффициент для каждой независимой переменной.
**Максимальная правдоподобие**
Для нахождения коэффициентов $\beta_0$, $\beta_1$, …, $\beta_n$ используется метод максимальной правдоподобия. Этот метод максимизирует функцию правдоподобия, которая представляет собой вероятность получения наблюдаемых данных при заданных параметрах модели.
**Практическое задание**
Используя Python и библиотеку `scikit-learn`, попробуйте построить модель логистической регрессии для классификации писем как спам или не-спам. Вы можете использовать набор данных «Spam Classification Dataset» из Kaggle.
```python
from sklearn. datasets import fetch_20newsgroups
from sklearn. feature_extraction. text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# Загрузка данных
categories = ['alt.atheism’, 'soc.religion.christian’]
twenty_train = fetch_20newsgroups (subset=’train’, categories=categories, shuffle=True, random_state=42)
# Преобразование текста в числовые признаки
vectorizer = TfidfVectorizer ()
X = vectorizer.fit_transform (twenty_train. data)
y = twenty_train. target
# Разделение данных на тренировочный и тестовый наборы
X_train, X_test, y_train, y_test = train_test_split (X, y, test_size=0.2, random_state=42)