Фильтр публикаций


Скидка 25% на гели Ariel и Tide!

Скидка 25% в Любимой категории на товары брендов Ariel и Tide

Купить

#реклама
market.yandex.ru

О рекламодателе


🤔 Как посчитать рок аук скор?

Она измеряет способность модели различать положительные и отрицательные классы, независимо от выбранного порога классификации. Значение ROC AUC варьируется от 0 до 1, где 1 соответствует идеальной модели, а 0.5 — случайному угадыванию.

🚩Шаги для расчета в Python

1⃣Подготовка данных и модели.
2⃣Предсказание вероятностей классов.
3⃣Вычисление ROC AUC с использованием библиотеки scikit-learn.
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score

# Генерация данных
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)

# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Обучение модели логистической регрессии
model = LogisticRegression()
model.fit(X_train, y_train)

# Предсказание вероятностей для тестовой выборки
y_pred_prob = model.predict_proba(X_test)[:, 1]

# Вычисление ROC AUC
roc_auc = roc_auc_score(y_test, y_pred_prob)
print(f"ROC AUC Score: {roc_auc:.2f}")

1⃣Генерация данных
make_classification создает набор данных для задачи классификации.
2⃣Разделение данных
train_test_split делит данные на обучающую и тестовую выборки.
3⃣Обучение модели
LogisticRegression используется для обучения модели логистической регрессии.
4⃣Предсказание вероятностей
predict_proba возвращает вероятности для каждого класса. Нас интересует вероятность положительного класса (1), поэтому берем второй столбец результата ([:, 1]).
5⃣Вычисление ROC AUC
roc_auc_score вычисляет AUC на основе истинных меток (y_test) и предсказанных вероятностей (y_pred_prob).

Ставь 👍 и забирай 📚 Базу знаний


Зарабатывайте на установках Яндекс Браузера

Партнёрская программа для сервисных центров, магазинов компьютерной техники, сайтов для скачивания файлов и авторов статей.
Вы можете предлагать его своим клиентам и аудитории — и зарабатывать на новых установках.
Выплаты до 500₽ за каждую установку Яндекс Браузера.

Подать заявку

#реклама 0+
partner.browser.yandex.ru

О рекламодателе


🤔 Как можно сравнивать два ненормальных распределения?

🚩Непараметрические тесты

🟠Тест Манна-Уитни (U-тест Манна-Уитни)
Используется для сравнения двух независимых выборок. Тест проверяет, различаются ли распределения значений между двумя группами.
from scipy.stats import mannwhitneyu

data1 = [1, 2, 3, 4, 5]
data2 = [2, 3, 4, 5, 6]
stat, p = mannwhitneyu(data1, data2)
print(f'U-статистика: {stat}, p-значение: {p}')

🟠Тест Уилкоксона (Wilcoxon signed-rank test)
Используется для сравнения двух связанных выборок или парных наблюдений.
from scipy.stats import wilcoxon

before = [20, 30, 40, 50, 60]
after = [21, 29, 39, 51, 59]
stat, p = wilcoxon(before, after)
print(f'W-статистика: {stat}, p-значение: {p}')

🟠Критерий Колмогорова-Смирнова (Kolmogorov-Smirnov test)
Используется для сравнения формы двух распределений.
from scipy.stats import ks_2samp

data1 = [1, 2, 3, 4, 5]
data2 = [2, 3, 4, 5, 6]
stat, p = ks_2samp(data1, data2)
print(f'KS-статистика: {stat}, p-значение: {p}')

🚩Визуализация

🟠Гистограммы и плотности
Построение гистограмм и графиков плотности для визуального сравнения распределений.
import matplotlib.pyplot as plt
import seaborn as sns

data1 = [1, 2, 3, 4, 5]
data2 = [2, 3, 4, 5, 6]

sns.histplot(data1, kde=True, color='blue', label='Data1', alpha=0.5)
sns.histplot(data2, kde=True, color='red', label='Data2', alpha=0.5)
plt.legend()
plt.show()

🟠Boxplots (ящики с усами)
Помогают сравнить распределения и выявить отличия в медиане, квартилях и выбросах.
data1 = [1, 2, 3, 4, 5]
data2 = [2, 3, 4, 5, 6]

plt.boxplot([data1, data2], labels=['Data1', 'Data2'])
plt.show()

🚩Другие методы

