tak.lol

scipy.special.expit - вычисление сигмоиды

Давай поговорим о функции scipy.special.expit, которая, как ни странно, не является названием нового танца, а представляет собой сигмоидную функцию. Эта функция может показаться простой, но она играет ключевую роль в мире машинного обучения и статистики. Готов? Тогда поехали!



Что такое сигмоидная функция?


Сигмоидная функция — это такая математическая штучка, которая берет любое число и преобразует его в значение от 0 до 1. Она выглядит примерно так:


expit(x) = 1 / (1 + e-x)

Где e — это не просто буква из алфавита, а основание натурального логарифма, примерно равное 2.71828. Эта функция полезна, когда нужно интерпретировать результаты как вероятности. Например, если ты предсказываешь вероятность того, что кто-то купит твою новую игру "Как стать программистом за 5 минут", то сигмоидная функция поможет тебе с этим!



Зачем нам scipy.special.expit?


Когда дело доходит до машинного обучения, мы часто сталкиваемся с задачами бинарной классификации. Здесь на помощь приходит expit. Она помогает нам преобразовать линейные комбинации признаков в вероятности. Звучит сложно? Давай разберемся на примере!



Пример: Логистическая регрессия


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


z = w1 * x1 + w2 * x2 + b


Где w1 и w2 — это веса, а b — смещение. Теперь мы применяем нашу любимую функцию expit, чтобы получить вероятность:


probability = expit(z)



Давай напишем код для этого:




import numpy as np
from scipy.special import expit

#Признаки

x1 = 0.5
x2 = 1.5

#Веса и смещение

w1 = 2.0
w2 = -1.0
b = 0.5

#Линейная комбинация

z = w1 * x1 + w2 * x2 + b

#Применяем expit

probability = expit(z)

print(f"Вероятность клика: {probability:.4f}")


После выполнения этого кода ты получишь вероятность клика, которая будет в диапазоне от 0 до 1. Если она близка к 1, то, скорее всего, пользователь кликнет на рекламу. Если близка к 0 — то нет. Все просто!



Чем expit лучше?


Здесь стоит отметить, что expit является численно стабильной версией сигмоидной функции. Это значит, что она может обрабатывать большие значения x без риска переполнения. Например:




#Большие значения

large_values = np.array([1000, 2000, -1000, -2000])
probabilities = expit(large_values)

print(probabilities)


Ты увидишь, что для больших положительных значений результат будет близок к 1, а для больших отрицательных — к 0. expit делает всю черную работу за тебя!



Интересные факты



  • Сигмоидная функция впервые была описана в 19 веке и использовалась в биологии для моделирования роста популяций.

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

  • Если ты когда-нибудь видел график функции expit, то заметил, что он напоминает букву "S". Это и есть причина ее названия!



Заключение


Теперь ты знаешь о scipy.special.expit больше, чем многие программирующие зомби! Эта функция — твой верный помощник в мире вероятностей и логистической регрессии. Так что не стесняйся использовать ее в своих проектах и делиться знаниями с коллегами! Удачи!



Задания для закрепления материала


Задание 1: Применение функции expit
Напиши функцию, которая принимает на вход массив чисел и возвращает массив, содержащий значения сигмоидной функции для каждого элемента. Используй scipy.special.expit.

Подсказка: Используй numpy для работы с массивами.

Задание 2: Визуализация сигмоиды
Создай график функции expit для значений от -10 до 10. Используй библиотеку matplotlib. Обозначь оси и добавь заголовок к графику.

Подсказка: Для создания массива значений можно использовать numpy.linspace.

Задание 3: Логистическая регрессия
Смоделируй простую задачу бинарной классификации. Создай случайные данные для двух классов (например, используя numpy.random). Затем реализуй логистическую регрессию, вычисли линейную комбинацию признаков и используй expit для предсказания вероятности принадлежности к одному из классов.

Подсказка: Для простоты можно использовать 2 признака и 100 наблюдений.

Задание 4: Исследование градиента
Выведи производную сигмоидной функции (градиент) и реализуй её в виде отдельной функции. Затем сравни результаты вычисления градиента с помощью аналитической формулы и с использованием численного дифференцирования.

Подсказка: Производная сигмоидной функции имеет вид: f'(x) = f(x) * (1 - f(x)).

Задание 5: Применение в нейронной сети
Создай простую нейронную сеть с одним скрытым слоем, использующей expit в качестве активационной функции. Реализуй прямое распространение (forward pass) и выведи выходные значения для заданного входного вектора.

Подсказка: Нейронная сеть может иметь один входной слой с 2 нейронами, один скрытый слой с 3 нейронами и один выходной слой с 1 нейроном. Используй случайные веса и смещения.
Комментарии к материалу
Комментировать
Ваш комментарий: