Концепции ИИ на Python

Линейная и логистическая регрессия на Python

Регрессия - самый простой вид машинного обучения. Линейная регрессия предсказывает число с помощью прямой; логистическая регрессия пропускает эту прямую через sigmoid, чтобы предсказать вероятность ответа «да/нет».

Суть простыми словами

Регрессия - самый простой вид машинного обучения. Линейная регрессия предсказывает число с помощью прямой; логистическая регрессия пропускает эту прямую через sigmoid, чтобы предсказать вероятность ответа «да/нет».

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

Главные идеи

  • Линейная регрессия предсказывает непрерывные значения, например цены или температуру.
  • Логистическая регрессия предсказывает вероятность для двух классов.
  • Обе можно обучать градиентным спуском вместо точной формулы.
  • Перцептрон - похожий классификатор, который меняет веса только при ошибке.

Когда это использовать?

  • Понять, что происходит внутри нейронных сетей и библиотек ИИ.
  • Разобраться в идее до того, как реализовать её в соответствующих задачах.
  • Подготовиться к курсам по машинному обучению, собеседованиям и проектам.

Посмотрите в действии

Щёлкайте по левому графику, чтобы добавлять точки и видеть, как обновляется лучшая прямая. Справа меняйте w и b, чтобы сдвигать границу решения.

Пример кода

Запустить код →
main.py
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.

Практические задания

Изменяйте входные данные и проверяйте граничные случаи перед работой с большими наборами.

  1. Измените входные данные или веса и предскажите результат до запуска.
  2. Выводите промежуточные значения, чтобы проследить каждый шаг вычислений.
  3. Решите задачи по ссылкам ниже, чтобы самостоятельно реализовать идею.
Запустить в Python IDE →

Попрактикуйтесь на задаче

Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.

Все задачи