🟠Коэффициент Спирмена (Spearman's rank correlation)
Проверяет монотонную связь между двумя выборками.
from scipy.stats import spearmanr

data1 = [1, 2, 3, 4, 5]
data2 = [2, 3, 4, 5, 6]
corr, p = spearmanr(data1, data2)
print(f'Корреляция Спирмена: {corr}, p-значение: {p}')

Ставь 👍 и забирай 📚 Базу знаний


🤔 Как представить модель лтв для бизнеса?

Представление модели пожизненной ценности клиента (LTV) для бизнеса требует чёткого понимания целей бизнеса, практической значимости модели и способности переводить технические детали в понятные и полезные бизнес-инсайты.

🟠Определите цель модели LTV
Начните с объяснения, для чего была разработана модель LTV и какие бизнес-процессы она может улучшить. Это может быть повышение ROI маркетинговых кампаний, оптимизация взаимодействия с клиентами, повышение удержания клиентов или более эффективное распределение ресурсов.

🟠Подробно о методологии
Опишите, какие данные были использованы для обучения модели, какие методы машинного обучения применялись, и как производилась валидация результатов. Объясните выбор определённых переменных и их влияние на прогнозы LTV.

🟠Демонстрация результатов
Используйте визуализации для демонстрации работы модели. Графики, такие как ROC-кривые, диаграммы распределения LTV или сравнения реальных и предсказанных значений LTV, могут помочь наглядно представить эффективность модели. Также покажите, как модель справляется с различными сегментами клиентов.

🟠Бизнес-влияние
Объясните, как использование модели LTV может привести к конкретным бизнес-преимуществам. Приведите примеры улучшений: например, на сколько увеличилась рентабельность за счёт оптимизации маркетинговых затрат или как повысилась общая прибыль за счет более точного прогнозирования поведения клиентов.

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

🟠Рассмотрение ограничений и рисков
Не упустите возможность обсудить потенциальные ограничения модели и возможные риски, связанные с её использованием. Это может включать данные, которые могут стать устаревшими, потенциальное переобучение модели или вопросы, связанные с конфиденциальностью данных.

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

Ставь 👍 и забирай 📚 Базу знаний


🤔 Что будет с целевой меткой с предсказаниями, если обучалась на неотрицательной целевой метке?

Если модель обучалась на неотрицательной целевой метке (например, метки, которые не могут быть отрицательными, такие как возраст, стоимость, количество и т.д.).

🟠Регрессионные модели
Могут предсказывать как положительные, так и отрицательные значения, если не наложены дополнительные ограничения. Например, линейная регрессия или случайный лес могут предсказывать отрицательные значения, даже если обучались на неотрицательных данных. Это происходит потому, что модель пытается найти лучшую аппроксимацию, минимизируя ошибку предсказания, и может выйти за пределы диапазона обучающих данных.

🟠Вероятностные модели (например, модели, предсказывающие вероятность события)
Обученные на неотрицательных целевых метках (например, 0 или 1), будут предсказывать значения в диапазоне [0, 1]. Однако, эти модели также могут иногда предсказывать значения немного ниже 0 или выше 1 из-за особенности алгоритмов (например, логистическая регрессия без дополнительных ограничений).

🚩Способы предотвращения предсказания отрицательных значений

🟠Использование функции потерь с ограничениями
Например, в регрессионных задачах можно использовать функции потерь, которые накладывают штраф за отрицательные предсказания.

🟠Постобработка предсказаний
Можно применить после предсказания функцию, которая заменяет все отрицательные значения на ноль.
predictions = model.predict(X_test)
predictions = np.maximum(predictions, 0) # Заменяем все отрицательные значения на 0

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

🟠Трансформация целевой переменной
Можно применить логарифмическую трансформацию или другую трансформацию, которая делает целевую переменную всегда неотрицательной, и потом обратную трансформацию для предсказаний.
from sklearn.linear_model import LinearRegression
import numpy as np

# Пример данных
X_train = np.array([[1], [2], [3], [4]])
y_train = np.array([10, 15, 20, 25]) # Неотрицательные целевые метки

# Обучение модели
model = LinearRegression()
model.fit(X_train, y_train)

# Предсказания
X_test = np.array([[5], [6], [7]])
predictions = model.predict(X_test)

# Применение постобработки для удаления отрицательных значений
predictions = np.maximum(predictions, 0)

print(predictions)

Ставь 👍 и забирай 📚 Базу знаний


🤔 Чем отличается градиентный спуск от SGD?

Градиентный спуск использует весь набор данных для вычисления градиента и обновления параметров, что требует значительных вычислительных ресурсов. Стохастический градиентный спуск (SGD) обновляет параметры после каждого примера или мини-батча, что ускоряет обучение, но может быть менее стабильным. SGD часто сходится быстрее, но может застревать в локальных минимумах.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний


🤔 Чем отличаются str и repr?

Функции str() и repr() используются для получения строкового представления объектов, но они служат разным целям и работают по-разному.

🚩Функция str()

Предназначена для получения "приятного" строкового представления объекта, которое может быть представлено пользователю. Она старается сделать строку более читабельной и понятной. Если метод __str__() не определен в классе объекта, использует метод __repr__() как запасной вариант.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def __str__(self):
return f"{self.name}, возраст {self.age} лет"

person = Person("Иван", 30)
print(str(person)) # Вывод: Иван, возраст 30 лет

🚩Функция repr()

Предназначена для получения официального строкового представления объекта, которое может быть использовано для воссоздания того же объекта при помощи интерпретатора. repr() должна быть максимально точной и содержать информацию о всех атрибутах объекта. Результат repr() часто используется для отладки и разработки, так как он дает больше деталей о объекте.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def __repr__(self):
return f"Person('{self.name}', {self.age})"

person = Person("Иван", 30)
print(repr(person)) # Вывод: Person('Иван', 30)

Ставь 👍 и забирай 📚 Базу знаний


🤔 Как градиент бустинг регрессор работает?

Это мощный метод машинного обучения, использующийся для построения предсказательных моделей. Основная идея градиентного бустинга заключается в последовательном добавлении простых моделей (например, деревьев решений), так чтобы каждая последующая модель корректировала ошибки предыдущих.

🚩Как это работает

🟠Инициализация
Модель начинает с простой начальной предсказательной модели, обычно с использованием среднего значения целевой переменной.

🟠Пошаговое обучение
Для каждой модели в ансамбле вычисляется градиент функции потерь по отношению к предсказаниям текущей композитной модели. Градиент показывает направление наибольшего увеличения ошибки и используется для определения того, как должна измениться следующая модель, чтобы уменьшить ошибку.
Следующая модель обучается, чтобы предсказывать отрицательный градиент (т.е., ошибку) предыдущих моделей.
Эта модель затем добавляется к композитной модели с некоторым коэффициентом обучения (learning rate), который определяет степень влияния новой модели на общую модель.

🟠Повторение
Этот процесс повторяется множество раз, и каждая новая модель улучшает предсказательные способности композитной модели, пока не будет достигнут критерий остановки или не будет добавлено заранее определенное количество моделей.

from sklearn.ensemble import GradientBoostingRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split

Создание синтетических данных
X, y = make_regression(n_samples=100, n_features=4, noise=0.1)

Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Создание модели градиентного бустинга
model = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)

