Линейная и логистическая регрессия на Python
Регрессия - самый простой вид машинного обучения. Линейная регрессия предсказывает число с помощью прямой; логистическая регрессия пропускает эту прямую через sigmoid, чтобы предсказать вероятность ответа «да/нет».
Суть простыми словами
Регрессия - самый простой вид машинного обучения. Линейная регрессия предсказывает число с помощью прямой; логистическая регрессия пропускает эту прямую через sigmoid, чтобы предсказать вероятность ответа «да/нет».
Подберите прямую методом наименьших квадратов, а затем превратите оценку в вероятность с помощью логистической регрессии.
Главные идеи
- Линейная регрессия предсказывает непрерывные значения, например цены или температуру.
- Логистическая регрессия предсказывает вероятность для двух классов.
- Обе можно обучать градиентным спуском вместо точной формулы.
- Перцептрон - похожий классификатор, который меняет веса только при ошибке.
Когда это использовать?
- Понять, что происходит внутри нейронных сетей и библиотек ИИ.
- Разобраться в идее до того, как реализовать её в соответствующих задачах.
- Подготовиться к курсам по машинному обучению, собеседованиям и проектам.
Посмотрите в действии
Щёлкайте по левому графику, чтобы добавлять точки и видеть, как обновляется лучшая прямая. Справа меняйте w и b, чтобы сдвигать границу решения.
Пример кода
import math
# Linear regression: find the line that best fits the points (least squares).
xs = [1, 2, 3, 4, 5]
ys = [2.1, 3.9, 6.2, 8.1, 9.8]
mean_x, mean_y = sum(xs) / len(xs), sum(ys) / len(ys)
slope = sum((x - mean_x) * (y - mean_y) for x, y in zip(xs, ys)) / sum((x - mean_x) ** 2 for x in xs)
intercept = mean_y - slope * mean_x
print(f"line: y = {slope:.2f}x + {intercept:.2f}")
print("predict x=6:", round(slope * 6 + intercept, 2))
# Logistic regression turns a score into a probability with the sigmoid.
def predict_pass(hours_studied, weight=1.5, bias=-4.0):
return 1 / (1 + math.exp(-(weight * hours_studied + bias)))
for hours in (1, 3, 5):
p = predict_pass(hours)
print(f"{hours} hours -> pass probability {p:.2f} -> {'pass' if p >= 0.5 else 'fail'}")
Ожидаемый результат
line: y = 1.96x + 0.14
predict x=6: 11.9
1 hours -> pass probability 0.08 -> fail
3 hours -> pass probability 0.62 -> pass
5 hours -> pass probability 0.97 -> pass
Как это работает
Формула наименьших квадратов находит наклон и свободный член, при которых сумма квадратов расстояний до точек минимальна, и даёт y = 1.96x + 0.14. predict_pass() вычисляет оценку по числу часов учёбы, а sigmoid превращает её в вероятность; 0.5 - граница между «не сдал» и «сдал».
Измените значения и запустите программу в онлайн-компиляторе Python CodeUtility без локальной установки Python.
Практические задания
Изменяйте входные данные и проверяйте граничные случаи перед работой с большими наборами.
- Измените входные данные или веса и предскажите результат до запуска.
- Выводите промежуточные значения, чтобы проследить каждый шаг вычислений.
- Решите задачи по ссылкам ниже, чтобы самостоятельно реализовать идею.
Попрактикуйтесь на задаче
Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.
- Простая линейная регрессия (метод наименьших квадратов) Найдите прямую, лучше всего проходящую через точки данных, по формулам метода наименьших квадратов. Средне
- Линейная регрессия градиентным спуском Найдите наклон и смещение прямой, шаг за шагом спускаясь по среднеквадратичной ошибке. Средне
- Предсказание логистической регрессией Классифицируйте примеры как 0 или 1, пропуская взвешенную сумму через сигмоиду и сравнивая с порогом. Легко
- Алгоритм обучения перцептрона Обучите классический перцептрон, который меняет веса только при ошибке. Средне