Представьте, что ты врач и нужно определить: болен человек или здоров, глядя на результаты анализов. Или ты работаешь в банке и решаешь: одобрить кредит клиенту или нет. Это задачи классификации — нужно отнести объект к одной из категорий.
Логистическая регрессия — это простая, но мощная модель машинного обучения, которая помогает делать такие предсказания. Несмотря на слово "регрессия" в названии, она используется именно для классификации!
Как это работает?
Логистическая регрессия работает так:
- Получает данные — например, рост и вес человека
- Вычисляет вероятность — какова вероятность, что человек занимается спортом (от 0 до 1)
- Принимает решение — если вероятность больше 0.5, то "да, занимается", иначе "нет, не занимается"
Модель находит такую границу между классами, которая лучше всего разделяет данные. Это как провести линию на карте, разделяющую два района города.
Пример: определяем, сдаст ли студент экзамен
Представим, что у нас есть данные о студентах: сколько часов они занимались и сколько часов спали перед экзаменом. Мы хотим предсказать, сдадут ли они экзамен.
# Импортируем нужные библиотеки
from sklearn.linear_model import LogisticRegression
import numpy as np
# Данные: часы учёбы и часы сна для каждого студента
X = np.array([
[1, 5], # мало учился, мало спал
[2, 6],
[3, 7],
[4, 8],
[5, 7],
[6, 8],
[7, 8], # много учился, хорошо спал
])
# Результаты: 0 = не сдал, 1 = сдал
y = np.array([0, 0, 0, 1, 1, 1, 1])
# Создаём модель
model = LogisticRegression()
# Обучаем модель на наших данных
model.fit(X, y)
# Делаем предсказания для новых студентов
new_students = np.array([
[2, 5], # мало учился, мало спал
[6, 7], # много учился, хорошо спал
])
predictions = model.predict(new_students)
print("Предсказания:", predictions) # [0, 1]
# Можем также узнать вероятности
probabilities = model.predict_proba(new_students)
print("Вероятности:", probabilities)
Основные методы в sklearn
1. Создание модели
model = LogisticRegression()
2. Обучение модели
model.fit(X, y) # X - признаки, y - правильные ответы
3. Предсказание класса
predictions = model.predict(X_new) # Возвращает 0 или 1
4. Предсказание вероятностей
probabilities = model.predict_proba(X_new) # Возвращает вероятности для каждого класса
5. Оценка точности
accuracy = model.score(X_test, y_test) # Показывает, насколько хорошо работает модель
Реальный пример: спам или не спам?
Давай создадим простую модель для определения спама в письмах:
from sklearn.linear_model import LogisticRegression
from sklearn.feature_extraction.text import CountVectorizer
# Примеры писем
emails = [
"Получи миллион прямо сейчас!",
"Привет, как дела?",
"СРОЧНО! Выиграл приз!",
"Встретимся завтра в кафе?",
"Бесплатный айфон для тебя!!!",
"Спасибо за помощь вчера",
]
# Метки: 1 = спам, 0 = не спам
labels = [1, 0, 1, 0, 1, 0]
# Преобразуем текст в числа (компьютер не понимает слова!)
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(emails)
# Создаём и обучаем модель
model = LogisticRegression()
model.fit(X, labels)
# Проверяем новое письмо
new_email = ["Получи бесплатный подарок сейчас!"]
X_new = vectorizer.transform(new_email)
prediction = model.predict(X_new)
if prediction[0] == 1:
print("Это спам! 🚫")
else:
print("Это нормальное письмо ✅")
Важные параметры
При создании модели можно настроить некоторые параметры:
model = LogisticRegression(
max_iter=1000, # Максимальное количество итераций обучения
random_state=42 # Для воспроизводимости результатов
)
max_iter — сколько раз модель пытается улучшить свои результаты
random_state — фиксирует случайность, чтобы результаты были одинаковыми при каждом запуске