Обучение модели
model.fit(X_train, y_train)

Оценка модели
print("Точность модели на тестовых данных:", model.score(X_test, y_test))

Ставь 👍 и забирай 📚 Базу знаний


🤔 Что знаешь о ML дизайне?

Термин "ML дизайн" или "дизайн машинного обучения" может относиться к разным аспектам процесса разработки и внедрения моделей машинного обучения в продукты или системы. Это включает в себя всё от выбора подходящих алгоритмов и предобработки данных до оптимизации архитектуры системы и создания пользовательского интерфейса, который делает результаты машинного обучения доступными и полезными для конечных пользователей.

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

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

🟠Обработка и предобработка данных
Эффективное использование данных включает их очистку, нормализацию, аугментацию и инжиниринг признаков. Эти шаги критически важны, так как качество и количество тренировочных данных напрямую влияют на производительность модели машинного обучения.

🟠Валидация и тестирование моделей
После выбора и обучения моделей необходимо тщательно оценить их производительность с использованием методов валидации, таких как перекрестная проверка. Тестирование должно проводиться не только для измерения точности, но и для проверки, как модель работает на новых, ранее невиданных данных.

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

🟠Пользовательский интерфейс и взаимодействие
Одним из аспектов ML дизайна является разработка интерфейсов, которые позволяют пользователям легко и эффективно взаимодействовать с машинным обучением. Это может включать в себя визуализацию результатов, настройки уровня доверия модели и интерактивные элементы для обратной связи с пользователем.

🟠Этические и юридические соображения
При проектировании систем машинного обучения важно учитывать этические и юридические аспекты, такие как конфиденциальность данных, справедливость и прозрачность решений, сделанных с использованием ИИ.

Ставь 👍 и забирай 📚 Базу знаний


🤔 Какие есть проблемы с Batch Norm?

1. Зависимость от мини-батчей: небольшие батчи могут приводить к нестабильной оценке среднего и дисперсии.
2. Сложности с применением в рекуррентных сетях: последовательность данных может вызывать проблемы с нормализацией.
3. Увеличение вычислительных затрат: дополнительные параметры и операции замедляют обучение.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний


🤔 Какие лоссы ты знаешь?

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

🚩Лоссы для задач регрессии

Эти функции используются, когда нужно предсказать непрерывное значение (например, цену дома).

🟠MSE (Mean Squared Error, Среднеквадратичная ошибка)
MSE = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2
Почему: Она штрафует большие ошибки сильнее (из-за квадрата), поэтому модель пытается минимизировать крупные отклонения.
Недостаток: Чувствительна к выбросам, так как большие ошибки сильно влияют на результат.

🟠MAE (Mean Absolute Error, Средняя абсолютная ошибка)
MAE = \frac{1}{n} \sum_{i=1}^n |y_i - \hat{y}_i|
Почему: Она менее чувствительна к выбросам.
Недостаток: Может быть сложнее оптимизировать, поскольку производная модуля недифференцируема в 0.

🟠Huber Loss
Комбинация MSE и MAE. Менее чувствительна к выбросам, чем MSE.

L_{\delta}(a) =
\begin{cases}
\frac{1}{2}(y_i - \hat{y}_i)^2 & \text{if } |y_i - \hat{y}_i| \leq \delta, \\
\delta \cdot |y_i - \hat{y}_i| - \frac{1}{2} \delta^2 & \text{otherwise.}
\end{cases}

🚩Лоссы для задач классификации

Эти функции подходят для задач, где нужно определить категорию (например, "кот" или "собака").

🟠Binary Cross-Entropy (Логарифмическая потеря)
Используется для бинарной классификации.
BCE = - \frac{1}{n} \sum_{i=1}^n \big(y_i \log(\hat{y}_i) + (1-y_i) \log(1-\hat{y}_i)\big)
Почему: Лосс сильнее штрафует уверенные, но неправильные предсказания. Пример: Вероятность принадлежности классу "1" предсказана как 0.99, но правильный класс — "0".

🟠Categorical Cross-Entropy (Кросс-энтропия)
Для многоклассовой классификации:
CCE = - \sum_{i=1}^n \sum_{j=1}^k y_{ij} \log(\hat{y}_{ij})
Почему: Учитывает все классы, штрафуя уверенные ошибки сильнее.

🟠Hinge Loss
Применяется в задачах с методами опорных векторов (SVM).
L = \max(0, 1 - y_i \cdot \hat{y}_i)
Почему: Стимулирует модель делать более "уверенные" предсказания.

🚩Лоссы для задач сегментации или генерации

🟠Dice Loss:
Используется для задач сегментации изображений.
Dice = 1 - \frac{2 |A \cap B|}{|A| + |B|}
Почему: Учитывает пересечение предсказанной области и истинной разметки.

🟠Perceptual Loss
Используется в задачах генерации изображений, чтобы сравнивать "перцептивное" различие между изображениями, а не просто пиксели.

🚩Специфические лоссы

🟠KL Divergence (Дивергенция Кульбака-Лейблера)
Измеряет, насколько распределение предсказаний модели отличается от целевого распределения.
D_{KL}(P || Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)}

🟠Triplet Loss
Для задач, связанных с обучением эмбеддингов (например, в системах рекомендаций или в задачах поиска изображений).

🚩Пример реализации (MSE)

import torch
import torch.nn as nn

# Предсказания модели
y_pred = torch.tensor([2.5, 0.0, 2.0, 8.0])
# Истинные значения
y_true = torch.tensor([3.0, -0.5, 2.0, 7.0])

# Среднеквадратичная ошибка
loss_fn = nn.MSELoss()
loss = loss_fn(y_pred, y_true)
print(f"MSE Loss: {loss.item()}")

Ставь 👍 и забирай 📚 Базу знаний


🤔 Как можно сравнивать два ненормальных распределения?

🚩Непараметрические тесты

🟠Тест Манна-Уитни (U-тест Манна-Уитни)
Используется для сравнения двух независимых выборок. Тест проверяет, различаются ли распределения значений между двумя группами.
from scipy.stats import mannwhitneyu

data1 = [1, 2, 3, 4, 5]
data2 = [2, 3, 4, 5, 6]
stat, p = mannwhitneyu(data1, data2)
print(f'U-статистика: {stat}, p-значение: {p}')

🟠Тест Уилкоксона (Wilcoxon signed-rank test)
Используется для сравнения двух связанных выборок или парных наблюдений.
from scipy.stats import wilcoxon

before = [20, 30, 40, 50, 60]
after = [21, 29, 39, 51, 59]
stat, p = wilcoxon(before, after)
print(f'W-статистика: {stat}, p-значение: {p}')

🟠Критерий Колмогорова-Смирнова (Kolmogorov-Smirnov test)
Используется для сравнения формы двух распределений.
from scipy.stats import ks_2samp

data1 = [1, 2, 3, 4, 5]
data2 = [2, 3, 4, 5, 6]
stat, p = ks_2samp(data1, data2)
print(f'KS-статистика: {stat}, p-значение: {p}')

🚩Визуализация

🟠Гистограммы и плотности
Построение гистограмм и графиков плотности для визуального сравнения распределений.
import matplotlib.pyplot as plt
import seaborn as sns

data1 = [1, 2, 3, 4, 5]
data2 = [2, 3, 4, 5, 6]

sns.histplot(data1, kde=True, color='blue', label='Data1', alpha=0.5)
sns.histplot(data2, kde=True, color='red', label='Data2', alpha=0.5)
plt.legend()
plt.show()

🟠Boxplots (ящики с усами)
Помогают сравнить распределения и выявить отличия в медиане, квартилях и выбросах.
data1 = [1, 2, 3, 4, 5]
data2 = [2, 3, 4, 5, 6]

plt.boxplot([data1, data2], labels=['Data1', 'Data2'])
plt.show()

🚩Другие методы

🟠Коэффициент Спирмена (Spearman's rank correlation)
Проверяет монотонную связь между двумя выборками.
from scipy.stats import spearmanr

data1 = [1, 2, 3, 4, 5]
data2 = [2, 3, 4, 5, 6]
corr, p = spearmanr(data1, data2)
print(f'Корреляция Спирмена: {corr}, p-значение: {p}')

Ставь 👍 и забирай 📚 Базу знаний


🤔 Почему в картинках используют StandardScaling вместо MinMaxScaling ?

Использование методов нормализации данных, таких как StandardScaling и MinMaxScaling, зависит от особенностей данных и задач машинного обучения. В задачах обработки изображений StandardScaling (стандартизация) часто предпочтительнее MinMaxScaling (масштабирование к диапазону), и вот почему:

🚩Standard Scaling (стандартизация)

Заключается в преобразовании данных таким образом, чтобы они имели нулевое среднее значение и единичное стандартное отклонение.

🟠Сохранение распределения данных
Стандартизация сохраняет распределение данных, но изменяет масштаб. Это особенно важно для алгоритмов, чувствительных к масштабу данных, таких как градиентный спуск.

🟠Гибкость при разных диапазонах
Изображения часто содержат пиксели с различными интенсивностями, и стандартизация помогает унифицировать данные, что улучшает сходимость моделей.

🟠Работа с алгоритмами
Многие алгоритмы машинного обучения, такие как линейные модели и нейронные сети, лучше работают с данными, у которых нулевое среднее и единичное стандартное отклонение. Это помогает ускорить обучение и улучшить сходимость.

from sklearn.preprocessing import StandardScaler
import numpy as np

# Пример изображения (грейскейл)
image = np.array([[0, 50, 100], [150, 200, 255], [30, 70, 120]])

# Преобразование в одномерный массив
image_flattened = image.flatten().reshape(-1, 1)

# Стандартизация
scaler = StandardScaler()
image_scaled = scaler.fit_transform(image_flattened)

# Возвращение к оригинальной форме
image_standardized = image_scaled.reshape(image.shape)
print(image_standardized)

🚩Min-Max Scaling (масштабирование к диапазону)

Заключается в преобразовании данных таким образом, чтобы они находились в заданном диапазоне, обычно от 0 до 1.

🟠Простота интерпретации
Преобразованные данные легко интерпретировать, так как все значения находятся в одном диапазоне.

🟠Подходит для некоторых задач
Может быть полезно для алгоритмов, которые не зависят от нормальности данных, таких как методы на основе деревьев решений.

🟠Чувствительность к выбросам
Масштабирование к диапазону очень чувствительно к выбросам, что может сильно исказить распределение данных.

🟠Сложность работы с градиентными методами
Для методов, использующих градиенты, Min-Max Scaling может привести к неравномерным шагам в оптимизации, особенно если данные имеют различную дисперсию.

from sklearn.preprocessing import MinMaxScaler
import numpy as np

# Пример изображения (грейскейл)
image = np.array([[0, 50, 100], [150, 200, 255], [30, 70, 120]])

# Преобразование в одномерный массив
image_flattened = image.flatten().reshape(-1, 1)

# Масштабирование к диапазону 0-1
scaler = MinMaxScaler()
image_scaled = scaler.fit_transform(image_flattened)

# Возвращение к оригинальной форме
image_minmax_scaled = image_scaled.reshape(image.shape)
print(image_minmax_scaled)

Ставь 👍 и забирай 📚 Базу знаний


🤔 Что такое bootstrap?

Bootstrap - это статистический метод, который позволяет оценивать распределение статистики выборки (например, среднего, медианы) путем многократного повторного выборочного отбора с возвращением из исходной выборки.

🚩Почему нужен bootstrap?

В реальной жизни часто бывает сложно оценить неопределенность оценок из-за ограниченного объема данных. Bootstrap помогает преодолеть это ограничение, позволяя получить более точные доверительные интервалы и оценки ошибок для статистических параметров.

🚩Как используется bootstrap?

🟠Исходная выборка: Допустим, у вас есть исходная выборка данных объема \( n \).
🟠Повторные выборки: Вы многократно (например, 1000 или 10,000 раз) выбираете случайные подвыборки с возвращением из исходной выборки. Это означает, что каждый элемент может быть выбран несколько раз, а некоторые элементы могут не попасть в конкретную подвыборку.
🟠Вычисление статистики: Для каждой из повторных подвыборок вы вычисляете интересующую вас статистику (например, среднее, медиану).
🟠Оценка распределения: Получив множество значений статистики, вы можете построить эмпирическое распределение этой статистики, оценить доверительные интервалы, среднее значение и другие характеристики.

import numpy as np

# Исходные данные
data = np.array([2.3, 5.1, 7.4, 2.9, 6.5, 4.8, 3.1, 5.7, 8.2, 3.4])

# Параметры bootstrap
n_iterations = 1000
n_size = len(data)

# Массив для хранения значений средней из каждой подвыборки
means = []

# Процесс bootstrap
for _ in range(n_iterations):
sample = np.random.choice(data, size=n_size, replace=True)
sample_mean = np.mean(sample)
means.append(sample_mean)

# Вычисление доверительного интервала (например, 95%)
lower_bound = np.percentile(means, 2.5)
upper_bound = np.percentile(means, 97.5)

print(f"Среднее значение: {np.mean(means)}")
print(f"95% доверительный интервал: [{lower_bound}, {upper_bound}]")

Ставь 👍 и забирай 📚 Базу знаний


🤔 Сравни архитектуру RNN, CNN, трансформера

Архитектуры RNN, CNN и Transformer используются в глубоком обучении для разных задач. Давайте разберём их принципы работы, различия и области применения.

🚩Рекуррентные нейронные сети (RNN)

Используются для работы с последовательными данными (текст, аудио, временные ряды).
В RNN выход предыдущего состояния влияет на следующее состояние. Сеть запоминает последовательность, так как передаёт скрытое состояние \( h_t \) на следующий шаг. В классической RNN проблема исчезающего градиента, из-за чего трудно обрабатывать длинные последовательности.
🟠LSTM (Long Short-Term Memory)
добавляет механизмы управления памятью (forget, input, output gate).
🟠GRU (Gated Recurrent Unit)
упрощённая версия LSTM, но работает быстрее.

Машинный перевод (seq2seq)
Анализ временных рядов
Обнаружение аномалий
Плохо работает с длинными зависимостями
Не поддерживает параллельные вычисления

🚩Сверточные нейронные сети (CNN)

Используются для обработки изображений и данных с пространственными зависимостями.
Применяет фильтры (свёртки) к изображению, извлекая признаки.
Главные слои:
🟠Слой свёртки (Convolutional Layer)
извлекает особенности изображения.
🟠Слой активации (ReLU)
добавляет нелинейность.
🟠Слой субдискретизации (Pooling)
уменьшает размерность.
🟠Полносвязные слои (FC Layers)
делают финальную классификацию.
Компьютерное зрение
Обнаружение объектов
Анализ медицинских снимков
Плохо работает с последовательностями и контекстными зависимостями
Требует много данных и вычислительных ресурсов

🚩 Трансформеры (Transformers)

Используются для работы с последовательностями, заменяя RNN.
Основной механизм – Self-Attention, который позволяет учитывать все элементы последовательности одновременно.
Encoder-Decoder архитектура:
Encoder обрабатывает входные данные.
Decoder генерирует выходную последовательность.
Для обучения используется механизм внимания (Attention Mechanism).
🟠Self-Attention
определяет, какие части входных данных важны.
🟠Position Encoding
добавляет информацию о порядке слов.
🟠Feed Forward Layers
обрабатывает признаки после self-attention.
NLP: GPT, BERT, T5
Машинный перевод (Google Translate)
Генерация текста и изображений (ChatGPT, DALL-E)
Требуют много вычислительных ресурсов
Плохо работают с короткими и табличными данными

Ставь 👍 и забирай 📚 Базу знаний


🤔 В чем отличия между loc и iloc?

В pandas `loc` используется для доступа по метке (label) индекса, а `iloc` — для доступа по числовому индексу, независимо от того, как промаркированы индексы.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний


🤔 Какие методы регуляризации знаешь?

Это набор методов, которые помогают предотвратить переобучение модели, уменьшая сложность модели или ограничивая её способность к чрезмерному подгонке под обучающие данные. Вот основные методы регуляризации:

🟠L1 и L2-регуляризация (регуляризация норм L1 и L2)

L1-регуляризация (Lasso) В регуляризацию добавляется сумма абсолютных значений коэффициентов весов модели.
Формула: \( L1 = \lambda \sum_{i} |w_i| \), где \( \lambda \) — гиперпараметр регуляризации. Преимущество: Стимулирует разреженность, заставляя некоторые веса становиться равными нулю, что помогает в выборе признаков. Недостаток: Могут игнорироваться малые, но значимые признаки.

L2-регуляризация (Ridge):
Добавляется сумма квадратов весов модели.
Формула: \( L2 = \lambda \sum_{i} w_i^2 \).Преимущество: Регуляризует модель, не делая веса нулевыми, помогает в борьбе с мультиколлинеарностью.
Недостаток: Не отбирает признаки, оставляя их все
from sklearn.linear_model import Ridge, Lasso

# Ridge
ridge_model = Ridge(alpha=1.0)
ridge_model.fit(X_train, y_train)

# Lasso
lasso_model = Lasso(alpha=0.1)
lasso_model.fit(X_train, y_train)

🟠Dropout
Используется в нейронных сетях.
В процессе обучения случайно "выключает" часть нейронов, заставляя сеть учиться более устойчивым признакам.
Пример: при Dropout с вероятностью 0.5 половина нейронов в слое будет игнорироваться на каждой итерации.
Преимущество: Снижает зависимость от определённых нейронов, улучшая обобщающую способность сети.
import tensorflow as tf
from tensorflow.keras.layers import Dropout, Dense

model = tf.keras.Sequential([
Dense(128, activation='relu'),
Dropout(0.5), # Удаляем 50% нейронов
Dense(10, activation='softmax')
])

🟠Раннее прекращение обучения (Early Stopping)
Останавливает обучение, когда ошибка на валидационной выборке перестаёт уменьшаться. Преимущество: предотвращает переобучение без необходимости добавления дополнительной регуляризации. Недостаток: Может остановить обучение до достижения оптимального результата.
from keras.callbacks import EarlyStopping

early_stopping = EarlyStopping(monitor='val_loss', patience=5)

model.fit(X_train, y_train, validation_data=(X_val, y_val), callbacks=[early_stopping])

🟠Нормализация и стандартизация данных
Хотя это больше подготовка данных, правильное масштабирование (например, через Min-Max Scaling или Z-Score) может улучшить регуляризацию модели, сделав её более устойчивой к шуму.
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

🟠Регуляризация через ограничение весов (Weight Constraint)
Вводятся ограничения на значения весов, например, они должны оставаться в пределах заданного диапазона.
from tensorflow.keras.constraints import MaxNorm
from tensorflow.keras.layers import Dense

layer = Dense(128, activation='relu', kernel_constraint=MaxNorm(3))

🟠Аугментация данных
Увеличение объёма данных с помощью преобразований, таких как поворот изображений, изменение яркости и т. д.
Преимущество: Искусственно увеличивает выборку, что уменьшает риск переобучения.

🟠Batch Normalization
Стабилизирует обучение, нормализуя выходы скрытых слоёв. Это также действует как лёгкая форма регуляризации.
from tensorflow.keras.layers import BatchNormalization

model.add(BatchNormalization())

🟠Сложные методы (Elastic Net и DropConnect)
Elastic Net: Комбинация L1 и L2-регуляризации. DropConnect: Аналог Dropout, но выключаются не нейроны, а их веса.

Ставь 👍 и забирай 📚 Базу знаний


🤔 Как работает память в питоне?

Работа с памятью в Python основывается на управлении объектами, сборке мусора и использовании кучи (heap) для динамического распределения памяти.

🚩Концепции управления памятью

🟠Объекты и их управление
В Python все является объектом, включая числа, строки, функции и классы. Каждый объект состоит из двух частей: заголовка и данных. Заголовок включает тип объекта и счетчик ссылок, а данные содержат значение объекта.

🟠Куча (Heap)
Все объекты в Python хранятся в куче, которая управляется интерпретатором. Куча используется для динамического распределения памяти, что позволяет эффективно управлять памятью.

🟠Счетчик ссылок
Python использует счетчик ссылок для отслеживания, сколько раз объект используется в программе. Счетчик ссылок увеличивается при создании новой ссылки на объект и уменьшается при удалении ссылки. Когда счетчик ссылок объекта становится равным нулю, объект считается неиспользуемым и подлежит удалению.

🟠Сборка мусора (Garbage Collection)
Python использует механизм сборки мусора для удаления неиспользуемых объектов и освобождения памяти. Основной алгоритм сборки мусора основан на циклическом сборе (cyclic garbage collection), который позволяет находить и удалять циклические ссылки (объекты, которые ссылаются друг на друга).

🚩Как работает

🟠Счетчик ссылок
Когда объект создается, его счетчик ссылок устанавливается в 1. При создании новой ссылки на объект счетчик увеличивается на 1, при удалении ссылки — уменьшается на 1. Когда счетчик ссылок становится равным нулю, объект удаляется, а память освобождается.

🟠Циклический сборщик мусора
Основной сборщик мусора Python способен обнаруживать циклические ссылки, которые невозможно удалить с помощью простого счетчика ссылок. Сборщик мусора периодически просматривает объекты и их ссылки, чтобы найти циклы и удалить неиспользуемые объекты.

import sys

# Создание объекта и проверка счетчика ссылок
a = [1, 2, 3]
print(sys.getrefcount(a)) # Обычно возвращает 2, так как есть ссылка a и временная ссылка для вызова функции

# Увеличение счетчика ссылок
b = a
print(sys.getrefcount(a)) # Теперь возвращает 3, так как есть ссылки a, b и временная ссылка для вызова функции

# Уменьшение счетчика ссылок
del b
print(sys.getrefcount(a)) # Теперь возвращает 2, так как ссылка b удалена

# Сборка мусора
import gc

# Принудительный запуск сборщика мусора
gc.collect()

Ставь 👍 и забирай 📚 Базу знаний


🤔 В чем отличие градиентного бустинга над деревьями от случайного леса Какие базовые параметры настраиваются?

Являются популярными ансамблевыми методами на основе деревьев решений. Они оба используют множество деревьев для улучшения точности и устойчивости модели, но делают это по-разному. Рассмотрим их отличия и основные параметры, которые настраиваются.

🚩Отличия между ними

🟠Основные концепции
Случайный лес (Random Forest): Бэггинг (Bagging): Использует технику бэггинга для создания множества деревьев решений. Каждое дерево обучается на случайной подвыборке данных с заменой. Комбинирование предсказаний: Предсказания всех деревьев усредняются (для регрессии) или берется мажоритарное голосование (для классификации). Параллельное обучение: Все деревья обучаются независимо друг от друга, что позволяет выполнять параллельные вычисления.

Градиентный бустинг (Gradient Boosting): Бустинг (Boosting): Создает деревья последовательно, каждое следующее дерево исправляет ошибки предыдущего. Основная идея состоит в улучшении модели путем поэтапного добавления новых деревьев, которые минимизируют функцию ошибки. Аддитивная модель: Каждое новое дерево добавляется к ансамблю, корректируя ошибки предыдущих деревьев. Последовательное обучение: Все деревья обучаются последовательно, что делает этот метод менее подходящим для параллельных вычислений.

🟠Основные свойства
Случайный лес: Устойчив к переобучению благодаря усреднению предсказаний. Работает хорошо без тщательной настройки гиперпараметров. Менее чувствителен к шуму в данных.
Градиентный бустинг: Обычно достигает более высокой точности, но может быть более склонен к переобучению. Требует тщательной настройки гиперпараметров. Может работать медленнее, так как деревья строятся последовательно.

🚩Основные параметры для настройки

🟠Случайный лес
n_estimators: Количество деревьев в лесу. Увеличение этого параметра обычно улучшает точность, но увеличивает время обучения и предсказания.
max_depth: Максимальная глубина дерева. Ограничение глубины деревьев может предотвратить переобучение.
min_samples_split: Минимальное количество образцов, необходимых для разделения узла. Увеличение этого параметра может привести к более простым деревьям и уменьшению переобучения.
min_samples_leaf: Минимальное количество образцов в листе. Увеличение этого параметра также может помочь предотвратить переобучение.
max_features: Максимальное количество признаков, используемых для поиска лучшего разделения. Уменьшение этого параметра может уменьшить корреляцию между деревьями и уменьшить переобучение.

🟠Градиентный бустинг
n_estimators: Количество деревьев. Большое количество деревьев может улучшить производительность, но также может привести к переобучению.
learning_rate: Коэффициент скорости обучения. Меньшие значения требуют большего количества деревьев, но могут улучшить общую производительность.
max_depth: Максимальная глубина каждого дерева. Глубокие деревья могут захватывать сложные зависимости, но также могут быть склонны к переобучению.
min_samples_split: Минимальное количество образцов, необходимых для разделения узла. Как и в случайном лесу, увеличение этого параметра может привести к более простым деревьям и уменьшению переобучения.

Ставь 👍 и забирай 📚 Базу знаний

Показано 20 последних публикаций.